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