function UpdateReminders($Params = array())
 {
     $eventId = intVal($Params['id']);
     $reminders = $Params['reminders'];
     $arFields = $Params['arFields'];
     $userId = $Params['userId'];
     $bNew = $Params['bNew'];
     $path = $Params['path'];
     $path = CHTTP::urlDeleteParams($path, array("action", "sessid", "bx_event_calendar_request", "EVENT_ID"));
     $viewPath = CHTTP::urlAddParams($path, array('EVENT_ID' => $eventId));
     $remAgentParams = array('eventId' => $eventId, 'userId' => $userId, 'viewPath' => $viewPath, 'calendarType' => $arFields["CAL_TYPE"], 'ownerId' => $arFields["OWNER_ID"]);
     // 1. clean reminders
     if (!$bNew) {
         // if we edit event here can be "old" reminders
         CCalendar::RemoveAgent($remAgentParams);
     }
     // 2. Set new reminders
     $startTs = $arFields['DT_FROM_TS'];
     $agentTime = 0;
     foreach ($reminders as $reminder) {
         $delta = intVal($reminder['count']) * 60;
         //Minute
         if ($reminder['type'] == 'hour') {
             $delta = $delta * 60;
         } elseif ($reminder['type'] == 'day') {
             $delta = $delta * 60 * 24;
         }
         //Day
         $agentTime = $startTs + CCalendar::GetOffset($userId);
         if ($startTs - $delta >= time() - 60 * 5) {
             CCalendar::AddAgent(CCalendar::Date($agentTime - $delta), $remAgentParams);
         } elseif ($arFields['RRULE'] != '') {
             $arEvents = CCalendarEvent::GetList(array('arFilter' => array("ID" => $eventId, "DELETED" => "N", "FROM_LIMIT" => CCalendar::Date(time() - 3600, false), "TO_LIMIT" => CCalendar::Date(2145938400, false)), 'userId' => $userId, 'parseRecursion' => true, 'maxInstanceCount' => 2, 'preciseLimits' => true, 'fetchAttendees' => true, 'checkPermissions' => false, 'setDefaultLimit' => false));
             if ($arEvents && is_array($arEvents[0])) {
                 $nextEvent = $arEvents[0];
                 if ($arEvents[0]['DT_FROM_TS'] < time() - 60 * 5 && $arEvents[1]) {
                     $nextEvent = $arEvents[1];
                 }
                 $startTs = $nextEvent['DT_FROM_TS'];
                 $reminder = $nextEvent['REMIND'][0];
                 if ($reminder) {
                     $delta = intVal($reminder['count']) * 60;
                     //Minute
                     if ($reminder['type'] == 'hour') {
                         $delta = $delta * 60;
                     } elseif ($reminder['type'] == 'day') {
                         $delta = $delta * 60 * 24;
                     }
                     //Day
                     $agentTime = $startTs - CCalendar::GetOffset($userId);
                     if ($startTs - $delta >= time() - 60 * 5) {
                         // Inaccuracy - 5 min
                         CCalendar::AddAgent(CCalendar::Date($agentTime - $delta), $remAgentParams);
                     }
                 }
             }
         }
     }
     // reminders for attendees
     if ($arFields['IS_MEETING']) {
         foreach ($arFields['ATTENDEES'] as $attendeeId) {
             if ($attendeeId == $userId) {
                 continue;
             }
             $viewPath = CCalendar::GetPath('user', $attendeeId, true);
             $remAgentParams = array('eventId' => $eventId, 'userId' => $attendeeId, 'viewPath' => $viewPath, 'calendarType' => $arFields["CAL_TYPE"], 'ownerId' => $arFields["OWNER_ID"]);
             foreach ($reminders as $reminder) {
                 $delta = intVal($reminder['count']) * 60;
                 //Minute
                 if ($reminder['type'] == 'hour') {
                     $delta = $delta * 60;
                 } elseif ($reminder['type'] == 'day') {
                     $delta = $delta * 60 * 24;
                 }
                 //Day
                 if ($startTs - $delta >= time() - 60 * 5) {
                     // Inaccuracy - 5 min
                     CCalendar::AddAgent(CCalendar::Date($agentTime - $delta), $remAgentParams);
                 }
             }
         }
     }
 }
