%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/learning/classes/general/ |
| Current File : //home/bitrix/www/bitrix/modules/learning/classes/general/clearncacheoflessontreecomponent.php |
<?php
class CLearnCacheOfLessonTreeComponent
{
const OPTION_NAME = '~CacheOfLessonTreeComponentIsDirty';
const OPTION_TS = '~CacheOfLessonTreeComponentTS'; // timestamp of last ditry cache
const CACHE_PATH = '/learning/LessonTreeComponent/';
const TTL = 3600;
public static function IsDirty()
{
$isCacheDirty = COption::GetOptionInt(
'learning',
self::OPTION_NAME,
1);
return ( (boolean) $isCacheDirty );
}
public static function MarkAsDirty()
{
COption::SetOptionString(
'learning',
self::OPTION_NAME,
1
);
COption::SetOptionString(
'learning',
self::OPTION_TS,
time()
);
}
public static function MarkAsClean()
{
COption::SetOptionString(
'learning',
self::OPTION_NAME,
0
);
}
public static function Purge()
{
$oCache = new CPHPCache();
$oCache->CleanDir(self::CACHE_PATH);
}
public static function GetData($courseId)
{
$arContents = array();
$cacheId = 'course_id_' . (string) ((int) $courseId);
$oCache = new CPHPCache();
if (
$oCache->InitCache(self::TTL, $cacheId, self::CACHE_PATH)
&& ( ! self::IsDirty() )
)
{
$arCached = $oCache->GetVars();
if (isset($arCached['arContents']) && is_array($arCached['arContents']))
$arContents = $arCached['arContents'];
}
else
{
self::Purge();
$arContents = self::GetDataWoCache($courseId);
$oCache->StartDataCache(self::TTL, $cacheId, self::CACHE_PATH);
$oCache->EndDataCache(array('arContents' => $arContents));
self::MarkAsClean();
}
return ($arContents);
}
protected static function GetDataWoCache($courseId)
{
$rsContent = CCourse::GetCourseContent(
$courseId,
array(),
array('LESSON_ID', 'NAME')
);
$arContents = array();
while ($arContent = $rsContent->GetNext())
$arContents[] = $arContent;
return ($arContents);
}
}