• Модуль: 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;
}