Exemple #2
0
 public static function ModifyEvent($calendarId, $arFields)
 {
     list($sectionId, $entityType, $entityId) = $calendarId;
     $userId = $entityType == 'user' ? $entityId : 0;
     self::$silentErrorMode = true;
     CCalendar::SetOffset(false, CCalendar::GetOffset($userId));
     $entityType = strtolower($entityType);
     $eventId = isset($arFields["ID"]) && intval($arFields["ID"]) > 0 ? intval($arFields["ID"]) : 0;
     $arNewFields = array("DAV_XML_ID" => $arFields['XML_ID'], "CAL_DAV_LABEL" => isset($arFields['PROPERTY_BXDAVCD_LABEL']) && strlen($arFields['PROPERTY_BXDAVCD_LABEL']) > 0 ? $arFields['PROPERTY_BXDAVCD_LABEL'] : '', "DAV_EXCH_LABEL" => isset($arFields['PROPERTY_BXDAVEX_LABEL']) && strlen($arFields['PROPERTY_BXDAVEX_LABEL']) > 0 ? $arFields['PROPERTY_BXDAVEX_LABEL'] : '', "ID" => $eventId, 'NAME' => $arFields["NAME"] ? $arFields["NAME"] : GetMessage('EC_NONAME_EVENT'), 'CAL_TYPE' => $entityType, 'OWNER_ID' => $entityId, 'DESCRIPTION' => isset($arFields['DESCRIPTION']) ? $arFields['DESCRIPTION'] : '', 'SECTIONS' => $sectionId, 'ACCESSIBILITY' => isset($arFields['ACCESSIBILITY']) ? $arFields['ACCESSIBILITY'] : 'busy', 'IMPORTANCE' => isset($arFields['IMPORTANCE']) ? $arFields['IMPORTANCE'] : 'normal', "REMIND" => is_array($arFields['REMIND']) ? $arFields['REMIND'] : array(), "RRULE" => is_array($arFields['RRULE']) ? is_array($arFields['RRULE']) : array(), "VERSION" => isset($arFields['VERSION']) ? intVal($arFields['VERSION']) : 1, "PRIVATE_EVENT" => !!$arFields['PRIVATE_EVENT']);
     $bServerTime = false;
     if (isset($arFields['DT_FROM_TS'], $arFields['DT_TO_TS'])) {
         $arNewFields["DT_FROM_TS"] = $arFields['DT_FROM_TS'];
         $arNewFields["DT_TO_TS"] = $arFields['DT_TO_TS'];
         $arNewFields["SKIP_TIME"] = $arFields['SKIP_TIME'];
         $bServerTime = true;
     } elseif (isset($arFields['ACTIVE_FROM'], $arFields['ACTIVE_TO'])) {
         $arNewFields["DT_FROM"] = $arFields['ACTIVE_FROM'];
         $arNewFields["DT_TO"] = $arFields['ACTIVE_TO'];
     }
     if (!empty($arFields['PROPERTY_REMIND_SETTINGS'])) {
         $ar = explode("_", $arFields["PROPERTY_REMIND_SETTINGS"]);
         if (count($ar) == 2) {
             $arNewFields["REMIND"][] = array('type' => $ar[1], 'count' => floatVal($ar[0]));
         }
     }
     if (!empty($arFields['PROPERTY_ACCESSIBILITY'])) {
         $arNewFields["ACCESSIBILITY"] = $arFields['PROPERTY_ACCESSIBILITY'];
     }
     if (!empty($arFields['PROPERTY_IMPORTANCE'])) {
         $arNewFields["IMPORTANCE"] = $arFields['PROPERTY_IMPORTANCE'];
     }
     if (!empty($arFields['PROPERTY_LOCATION'])) {
         $arNewFields["LOCATION"] = CCalendar::UnParseTextLocation($arFields['PROPERTY_LOCATION']);
     }
     if (!empty($arFields['DETAIL_TEXT'])) {
         $arNewFields["DESCRIPTION"] = $arFields['DETAIL_TEXT'];
     }
     $arNewFields["DESCRIPTION"] = CCalendar::ClearExchangeHtml($arNewFields["DESCRIPTION"]);
     if (isset($arFields["PROPERTY_PERIOD_TYPE"]) && in_array($arFields["PROPERTY_PERIOD_TYPE"], array("DAILY", "WEEKLY", "MONTHLY", "YEARLY"))) {
         $arNewFields['RRULE']['FREQ'] = $arFields["PROPERTY_PERIOD_TYPE"];
         $arNewFields['RRULE']['INTERVAL'] = $arFields["PROPERTY_PERIOD_COUNT"];
         if (!isset($arNewFields['DT_LENGTH']) && !empty($arFields['PROPERTY_EVENT_LENGTH'])) {
             $arNewFields['DT_LENGTH'] = intval($arFields['PROPERTY_EVENT_LENGTH']);
         } else {
             $arNewFields['DT_LENGTH'] = $arFields['DT_TO_TS'] - $arFields['DT_FROM_TS'];
             //$arNewFields['DT_LENGTH'] = self::GetDayLen();
         }
         if ($arNewFields['RRULE']['FREQ'] == "WEEKLY" && !empty($arFields['PROPERTY_PERIOD_ADDITIONAL'])) {
             $arNewFields['RRULE']['BYDAY'] = array();
             $bydays = explode(',', $arFields['PROPERTY_PERIOD_ADDITIONAL']);
             foreach ($bydays as $day) {
                 $day = CCalendar::WeekDayByInd($day, false);
                 if ($day !== false) {
                     $arNewFields['RRULE']['BYDAY'][] = $day;
                 }
             }
             $arNewFields['RRULE']['BYDAY'] = implode(',', $arNewFields['RRULE']['BYDAY']);
         }
         if (isset($arFields['ACTIVE_TO'])) {
             $arNewFields['RRULE']['UNTIL'] = $arFields['ACTIVE_TO'];
         } else {
             $arNewFields['RRULE']['UNTIL'] = $arFields['DT_TO_TS'];
         }
     }
     $eventId = CCalendar::SaveEvent(array('arFields' => $arNewFields, 'userId' => $userId, 'bAffectToDav' => false, 'bSilentAccessMeeting' => true, 'bServerTime' => $bServerTime));
     self::$silentErrorMode = false;
     return $eventId;
 }
