- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/classes/general/utils.php
- Класс: CIntranetUtils
- Вызов: CIntranetUtils::IsUserAbsent
static function IsUserAbsent($USER_ID, $CALENDAR_IBLOCK_ID = null)
{
global $CACHE_ABSENCE, $CACHE_MANAGER;
if (null === $CACHE_ABSENCE)
{
$cache_ttl = (24-date('G')) * 3600;
$cache_dir = '/'.SITE_ID.'/intranet/absence';
$obCache = new CPHPCache();
if ($obCache->InitCache($cache_ttl, 'intranet_absence', $cache_dir))
{
$arAbsence = $obCache->GetVars();
}
else
{
if (null == $CALENDAR_IBLOCK_ID)
$CALENDAR_IBLOCK_ID = COption::GetOptionInt('intranet', 'iblock_calendar', null);
$dt = ConvertTimeStamp(false, 'SHORT');
$arAbsence = CIntranetUtils::GetAbsenceData(
array(
'CALENDAR_IBLOCK_ID' => $CALENDAR_IBLOCK_ID,
'DATE_START' => $dt,
'DATE_FINISH' => $dt,
'PER_USER' => true,
'SELECT' => array('DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO'),
'CHECK_PERMISSIONS' => 'N'
)
);
$obCache->StartDataCache();
$CACHE_MANAGER->StartTagCache($cache_dir);
$CACHE_MANAGER->registerTag('calendar_user_' . $USER_ID);
$CACHE_MANAGER->RegisterTag('iblock_id_' . COption::GetOptionInt('intranet', 'iblock_absence'));
if($CALENDAR_IBLOCK_ID > 0)
{
$CACHE_MANAGER->RegisterTag('iblock_id_' . $CALENDAR_IBLOCK_ID);
}
$CACHE_MANAGER->EndTagCache();
$obCache->EndDataCache($arAbsence);
}
$CACHE_ABSENCE = is_array($arAbsence) ? $arAbsence : array();
}
else
{
$arAbsence = $CACHE_ABSENCE;
}
if (is_array($arAbsence[$USER_ID] ?? null))
{
$ts = time() + CTimeZone::getOffset();
foreach($arAbsence[$USER_ID] as $arEntry)
{
$ts_start = MakeTimeStamp($arEntry['DATE_FROM'], FORMAT_DATETIME);
if ($ts_start < $ts)
{
$ts_finish = MakeTimeStamp($arEntry['DATE_TO'], FORMAT_DATETIME);
if ($ts_finish > $ts)
return true;
if (($ts_start+date('Z')) % 86400 == 0 && $ts_start == $ts_finish)
return true;
}
}
}
return false;
}