static function GetAbsenceData($arParams = array(), $MODE = BX_INTRANET_ABSENCE_ALL) { global $DB; $arDefaultParams = array('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' => array('ID', 'IBLOCK_ID', 'DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO', 'NAME', 'PREVIEW_TEXT', 'DETAIL_TEXT', 'PROPERTY_USER', 'PROPERTY_FINISH_STATE', 'PROPERTY_STATE', 'PROPERTY_ABSENCE_TYPE')); 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); 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'); if ($arParams['DATE_START']) { $arFilter['>=DATE_ACTIVE_TO'] = date($format, MakeTimeStamp($arParams['DATE_START'], FORMAT_DATE)); } if ($arParams['DATE_FINISH']) { $arFilter['<DATE_ACTIVE_FROM'] = date($format, MakeTimeStamp($arParams['DATE_FINISH'], FORMAT_DATE) + 86399); } if (is_array($arParams['USERS'])) { $arFilter['PROPERTY_USER'] = $arParams['USERS']; } $dbRes = CIBlockElement::GetList(array('DATE_ACTIVE_FROM' => '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; }