Exemple #3
0
    die;
}
header("Content-Type: application/x-javascript");
if (!CModule::IncludeModule('calendar') || !(isset($GLOBALS['USER']) && is_object($GLOBALS['USER']) && $GLOBALS['USER']->IsAuthorized()) || $GLOBALS['USER']->GetId() != $arParams['USER_ID']) {
    return array('status' => 'failed');
}
// We check it in the mobile menu
CUserOptions::SetOption("mobile", "calendar_first_visit", "N");
// Limits
if (strlen($arParams["INIT_DATE"]) > 0 && strpos($arParams["INIT_DATE"], '.') !== false) {
    $ts = CCalendar::Timestamp($arParams["INIT_DATE"]);
} else {
    $ts = time();
}
$arParams["FUTURE_MONTH_COUNT"] = 2;
$userOffset = CCalendar::GetOffset($arParams['USER_ID']);
$fromLimit = CCalendar::Date($ts + $userOffset, false);
$ts = CCalendar::Timestamp($fromLimit);
$delta = 5184000;
// 86400 * 30 * 2 ~ two month;
$toLimit = CCalendar::Date($ts + $delta, false);
$arEvents = CCalendar::GetNearestEventsList(array('bCurUserList' => true, 'userId' => $arParams['USER_ID'], 'fromLimit' => $fromLimit, 'toLimit' => $toLimit));
if ($arEvents == 'access_denied') {
    $arResult['ACCESS_DENIED'] = true;
} elseif ($arEvents == 'inactive_feature') {
    $arResult['INACTIVE_FEATURE'] = true;
} elseif (is_array($arEvents)) {
    $arSections = array(array("ID" => 'today', "NAME" => CMobile::PrepareStrToJson(GetMessage('EVENTS_GROUP_TODAY'))), array("ID" => 'tomorrow', "NAME" => CMobile::PrepareStrToJson(GetMessage('EVENTS_GROUP_TOMORROW'))), array("ID" => 'later', "NAME" => CMobile::PrepareStrToJson(GetMessage('EVENTS_GROUP_LATE'))));
    $url = '/mobile/calendar/view_event.php';
    $arResult['EVENTS'] = array();
    $oneDay = 86400;
Exemple #4
0
 public function __getRow($event, $listName, &$last_change)
 {
     $arStatusValues = $this->arStatusValues;
     $arPriorityValues = $this->arPriorityValues;
     $first_week_day = COption::GetOptionString('calendar', 'week_start', 'MO');
     $first_week_day = strtolower($first_week_day);
     $change = MakeTimeStamp($event['TIMESTAMP_X']);
     if ($last_change < $change) {
         $last_change = $change;
     }
     $bRecurrent = isset($event['RRULE']) && $event['RRULE'] != "" ? 1 : 0;
     $rrule = CCalendarEvent::ParseRRULE($event['RRULE']);
     $ts_start = $event['DT_FROM_TS'];
     $ts_finish = $event['DT_TO_TS'];
     $bAllDay = $event['DT_SKIP_TIME'] == 'Y' ? 1 : 0;
     $TZBias = intval(date('Z'));
     $offset = CCalendar::GetOffset();
     $duration = $event['DT_LENGTH'];
     if ($bAllDay) {
         $duration -= 20;
     }
     if (!$bAllDay || defined('OLD_OUTLOOK_VERSION')) {
         $ts_start = $ts_start - $TZBias - $offset;
         // We need time in UTC
         $ts_finish = $ts_finish - $TZBias - $offset;
     }
     $obRow = new CXMLCreator('z:row');
     $obRow->setAttribute('ows_ID', $event['ID']);
     $obRow->setAttribute('ows_Title', htmlspecialcharsback($event['NAME']));
     // we have data htmlspecialchared yet
     $version = $event['VERSION'] ? $event['VERSION'] : 1;
     $obRow->setAttribute('ows_Attachments', 0);
     $obRow->setAttribute('ows_owshiddenversion', $version);
     $obRow->setAttribute('ows_MetaInfo_vti_versionhistory', md5($event['ID']) . ':' . $version);
     /*
     	ows_MetaInfo_BusyStatus='2' - Editor
     	ows_MetaInfo_IntendedBusyStatus='-1' - Creator
     
     	values:
     		-1 - Unspecified busy status. Protocol clients can choose to display one of the other values if BusyStatus is -1.
     		0 - Free - ACCESSIBILITY => 'free'
     		1 - Tentative - ACCESSIBILITY => 'quest'
     		2 - Busy - ACCESSIBILITY => 'busy'
     		3 - Out of Office - ACCESSIBILITY => 'absent'
     */
     $status = $arStatusValues[$event['ACCESSIBILITY']];
     $obRow->setAttribute('ows_MetaInfo_BusyStatus', $status === null ? -1 : $status);
     $obRow->setAttribute('ows_MetaInfo_Priority', intval($arPriorityValues[$event['IMPORTANCE']]));
     $obRow->setAttribute('ows_Created', $this->__makeDateTime(MakeTimeStamp($event['DATE_CREATE']) - $TZBias));
     $obRow->setAttribute('ows_Modified', $this->__makeDateTime($change - $TZBias));
     $obRow->setAttribute('ows_EventType', $bRecurrent ? 1 : 0);
     $obRow->setAttribute('ows_Location', CCalendar::GetTextLocation($event['LOCATION']));
     $obRow->setAttribute('ows_Description', $event['~DESCRIPTION']);
     // Description parsed from BB-codes to HTML
     $obRow->setAttribute('ows_EventDate', $this->__makeDateTime($ts_start));
     $obRow->setAttribute('ows_EndDate', $this->__makeDateTime($ts_start + $event['DT_LENGTH']));
     $obRow->setAttribute('ows_fAllDayEvent', $bAllDay);
     /* Recurrence */
     $obRow->setAttribute('ows_fRecurrence', $bRecurrent);
     if ($bRecurrent) {
         $obRow->setAttribute('ows_UID', CIntranetUtils::makeGUID(md5($event['ID'] . '_' . $change)));
         $tz_data = '';
         $tz_data .= '<timeZoneRule>';
         $tz_data .= '<standardBias>' . -intval(($TZBias - (date('I') ? 3600 : 0)) / 60) . '</standardBias>';
         $tz_data .= '<additionalDaylightBias>-60</additionalDaylightBias>';
         $bUseTransition = COption::GetOptionString('intranet', 'tz_transition', 'Y') == 'Y';
         if ($bUseTransition) {
             $transition_standard = COption::GetOptionString('intranet', 'tz_transition_standard', '');
             $transition_daylight = COption::GetOptionString('intranet', 'tz_transition_daylight', '');
             if (!$transition_standard) {
                 $transition_standard = '<transitionRule month="10" day="su" weekdayOfMonth="last" /><transitionTime>3:0:0</transitionTime>';
             }
             if (!$transition_daylight) {
                 $transition_daylight = '<transitionRule  month="3" day="su" weekdayOfMonth="last" /><transitionTime>2:0:0</transitionTime>';
             }
             $tz_data .= '<standardDate>' . $transition_standard . '</standardDate><daylightDate>' . $transition_daylight . '</daylightDate>';
         }
         $tz_data .= '</timeZoneRule>';
         $obRow->setAttribute('ows_XMLTZone', $tz_data);
         $recurence_data = '';
         $recurence_data .= '<recurrence>';
         $recurence_data .= '<rule>';
         $recurence_data .= '<firstDayOfWeek>' . $first_week_day . '</firstDayOfWeek>';
         $recurence_data .= '<repeat>';
         switch ($rrule['FREQ']) {
             case 'DAILY':
                 $recurence_data .= '<daily dayFrequency="' . $rrule['INTERVAL'] . '" />';
                 break;
             case 'WEEKLY':
                 $days = '';
                 foreach ($rrule['BYDAY'] as $day) {
                     $days .= strtolower($day) . '="TRUE" ';
                 }
                 $recurence_data .= '<weekly ' . $days . 'weekFrequency="' . $rrule['INTERVAL'] . '" />';
                 break;
             case 'MONTHLY':
                 $recurence_data .= '<monthly monthFrequency="' . $rrule['INTERVAL'] . '" day="' . date('d', $ts_start) . '" />';
                 break;
             case 'YEARLY':
                 $recurence_data .= '<yearly yearFrequency="' . $rrule['INTERVAL'] . '" month="' . date('m', $ts_start) . '" day="' . date('d', $ts_start) . '" />';
                 break;
         }
         $recurence_data .= '</repeat>';
         if (date('Y', $ts_finish) == '2038' || date('Y', $ts_finish) == '2037') {
             $recurence_data .= '<repeatForever>FALSE</repeatForever>';
         } else {
             $recurence_data .= '<windowEnd>' . $this->__makeDateTime($ts_finish) . '</windowEnd>';
         }
         $recurence_data .= '</rule>';
         $recurence_data .= '</recurrence>';
         $obRow->setAttribute('ows_RecurrenceData', $recurence_data);
         $obRow->setAttribute('ows_Duration', $duration);
     } else {
         $obRow->setAttribute('ows_Duration', $duration);
     }
     $obRow->setAttribute('ows_UniqueId', $event['ID'] . ';#' . $listName);
     $obRow->setAttribute('ows_FSObjType', $event['ID'] . ';#0');
     $obRow->setAttribute('ows_Editor', $event['CREATED_BY'] . ';#' . CCalendar::GetUserName($event['CREATED_BY']));
     $obRow->setAttribute('ows_PermMask', '0x7fffffffffffffff');
     $obRow->setAttribute('ows_ContentTypeId', '0x01020005CE290982A58C439E00342702139D1A');
     return $obRow;
 }
 public static function GetList($Params = array())
 {
     global $DB, $USER_FIELD_MANAGER;
     $getUF = $Params['getUserfields'] !== false;
     $checkPermissions = $Params['checkPermissions'] !== false;
     $bCache = CCalendar::CacheTime() > 0;
     $Params['setDefaultLimit'] = $Params['setDefaultLimit'] === true;
     $userId = isset($Params['userId']) ? intVal($Params['userId']) : CCalendar::GetCurUserId();
     CTimeZone::Disable();
     if ($bCache) {
         $cache = new CPHPCache();
         $cacheId = 'event_list_' . md5(serialize($Params));
         if ($checkPermissions) {
             $cacheId .= 'chper' . CCalendar::GetCurUserId() . '|';
         }
         if (CCalendar::IsSocNet() && CCalendar::IsSocnetAdmin()) {
             $cacheId .= 'socnetAdmin|';
         }
         $cacheId .= CCalendar::GetOffset();
         $cachePath = CCalendar::CachePath() . 'event_list';
         if ($cache->InitCache(CCalendar::CacheTime(), $cacheId, $cachePath)) {
             $res = $cache->GetVars();
             $arResult = $res["arResult"];
             $arAttendees = $res["arAttendees"];
         }
     }
     if (!$bCache || !isset($arResult)) {
         $arFilter = $Params['arFilter'];
         if ($getUF) {
             $obUserFieldsSql = new CUserTypeSQL();
             $obUserFieldsSql->SetEntity("CALENDAR_EVENT", "CE.ID");
             $obUserFieldsSql->SetSelect(array("UF_*"));
             $obUserFieldsSql->SetFilter($arFilter);
         }
         $fetchMeetings = $Params['fetchMeetings'];
         $Params['fetchAttendees'] = $Params['fetchAttendees'] !== false;
         $skipDeclined = $Params['skipDeclined'] === true;
         if ($Params['setDefaultLimit'] !== false) {
             if (!isset($arFilter["FROM_LIMIT"])) {
                 // default 3 month back
                 $arFilter["FROM_LIMIT"] = CCalendar::Date(time() - 31 * 3 * 24 * 3600, false);
             }
             if (!isset($arFilter["TO_LIMIT"])) {
                 // default one year into the future
                 $arFilter["TO_LIMIT"] = CCalendar::Date(time() + 365 * 24 * 3600, false);
             }
         }
         $arOrder = isset($Params['arOrder']) ? $Params['arOrder'] : array('SORT' => 'asc');
         $arFields = self::GetFields();
         if ($arFilter["DELETED"] === false) {
             unset($arFilter["DELETED"]);
         } elseif (!isset($arFilter["DELETED"])) {
             $arFilter["DELETED"] = "N";
         }
         $ownerId = isset($arFilter['OWNER_ID']) ? $arFilter['OWNER_ID'] : CCalendar::GetOwnerId();
         $arSqlSearch = array();
         if (is_array($arFilter)) {
             $filter_keys = array_keys($arFilter);
             for ($i = 0, $l = count($filter_keys); $i < $l; $i++) {
                 $n = strtoupper($filter_keys[$i]);
                 $val = $arFilter[$filter_keys[$i]];
                 if (is_string($val) && strlen($val) <= 0 || strval($val) == "NOT_REF") {
                     continue;
                 }
                 if ($n == 'FROM_LIMIT') {
                     $ts = CCalendar::Timestamp($val, false);
                     if ($ts > 0) {
                         $arSqlSearch[] = "CE.DATE_TO_TS_UTC>=" . $ts;
                     }
                 } elseif ($n == 'TO_LIMIT') {
                     $ts = CCalendar::Timestamp($val, false);
                     if ($ts > 0) {
                         $arSqlSearch[] = "CE.DATE_FROM_TS_UTC<=" . ($ts + 86399);
                     }
                 } elseif ($n == 'OWNER_ID' && intVal($val) > 0) {
                     $arSqlSearch[] = "CE.OWNER_ID=" . intVal($val);
                 }
                 if ($n == 'NAME') {
                     $arSqlSearch[] = "CE.NAME='" . CDatabase::ForSql($val) . "'";
                 } elseif ($n == 'CREATED_BY') {
                     if (is_array($val)) {
                         $val = array_map(intVal, $val);
                         $arSqlSearch[] = 'CE.CREATED_BY IN (\'' . implode('\',\'', $val) . '\')';
                     } else {
                         if (intVal($val) > 0) {
                             $arSqlSearch[] = "CE.CREATED_BY=" . intVal($val);
                         }
                     }
                 } elseif ($n == 'SECTION') {
                     if (!is_array($val)) {
                         $val = array($val);
                     }
                     $q = "";
                     if (is_array($val)) {
                         $sval = '';
                         foreach ($val as $sectid) {
                             if (intVal($sectid) > 0) {
                                 $sval .= intVal($sectid) . ',';
                             }
                         }
                         $sval = trim($sval, ' ,');
                         if ($sval != '') {
                             $q = 'CES.SECT_ID in (' . $sval . ')';
                         }
                     }
                     if ($q != "") {
                         $arSqlSearch[] = $q;
                     }
                 } elseif ($n == 'DAV_XML_ID' && is_array($val)) {
                     array_walk($val, array($DB, 'ForSql'));
                     $arSqlSearch[] = 'CE.DAV_XML_ID IN (\'' . implode('\',\'', $val) . '\')';
                 } elseif (isset($arFields[$n])) {
                     $arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val, 'N');
                 }
             }
         }
         if ($getUF) {
             $r = $obUserFieldsSql->GetFilter();
             if (strlen($r) > 0) {
                 $arSqlSearch[] = "(" . $r . ")";
             }
         }
         if ($skipDeclined) {
             //$arSqlSearch[] = "(CE.IS_MEETING<>1 OR CE.MEETING_STATUS<>'N')";
         }
         $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
         $strOrderBy = '';
         foreach ($arOrder as $by => $order) {
             if (isset($arFields[strtoupper($by)])) {
                 $strOrderBy .= $arFields[strtoupper($by)]["FIELD_NAME"] . ' ' . (strtolower($order) == 'desc' ? 'desc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS LAST" : "") : 'asc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS FIRST" : "")) . ',';
             }
         }
         if (strlen($strOrderBy) > 0) {
             $strOrderBy = "ORDER BY " . rtrim($strOrderBy, ",");
         }
         $selectList = "";
         foreach ($arFields as $field) {
             $selectList .= $field['FIELD_NAME'] . ", ";
         }
         $strSql = "\n\t\t\t\tSELECT " . $selectList . "CES.SECT_ID, CES.REL\n\t\t\t\t\t" . ($getUF ? $obUserFieldsSql->GetSelect() : '') . "\n\t\t\t\tFROM\n\t\t\t\t\tb_calendar_event CE\n\t\t\t\tLEFT JOIN b_calendar_event_sect CES ON (CE.ID=CES.EVENT_ID)\n\t\t\t\t" . ($getUF ? $obUserFieldsSql->GetJoin("CE.ID") : '') . "\n\t\t\t\tWHERE\n\t\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strOrderBy}";
         $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($getUF) {
             $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("CALENDAR_EVENT"));
         }
         $arResult = array();
         $arMeetingIds = array();
         $arEvents = array();
         $bIntranet = CCalendar::IsIntranetEnabled();
         $defaultMeetingSection = false;
         while ($event = $res->Fetch()) {
             $event['IS_MEETING'] = intVal($event['IS_MEETING']) > 0;
             if ($event['IS_MEETING'] && $event['CAL_TYPE'] == 'user' && $event['OWNER_ID'] == $userId && !$event['SECT_ID']) {
                 if (!$defaultMeetingSection) {
                     $defaultMeetingSection = CCalendar::GetMeetingSection($userId);
                     if (!$defaultMeetingSection || !CCalendarSect::GetById($defaultMeetingSection, false)) {
                         $sectRes = CCalendarSect::GetSectionForOwner($event['CAL_TYPE'], $userId);
                         $defaultMeetingSection = $sectRes['sectionId'];
                     }
                 }
                 self::ConnectEventToSection($event['ID'], $defaultMeetingSection);
                 $event['SECT_ID'] = $defaultMeetingSection;
             }
             $arEvents[] = $event;
             if ($bIntranet && $event['IS_MEETING']) {
                 $arMeetingIds[] = $event['ID'];
             }
         }
         if ($Params['fetchAttendees'] && count($arMeetingIds) > 0) {
             $arAttendees = self::GetAttendees($arMeetingIds);
         } else {
             $arAttendees = array();
         }
         foreach ($arEvents as $event) {
             $event["ACCESSIBILITY"] = trim($event["ACCESSIBILITY"]);
             if ($bIntranet && $event['IS_MEETING']) {
                 if (isset($event['MEETING']) && $event['MEETING'] != "") {
                     $event['MEETING'] = unserialize($event['MEETING']);
                     if (!is_array($event['MEETING'])) {
                         $event['MEETING'] = array();
                     }
                 }
                 //					if ($arUserMeeting[$event['ID']])
                 //					{
                 //						$status = $arUserMeeting[$event['ID']]['STATUS'];
                 //						if ($skipDeclined && $status == "N")
                 //							continue;
                 //
                 //						if ($status == "Y" || $userId == $ownerId)
                 //						{
                 //							$event['USER_MEETING'] = array(
                 //								'ATTENDEE_ID' => $ownerId,
                 //								'ACCESSIBILITY' => $arUserMeeting[$event['ID']]['ACCESSIBILITY'],
                 //								'COLOR' => $arUserMeeting[$event['ID']]['COLOR'],
                 //								'TEXT_COLOR' => $arUserMeeting[$event['ID']]['TEXT_COLOR'],
                 //								'DESCRIPTION' => $arUserMeeting[$event['ID']]['DESCRIPTION'],
                 //								'STATUS' => $status,
                 //								'REMIND' => array()
                 //							);
                 //
                 //							if (isset($arUserMeeting[$event['ID']]['REMIND']) && $arUserMeeting[$event['ID']]['REMIND'] != "")
                 //							{
                 //								$event['USER_MEETING']['REMIND'] = unserialize($arUserMeeting[$event['ID']]['REMIND']);
                 //								if (!is_array($event['USER_MEETING']['REMIND']))
                 //									$event['USER_MEETING']['REMIND'] = array();
                 //							}
                 //						}
                 //						else if (is_array($arFilter['SECTION']) && !in_array($event['SECT_ID'], $arFilter['SECTION']))
                 //						{
                 //							continue;
                 //						}
                 //					}
             }
             if (isset($event['REMIND']) && $event['REMIND'] != "") {
                 $event['REMIND'] = unserialize($event['REMIND']);
                 if (!is_array($event['REMIND'])) {
                     $event['REMIND'] = array();
                 }
             }
             if ($bIntranet && $event['IS_MEETING'] && isset($arAttendees[$event['ID']]) && count($arAttendees[$event['ID']]) > 0) {
                 $event['~ATTENDEES'] = $arAttendees[$event['ID']];
             }
             $checkPermissionsForEvent = $userId != $event['CREATED_BY'];
             // It's creator
             // It's event in user's calendar
             if ($checkPermissionsForEvent && $event['CAL_TYPE'] == 'user' && $userId == $event['OWNER_ID']) {
                 $checkPermissionsForEvent = false;
             }
             if ($checkPermissionsForEvent && $event['IS_MEETING'] && $event['USER_MEETING'] && $event['USER_MEETING']['ATTENDEE_ID'] == $userId) {
                 $checkPermissionsForEvent = false;
             }
             if ($checkPermissionsForEvent && $event['IS_MEETING'] && is_array($event['~ATTENDEES'])) {
                 foreach ($event['~ATTENDEES'] as $att) {
                     if ($att['USER_ID'] == $userId) {
                         $checkPermissionsForEvent = false;
                         break;
                     }
                 }
             }
             if ($checkPermissions && $checkPermissionsForEvent) {
                 $event = self::ApplyAccessRestrictions($event, $userId);
             }
             if ($event === false) {
                 continue;
             }
             $event = self::PreHandleEvent($event);
             if ($Params['parseRecursion'] && self::CheckRecurcion($event)) {
                 self::ParseRecursion($arResult, $event, array('fromLimit' => $arFilter["FROM_LIMIT"], 'toLimit' => $arFilter["TO_LIMIT"], 'instanceCount' => isset($Params['maxInstanceCount']) ? $Params['maxInstanceCount'] : false, 'preciseLimits' => isset($Params['preciseLimits']) ? $Params['preciseLimits'] : false));
             } else {
                 self::HandleEvent($arResult, $event);
             }
         }
         if ($bCache) {
             $cache->StartDataCache(CCalendar::CacheTime(), $cacheId, $cachePath);
             $cache->EndDataCache(array("arResult" => $arResult, "arAttendees" => $arAttendees));
         }
     }
     CTimeZone::Enable();
     //self::$lastAttendeesList = $arAttendees;
     if (!is_array(self::$lastAttendeesList)) {
         self::$lastAttendeesList = $arAttendees;
     } elseif (is_array($arAttendees)) {
         foreach ($arAttendees as $eventId => $att) {
             self::$lastAttendeesList[$eventId] = $att;
         }
     }
     return $arResult;
 }
Exemple #6
0
 public static function GetOffsetUTC($userId = false, $dateTimestamp)
 {
     if (!$userId && self::$userId) {
         $userId = self::$userId;
     }
     $tzName = self::GetUserTimezoneName($userId);
     if ($tzName) {
         $offset = self::GetTimezoneOffset($tzName, $dateTimestamp);
     } else {
         $offset = date("Z", $dateTimestamp) + CCalendar::GetOffset($userId);
     }
     return intVal($offset);
 }