static function GetAbsenceData($arParams = array(), $MODE = BX_INTRANET_ABSENCE_ALL)
{
global $DB;
$arDefaultParams = [
'CALENDAR_IBLOCK_ID' => false,
'ABSENCE_IBLOCK_ID' => COption::GetOptionInt('intranet', 'iblock_absence'),
'DATE_START' => date($DB->DateFormatToPHP(CSite::GetDateFormat('FULL')), strtotime(date('Y-m-01'))),
'DATE_FINISH' => date($DB->DateFormatToPHP(CSite::GetDateFormat('FULL')), strtotime('+1 month', strtotime(date('Y-m-01')))),
'USERS' => false,
'PER_USER' => true,
'SELECT' => ['ID', 'IBLOCK_ID', 'DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO', 'NAME', 'PREVIEW_TEXT', 'DETAIL_TEXT', 'PROPERTY_USER', 'PROPERTY_FINISH_STATE', 'PROPERTY_STATE', 'PROPERTY_ABSENCE_TYPE'],
'CHECK_PERMISSIONS' => 'Y',
];
foreach ($arDefaultParams as $key => $value)
{
if (!isset($arParams[$key]))
$arParams[$key] = $value;
}
$arParams['SELECT'] = array_merge(
$arParams['SELECT'],
array_diff(array('DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO', 'PROPERTY_USER'), $arParams['SELECT'])
);
$calendar2 = COption::GetOptionString("intranet", "calendar_2", "N") == "Y";
$bLoadCalendar = ($arParams['CALENDAR_IBLOCK_ID'] > 0 || $calendar2) && (($MODE & BX_INTRANET_ABSENCE_PERSONAL) > 0);
$bLoadAbsence = $arParams['ABSENCE_IBLOCK_ID'] > 0;
$arResult = array();
$arEntries = array();
$format = $DB->DateFormatToPHP(CLang::GetDateFormat("FULL"));
if ($bLoadCalendar)
{
$arMethodParams = array(
'iblockId' => $arParams['CALENDAR_IBLOCK_ID'],
'arUserIds' => $arParams['USERS'],
'bList' => true,
'checkPermissions' => $arParams['CHECK_PERMISSIONS'] !== 'N'
);
if ($arParams['DATE_START'])
$arMethodParams['fromLimit'] = date($format, MakeTimeStamp($arParams['DATE_START'], FORMAT_DATE));
if ($arParams['DATE_FINISH'])
$arMethodParams['toLimit'] = date($format, MakeTimeStamp($arParams['DATE_FINISH'], FORMAT_DATE) + 86399);
if ($calendar2 && CModule::IncludeModule('calendar'))
$arCalendarEntries = CCalendar::GetAbsentEvents($arMethodParams);
else
$arCalendarEntries = CEventCalendar::GetAbsentEvents($arMethodParams);
if (is_array($arCalendarEntries))
{
foreach ($arCalendarEntries as $key => $arEntry)
{
$arCalendarEntries[$key]['ENTRY_TYPE'] = BX_INTRANET_ABSENCE_PERSONAL;
}
$arEntries = array_merge($arEntries, $arCalendarEntries);
}
if ($arParams['PER_USER'])
{
foreach ($arEntries as $key => $arEntry)
{
if (!isset($arResult[$arEntry['USER_ID']]))
$arResult[$arEntry['USER_ID']] = array();
$arResult[$arEntry['USER_ID']][] = $arEntry;
}
}
else
{
$arResult = $arEntries;
}
}
if ($bLoadAbsence)
{
if ($arParams['USERS'] === false || (is_array($arParams['USERS']) && count($arParams['USERS']) > 0))
{
$arFilter = array(
'IBLOCK_ID' => $arParams['ABSENCE_IBLOCK_ID'],
'ACTIVE' => 'Y',
//'PROPERTY_USER_ACTIVE' => 'Y',
);
if ($arParams['DATE_START'])
$arFilter['>=DATE_ACTIVE_TO'] = date($format, MakeTimeStamp($arParams['DATE_START'], FORMAT_DATE));
if ($arParams['DATE_FINISH'])
$arFilter[' 'ASC', 'DATE_ACTIVE_TO' => 'ASC'),
$arFilter,
false,
false,
$arParams['SELECT']
);
while ($arRes = $dbRes->Fetch())
{
$arRes['USER_ID'] = $arRes['PROPERTY_USER_VALUE'];
$arRes['DATE_FROM'] = $arRes['DATE_ACTIVE_FROM'];
$arRes['DATE_TO'] = $arRes['DATE_ACTIVE_TO'];
$arRes['ENTRY_TYPE'] = BX_INTRANET_ABSENCE_HR;
if ($arParams['PER_USER'])
{
if (!isset($arResult[$arRes['USER_ID']]))
$arResult[$arRes['USER_ID']] = array();
$arResult[$arRes['USER_ID']][] = $arRes;
}
else
{
$arResult[] = $arRes;
}
}
}
}
return $arResult;
}