Ejemplo n.º 1
0
 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;
 }