• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/intranet/absence/user.php
  • Класс: BitrixSocialnetworkIntegrationIntranetAbsenceUser
  • Вызов: User::getVacationList
static function getVacationList(): array
{
	global $CACHE_MANAGER;

	$result = [];

	$cacheTTL = 3600 * 24 * 30;
	$cacheDir = '/sonet/user_absence';

	$cache = new CPHPCache();
	if ($cache->initCache($cacheTTL, 'intranet_absence', $cacheDir))
	{
		$result = $cache->getVars();
	}
	else
	{
		$cache->startDataCache();
		$CACHE_MANAGER->startTagCache($cacheDir);

		if (
			ModuleManager::isModuleInstalled('intranet')
			&& Loader::includeModule('iblock')
			&& ($absenceIblockId = (int)Option::get('intranet', 'iblock_absence'))
		)
		{
			$CACHE_MANAGER->registerTag('iblock_id_'.$absenceIblockId);

			$res = CIBlockProperty::getList(
				[],
				[
					'IBLOCK_ID' => $absenceIblockId,
					'ACTIVE' => 'Y',
					'CODE' => 'ABSENCE_TYPE',
				]
			);

			if (
				($property = $res->fetch())
				&& ($absenceTypePropertyId = (int)$property['ID'])
			)
			{
				$vacationXMLIdList = [];
				$res = CIBlockPropertyEnum::getList(
					[],
					[
						'PROPERTY_ID' => $absenceTypePropertyId,
						'XML_ID' => [ 'VACATION', 'LEAVEMATERINITY' ],
					]
				);

				while ($enum = $res->fetch())
				{
					$vacationXMLIdList[$enum['XML_ID']] = (int)$enum['ID'];
				}

				if (isset($vacationXMLIdList['LEAVEMATERINITY']))
				{
					$result = array_merge($result, self::getVacationListOfType([
						'absenceIblockId' => $absenceIblockId,
						'absenceTypeId' => $vacationXMLIdList['LEAVEMATERINITY'],
					]));
				}

				if (isset($vacationXMLIdList['VACATION']))
				{
					$result = array_merge($result, self::getVacationListOfType([
						'absenceIblockId' => $absenceIblockId,
						'absenceTypeId' => $vacationXMLIdList['VACATION'],
						'fromTimestamp' => time() - (3600 * 24 * 120),
					]));
				}
			}
		}

		$CACHE_MANAGER->endTagCache();
		$cache->endDataCache($result);
	}

	return $result;
}