• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/userabsence.php
  • Класс: BitrixIntranetUserAbsence
  • Вызов: UserAbsence::getCurrentMonth
static function getCurrentMonth()
{
	static $result;

	$iblockId = self::getIblockId();
	if ($iblockId <= 0)
	{
		return array();
	}

	if (!is_null($result))
	{
		return $result;
	}

	$cache = Cache::createInstance();
	if($cache->initCache(self::CACHE_TTL, 'list_v7_'.date('Y-m-01'), self::CACHE_PATH))
	{
		$result = $cache->getVars();
	}
	else
	{
		$typesList = Array();
		$vacationTypes = Array();
		$enums = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>self::getIblockId(), "CODE"=>"ABSENCE_TYPE"));
		while ($enum_fields = $enums->GetNext())
		{
			$typesList[(int)$enum_fields['ID']] = $enum_fields['EXTERNAL_ID'];

			if(!self::isVacation($enum_fields['EXTERNAL_ID']))
			{
				continue;
			}

			$vacationTypes[(int)$enum_fields['ID']] = $enum_fields['EXTERNAL_ID'];
		}

		$timeZoneEnabled = CTimeZone::Enabled();

		if ($timeZoneEnabled)
		{
			CTimeZone::Disable();
		}

		$absenceData = CIntranetUtils::GetAbsenceData(
			array(
				'PER_USER' => true,
				'SELECT' => array('ID', 'DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO', 'PROPERTY_ABSENCE_TYPE'),
				'ABSENCE_IBLOCK_ID' => self::getIblockId()
			),
			BX_INTRANET_ABSENCE_HR
		);

		if ($timeZoneEnabled)
		{
			CTimeZone::Enable();
		}

		$result = Array();
		foreach ($absenceData as $userId => $record)
		{
			foreach ($record as $index => $data)
			{
				$data['PROPERTY_ABSENCE_TYPE_ENUM_ID'] = (int)$data['PROPERTY_ABSENCE_TYPE_ENUM_ID'];

				$dateFrom = new BitrixMainTypeDateTime($data['DATE_FROM']);
				$dateTo = new BitrixMainTypeDateTime($data['DATE_TO']);
				$result[$userId][$index] = Array(
					'ID' => $data['ID'],
					'USER_ID' => $data['USER_ID'],
					'ENTRY_TYPE' => $typesList[$data['PROPERTY_ABSENCE_TYPE_ENUM_ID']],
					'ENTRY_TYPE_ID' => $data['PROPERTY_ABSENCE_TYPE_ENUM_ID'],
					'ENTRY_TYPE_VALUE' => $data['PROPERTY_ABSENCE_TYPE_VALUE'],
					'IS_VACATION' => in_array($data['PROPERTY_ABSENCE_TYPE_ENUM_ID'], array_keys($vacationTypes)),
					'DATE_FROM_TS' => $dateFrom->getTimestamp(),
					'DATE_TO_TS' => $dateTo->getTimestamp(),
				);
			}
		}

		$cache->startDataCache();
		$cache->endDataCache($result);
	}

	return $result;
}