Пример #1
2
 public function Execute()
 {
     if (!CModule::IncludeModule("calendar")) {
         return CBPActivityExecutionStatus::Closed;
     }
     $rootActivity = $this->GetRootActivity();
     $documentId = $rootActivity->GetDocumentId();
     $documentService = $this->workflow->GetService("DocumentService");
     $fromTs = CCalendar::Timestamp($this->CalendarFrom);
     $toTs = $this->CalendarTo == '' ? $fromTs : CCalendar::Timestamp($this->CalendarTo);
     $arFields = array("CAL_TYPE" => !$this->CalendarType ? 'user' : $this->CalendarType, "NAME" => trim($this->CalendarName) == '' ? GetMessage('EC_DEFAULT_EVENT_NAME') : $this->CalendarName, "DESCRIPTION" => $this->CalendarDesrc, "SKIP_TIME" => date('H:i', $fromTs) == '00:00' && date('H:i', $toTs) == '00:00', "IS_MEETING" => false, "RRULE" => false);
     if ($fromTs == $toTs && !$arFields["SKIP_TIME"]) {
         $toTs += 3600;
     }
     $arFields['DATE_FROM'] = CCalendar::Date($fromTs);
     $arFields['DATE_TO'] = CCalendar::Date($toTs);
     if ($this->CalendarSection && intVal($this->CalendarSection) > 0) {
         $arFields['SECTIONS'] = array(intVal($this->CalendarSection));
     }
     if ($this->CalendarOwnerId || $arFields["CAL_TYPE"] != "user" && $arFields["CAL_TYPE"] != "group") {
         $arFields["OWNER_ID"] = $this->CalendarOwnerId;
         $eventId = CCalendar::SaveEvent(array('arFields' => $arFields, 'autoDetectSection' => true));
     } else {
         $arCalendarUser = CBPHelper::ExtractUsers($this->CalendarUser, $documentId);
         foreach ($arCalendarUser as $calendarUser) {
             $arFields["CAL_TYPE"] = "user";
             $arFields["OWNER_ID"] = $calendarUser;
             $eventId = CCalendar::SaveEvent(array('arFields' => $arFields, 'autoDetectSection' => true));
         }
     }
     return CBPActivityExecutionStatus::Closed;
 }
Пример #2
0
 public static function GetAbsent($users = false, $Params = array())
 {
     global $DB;
     // Can be called from agent... So we have to create $USER if it is not exists
     $tempUser = CCalendar::TempUser(false, true);
     $curUserId = isset($Params['userId']) ? intVal($Params['userId']) : CCalendar::GetCurUserId();
     $arUsers = array();
     if ($users !== false && is_array($users)) {
         foreach ($users as $id) {
             if ($id > 0) {
                 $arUsers[] = intVal($id);
             }
         }
     }
     if (!count($arUsers)) {
         $users = false;
     }
     // Part 1: select ordinary events
     $arFilter = array('CAL_TYPE' => 'user', 'DELETED' => 'N', 'ACCESSIBILITY' => 'absent');
     if (isset($Params['fromLimit'])) {
         $arFilter['FROM_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['fromLimit'], false), true, false);
     }
     if (isset($Params['toLimit'])) {
         $arFilter['TO_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['toLimit'], false), true, false);
     }
     $arEvents = CCalendarEvent::GetList(array('arFilter' => $arFilter, 'getUserfields' => false, 'parseRecursion' => true, 'fetchAttendees' => false, 'fetchMeetings' => true, 'userId' => $curUserId, 'checkPermissions' => false, 'preciseLimits' => true));
     // Part 2: select attendees
     CTimeZone::Disable();
     if (count($arUsers) > 0) {
         $userQ = ' AND CA.USER_ID in (' . implode(',', $arUsers) . ')';
     } else {
         $userQ = '';
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tCA.EVENT_ID as ID, CA.USER_ID, CA.STATUS, CA.ACCESSIBILITY,\n\t\t\t\tCE.CAL_TYPE,CE.OWNER_ID,CE.NAME," . $DB->DateToCharFunction("CE.DT_FROM") . " as DT_FROM," . $DB->DateToCharFunction("CE.DT_TO") . " as DT_TO, CE.DT_LENGTH, CE.PRIVATE_EVENT, CE.ACCESSIBILITY, CE.IMPORTANCE, CE.IS_MEETING, CE.MEETING_HOST, CE.MEETING, CE.LOCATION, CE.RRULE, CE.EXRULE, CE.RDATE, CE.EXDATE,\n\t\t\t\tCES.SECT_ID\n\t\t\tFROM b_calendar_attendees CA\n\t\t\tLEFT JOIN\n\t\t\t\tb_calendar_event CE ON(CA.EVENT_ID=CE.ID)\n\t\t\tLEFT JOIN\n\t\t\t\tb_calendar_event_sect CES ON (CA.EVENT_ID=CES.EVENT_ID)\n\t\t\tWHERE\n\t\t\t\t\tCE.ID IS NOT NULL\n\t\t\t\tAND\n\t\t\t\t\tCE.DELETED='N'\n\t\t\t\tAND\n\t\t\t\t\tSTATUS='Y'\n\t\t\t\tAND\n\t\t\t\t\tCA.ACCESSIBILITY='absent'\n\t\t\t\t{$userQ}\n\t\t\t";
     if (isset($arFilter['FROM_LIMIT'])) {
         $strSql .= "AND ";
         if (strtoupper($DB->type) == "MYSQL") {
             $strSql .= "CE.DT_TO>=FROM_UNIXTIME('" . MkDateTime(FmtDate($arFilter['FROM_LIMIT'], "D.M.Y"), "d.m.Y") . "')";
         } elseif (strtoupper($DB->type) == "MSSQL") {
             $strSql .= "CE.DT_TO>=" . $DB->CharToDateFunction($arFilter['FROM_LIMIT'], "SHORT");
         } elseif (strtoupper($DB->type) == "ORACLE") {
             $strSql .= "CE.DT_TO>=TO_DATE('" . FmtDate($arFilter['FROM_LIMIT'], "D.M.Y") . " 00:00:00','dd.mm.yyyy hh24:mi:ss')";
         }
     }
     if ($arFilter['TO_LIMIT']) {
         $strSql .= "AND ";
         if (strtoupper($DB->type) == "MYSQL") {
             $strSql .= "CE.DT_FROM<=FROM_UNIXTIME('" . MkDateTime(FmtDate($arFilter['TO_LIMIT'], "D.M.Y") . " 23:59:59", "d.m.Y H:i:s") . "')";
         } elseif (strtoupper($DB->type) == "MSSQL") {
             $strSql .= "CE.DT_FROM<=dateadd(day, 1, " . $DB->CharToDateFunction($arFilter['TO_LIMIT'], "SHORT") . ")";
         } elseif (strtoupper($DB->type) == "ORACLE") {
             $strSql .= "CE.DT_FROM<=TO_DATE('" . FmtDate($arFilter['TO_LIMIT'], "D.M.Y") . " 23:59:59','dd.mm.yyyy hh24:mi:ss')";
         }
     }
     $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $arEvents2 = array();
     while ($event = $res->Fetch()) {
         $event = self::PreHandleEvent($event);
         if ($event['CAL_TYPE'] == 'user' && $event['IS_MEETING'] && $event['OWNER_ID'] == $event['USER_ID']) {
             continue;
         }
         if (self::CheckRecurcion($event)) {
             self::ParseRecursion($arEvents2, $event, array('fromLimit' => $arFilter["FROM_LIMIT"], 'toLimit' => $arFilter["TO_LIMIT"]));
         } else {
             self::HandleEvent($arEvents2, $event);
         }
     }
     CTimeZone::Enable();
     $arEvents = array_merge($arEvents, $arEvents2);
     $bSocNet = CModule::IncludeModule("socialnetwork");
     $result = array();
     $settings = CCalendar::GetSettings(array('request' => false));
     foreach ($arEvents as $event) {
         $userId = isset($event['USER_ID']) ? $event['USER_ID'] : $event['OWNER_ID'];
         if ($users !== false && !in_array($userId, $arUsers)) {
             continue;
         }
         if ($bSocNet && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $userId, "calendar")) {
             continue;
         }
         if ((!$event['CAL_TYPE'] != 'user' || $curUserId != $event['OWNER_ID']) && $curUserId != $event['CREATED_BY'] && !isset($arUserMeeting[$event['ID']])) {
             $sectId = $event['SECT_ID'];
             if (!$event['ACCESSIBILITY']) {
                 $event['ACCESSIBILITY'] = 'busy';
             }
             $private = $event['PRIVATE_EVENT'] && $event['CAL_TYPE'] == 'user';
             $bManager = false;
             if (!$private && CCalendar::IsIntranetEnabled() && CModule::IncludeModule('intranet') && $event['CAL_TYPE'] == 'user' && $settings['dep_manager_sub']) {
                 $bManager = in_array($curUserId, CCalendar::GetUserManagers($event['OWNER_ID'], true));
             }
             if ($private || !CCalendarSect::CanDo('calendar_view_full', $sectId) && !$bManager) {
                 if ($private) {
                     $event['NAME'] = '[' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                 } else {
                     if (!CCalendarSect::CanDo('calendar_view_title', $sectId)) {
                         $event['NAME'] = '[' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                     } else {
                         $event['NAME'] = $event['NAME'] . ' [' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                     }
                 }
             }
         }
         $result[] = array('ID' => $event['ID'], 'NAME' => $event['NAME'], 'DATE_FROM' => $event['DT_FROM'], 'DATE_TO' => $event['DT_TO'], 'DT_FROM_TS' => $event['DT_FROM_TS'], 'DT_TO_TS' => $event['DT_TO_TS'], 'CREATED_BY' => $userId, 'DETAIL_TEXT' => '', 'USER_ID' => $userId);
     }
     // Sort by DT_FROM_TS
     usort($result, array('CCalendar', '_NearestSort'));
     CCalendar::TempUser($tempUser, false);
     return $result;
 }
Пример #3
0
            if ($RRULE['INTERVAL'] == 1) {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_MONTH');
            } else {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_MONTH_1', array('#MONTH#' => $RRULE['INTERVAL']));
            }
            break;
        case 'YEARLY':
            if ($RRULE['INTERVAL'] == 1) {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_YEAR', array('#DAY#' => 0, '#MONTH#' => 0));
            } else {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_YEAR_1', array('#YEAR#' => $RRULE['INTERVAL'], '#DAY#' => 0, '#MONTH#' => 0));
            }
            break;
    }
    if ($RRULE['UNTIL'] != '' && $RRULE['UNTIL'] != CCalendar::GetMaxDate()) {
        $repeatHTML .= '<br>' . GetMessage('EC_RRULE_UNTIL', array('#UNTIL_DATE#' => CCalendar::Date(CCalendar::Timestamp($RRULE['UNTIL']))));
    }
    ?>
			<tr>
				<td class="feed-calendar-view-text-cell-l"><?php 
    echo GetMessage('EC_T_REPEAT');
    ?>
:</td>
				<td class="feed-calendar-view-text-cell-r"><?php 
    echo $repeatHTML;
    ?>
</td>
			</tr>
			<?php 
}
/*if ($event['RRULE'] !== '')*/
Пример #4
0
 public static function DoSaveToDav($Params = array(), &$arFields, $oCurEvent = false)
 {
     $sectionId = $Params['sectionId'];
     $bExchange = $Params['bExchange'];
     $bCalDav = $Params['bCalDav'];
     if (isset($oCurEvent['DAV_XML_ID'])) {
         $arFields['DAV_XML_ID'] = $oCurEvent['DAV_XML_ID'];
     }
     if (isset($oCurEvent['DAV_EXCH_LABEL'])) {
         $arFields['DAV_EXCH_LABEL'] = $oCurEvent['DAV_EXCH_LABEL'];
     }
     if (isset($oCurEvent['CAL_DAV_LABEL'])) {
         $arFields['CAL_DAV_LABEL'] = $oCurEvent['CAL_DAV_LABEL'];
     }
     $oSect = CCalendarSect::GetById($sectionId);
     if ($oCurEvent) {
         if ($oCurEvent['SECT_ID'] != $sectionId) {
             $bCalDav = CCalendar::IsCalDAVEnabled() && $oCurEvent['CAL_TYPE'] == 'user' && strlen($oCurEvent['CAL_DAV_LABEL']) > 0;
             $bExchangeEnabled = CCalendar::IsExchangeEnabled() && $oCurEvent['CAL_TYPE'] == 'user';
             if ($bExchangeEnabled || $bCalDav) {
                 $res = CCalendar::DoDeleteToDav(array('bCalDav' => $bCalDav, 'bExchangeEnabled' => $bExchangeEnabled, 'sectionId' => $oCurEvent['SECT_ID']), $oCurEvent);
                 if ($res !== true) {
                     return CCalendar::ThrowError($res);
                 }
             }
         }
     }
     $fromTs = CCalendar::Timestamp($arFields['DT_FROM']);
     $toTs = CCalendar::Timestamp($arFields['DT_TO']);
     if (!isset($arFields['DT_FROM_TS'])) {
         $arFields['DT_FROM_TS'] = $fromTs;
     }
     if (!isset($arFields['DT_TO_TS'])) {
         $arFields['DT_TO_TS'] = $toTs;
     }
     $arDavFields = $arFields;
     CCalendarEvent::CheckFields($arDavFields);
     if ($arDavFields['RRULE'] != '') {
         $arDavFields['RRULE'] = $arFields['RRULE'];
     }
     $arDavFields['DETAIL_TEXT'] = $arDavFields['DESCRIPTION'];
     $arDavFields['DETAIL_TEXT_TYPE'] = 'text';
     $arDavFields['ACTIVE_FROM'] = $arDavFields['DT_FROM'];
     $arDavFields['ACTIVE_TO'] = $arDavFields['DT_TO'];
     $arDavFields['PROPERTY_LOCATION'] = $arDavFields['LOCATION']['NEW'];
     if ($arDavFields['PROPERTY_LOCATION'] !== '') {
         $arDavFields['PROPERTY_LOCATION'] = CCalendar::GetTextLocation($arDavFields['PROPERTY_LOCATION']);
     }
     $arDavFields['PROPERTY_IMPORTANCE'] = $arDavFields['IMPORTANCE'];
     $arDavFields['REMIND_SETTINGS'] = '';
     if ($arFields['REMIND'] && is_array($arFields['REMIND']) && is_array($arFields['REMIND'][0])) {
         $arDavFields['REMIND_SETTINGS'] = floatVal($arFields['REMIND'][0]['count']) . '_' . $arFields['REMIND'][0]['type'];
     }
     // RRULE
     $arDavFields['PROPERTY_PERIOD_TYPE'] = 'NONE';
     if (is_array($arFields['RRULE']) && isset($arFields['RRULE']['FREQ']) && in_array($arFields['RRULE']['FREQ'], array('HOURLY', 'DAILY', 'MONTHLY', 'YEARLY', 'WEEKLY'))) {
         $arDavFields['PROPERTY_PERIOD_TYPE'] = $arFields['RRULE']['FREQ'];
         // Interval
         $arDavFields['PROPERTY_PERIOD_COUNT'] = isset($arFields['RRULE']['INTERVAL']) && intVal($arFields['RRULE']['INTERVAL']) > 1 ? intVal($arFields['RRULE']['INTERVAL']) : 1;
         if ($arFields['RRULE']['FREQ'] == 'WEEKLY' && isset($arFields['RRULE']['BYDAY'])) {
             //PROPERTY_PERIOD_ADDITIONAL
             $BYDAYS = array();
             $days = array('SU' => 0, 'MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6);
             $bydays = explode(',', $arFields['RRULE']['BYDAY']);
             foreach ($bydays as $day) {
                 $BYDAYS[] = $days[$day];
             }
             $arDavFields['PROPERTY_PERIOD_ADDITIONAL'] = implode(',', $BYDAYS);
         }
         $h24 = 60 * 60 * 24;
         if ($fromTs == $toTs) {
             $arDavFields['PROPERTY_EVENT_LENGTH'] = $h24;
         } else {
             $arDavFields['PROPERTY_EVENT_LENGTH'] = intVal($toTs - $fromTs);
             if ($arDavFields['PROPERTY_EVENT_LENGTH'] % $h24 == 0) {
                 // We have dates without times
                 $arDavFields['PROPERTY_EVENT_LENGTH'] += $h24;
             }
         }
         // Until date
         if (isset($arFields['RRULE']['UNTIL'])) {
             $periodTs = $arFields['RRULE']['UNTIL'];
         } else {
             $periodTs = CCalendar::GetMaxTimestamp();
         }
         $arDavFields['ACTIVE_TO'] = CCalendar::Date($periodTs);
     }
     // **** Synchronize with CalDav ****
     if ($bCalDav && $oSect['CAL_DAV_CON'] > 0) {
         // New event or move existent event to DAV calendar
         if ($arFields['ID'] <= 0 || $oCurEvent && !$oCurEvent['CAL_DAV_LABEL']) {
             $DAVRes = CDavGroupdavClientCalendar::DoAddItem($oSect['CAL_DAV_CON'], $oSect['CAL_DAV_CAL'], $arDavFields);
         } else {
             // Edit existent event
             $DAVRes = CDavGroupdavClientCalendar::DoUpdateItem($oSect['CAL_DAV_CON'], $oSect['CAL_DAV_CAL'], $oCurEvent['DAV_XML_ID'], $oCurEvent['CAL_DAV_LABEL'], $arDavFields);
         }
         if (!is_array($DAVRes) || !array_key_exists("XML_ID", $DAVRes)) {
             return CCalendar::CollectCalDAVErros($DAVRes);
         }
         // // It's ok, we successfuly save event to caldav calendar - and save it to DB
         $arFields['DAV_XML_ID'] = $DAVRes['XML_ID'];
         $arFields['CAL_DAV_LABEL'] = $DAVRes['MODIFICATION_LABEL'];
     } elseif ($bExchange && $oSect['IS_EXCHANGE'] && strlen($oSect['DAV_EXCH_CAL']) > 0 && $oSect['DAV_EXCH_CAL'] !== 0) {
         $ownerId = $arFields['OWNER_ID'];
         // New event  or move existent event to Exchange calendar
         if ($arFields['ID'] <= 0 || $oCurEvent && !$oCurEvent['DAV_EXCH_LABEL']) {
             $exchRes = CDavExchangeCalendar::DoAddItem($ownerId, $oSect['DAV_EXCH_CAL'], $arDavFields);
         } else {
             $exchRes = CDavExchangeCalendar::DoUpdateItem($ownerId, $oCurEvent['DAV_XML_ID'], $oCurEvent['DAV_EXCH_LABEL'], $arDavFields);
         }
         if (!is_array($exchRes) || !array_key_exists("XML_ID", $exchRes)) {
             return CCalendar::CollectExchangeErrors($exchRes);
         }
         // It's ok, we successfuly save event to exchange calendar - and save it to DB
         $arFields['DAV_XML_ID'] = $exchRes['XML_ID'];
         $arFields['DAV_EXCH_LABEL'] = $exchRes['MODIFICATION_LABEL'];
     }
     return true;
 }
Пример #5
0
                $repeatHTML = GetMessage('EC_RRULE_EVERY_MONTH');
            } else {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_MONTH_1', array('#MONTH#' => $event['RRULE']['INTERVAL']));
            }
            break;
        case 'YEARLY':
            if ($event['RRULE']['INTERVAL'] == 1) {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_YEAR', array('#DAY#' => $event['FROM_MONTH_DAY'], '#MONTH#' => $event['FROM_MONTH']));
            } else {
                $repeatHTML = GetMessage('EC_RRULE_EVERY_YEAR_1', array('#YEAR#' => $event['RRULE']['INTERVAL'], '#DAY#' => $event['FROM_MONTH_DAY'], '#MONTH#' => $event['FROM_MONTH']));
            }
            break;
    }
    $repeatHTML .= '<br>' . GetMessage('EC_RRULE_FROM', array('#FROM_DATE#' => CCalendar::Date(CCalendar::Timestamp($event['~DATE_FROM']), false)));
    if ($event['RRULE']['UNTIL'] != CCalendar::GetMaxDate()) {
        $repeatHTML .= ' ' . GetMessage('EC_RRULE_UNTIL', array('#UNTIL_DATE#' => CCalendar::Date(CCalendar::Timestamp($event['RRULE']['UNTIL']), false)));
    }
    ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
    echo GetMessage('EC_T_REPEAT');
    ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><?php 
    echo $repeatHTML;
    ?>
</td>
			</tr>
		<?php 
}
/* if ($event['RRULE']) */
Пример #6
0
 public static function Edit($Params)
 {
     global $DB, $USER;
     $arFields = $Params['arFields'];
     if (!self::CheckFields($arFields)) {
         return false;
     }
     $userId = intVal(isset($Params['userId']) ? $Params['userId'] : $USER->GetID());
     //if (!CCalendarSect::CanDo('calendar_edit_section', $ID))
     //	return CCalendar::ThrowError('EC_ACCESS_DENIED');
     $bNew = !isset($arFields['ID']) || $arFields['ID'] <= 0;
     if (isset($arFields['COLOR']) || $bNew) {
         $arFields['COLOR'] = CCalendar::Color($arFields['COLOR']);
     }
     $arFields['TIMESTAMP_X'] = CCalendar::Date(mktime());
     if (is_array($arFields['EXPORT'])) {
         $arFields['EXPORT'] = array('ALLOW' => !!$arFields['EXPORT']['ALLOW'], 'SET' => in_array($arFields['EXPORT']['set'], array('all', '3_9', '6_12')) ? $arFields['EXPORT']['set'] : 'all');
     }
     if (!is_array($arFields['EXPORT'])) {
         $arFields['EXPORT'] = array('ALLOW' => false, 'SET' => 'all');
     }
     $arFields['EXPORT'] = serialize($arFields['EXPORT']);
     if ($bNew) {
         if (!isset($arFields['DATE_CREATE'])) {
             $arFields['DATE_CREATE'] = CCalendar::Date(mktime());
         }
         if ((!isset($arFields['CREATED_BY']) || !$arFields['CREATED_BY']) && $USER) {
             $arFields['CREATED_BY'] = $USER->IsAuthorized() ? $USER->GetID() : '';
         }
         unset($arFields['ID']);
         $ID = CDatabase::Add("b_calendar_section", $arFields, array('DESCRIPTION'));
     } else {
         $ID = $arFields['ID'];
         unset($arFields['ID']);
         $strUpdate = $DB->PrepareUpdate("b_calendar_section", $arFields);
         $strSql = "UPDATE b_calendar_section SET " . $strUpdate . " WHERE ID=" . IntVal($ID);
         $DB->QueryBind($strSql, array('DESCRIPTION' => $arFields['DESCRIPTION']));
     }
     //SaveAccess
     if ($ID > 0 && is_array($arFields['ACCESS'])) {
         if ($arFields['CAL_TYPE'] == 'user' && $arFields['OWNER_ID'] == $userId || self::CanDo('calendar_edit_access', $ID)) {
             self::SavePermissions($ID, $arFields['ACCESS']);
         } elseif ($bNew) {
             self::SavePermissions($ID, CCalendarSect::GetDefaultAccess($arFields['CAL_TYPE'], $arFields['OWNER_ID']));
         }
     }
     if ($bNew && $ID > 0 && !isset($arFields['ACCESS'])) {
         self::SavePermissions($ID, CCalendarSect::GetDefaultAccess($arFields['CAL_TYPE'], $arFields['OWNER_ID']));
     }
     CCalendar::ClearCache('section_list');
     if ($ID > 0 && isset(self::$Permissions[$ID])) {
         unset(self::$Permissions[$ID]);
         self::$arOp = array();
     }
     return $ID;
 }
Пример #7
0
 private function ConvertICalToArray($event, $calendar)
 {
     static $arWeekDayMap = array("SU" => 6, "MO" => 0, "TU" => 1, "WE" => 2, "TH" => 3, "FR" => 4, "SA" => 5);
     $request = $this->groupdav->GetRequest();
     $tzFrom = $event->GetPropertyParameter("DTSTART", "TZID");
     $tzTo = $event->GetPropertyParameter("DTEND", "TZID");
     $skipTime = !is_null($event->GetPropertyParameter("DTSTART", "VALUE")) && !is_null($event->GetPropertyParameter("DTEND", "VALUE")) && is_null($tzFrom) && is_null($tzTo);
     $dateFrom = CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("DTSTART"));
     $dateTo = CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("DTEND"));
     if ($skipTime) {
         $dateTo = CCalendar::Date(MakeTimeStamp($dateTo) - 86400);
     }
     $arFields = array("NAME" => $event->GetPropertyValue("SUMMARY"), "PROPERTY_LOCATION" => $event->GetPropertyValue("LOCATION"), "DETAIL_TEXT" => $event->GetPropertyValue("DESCRIPTION"), "DETAIL_TEXT_TYPE" => 'html', "DATE_FROM" => $dateFrom, "DATE_TO" => $dateTo, "TZ_FROM" => $tzFrom, "TZ_TO" => $tzTo, "SKIP_TIME" => $skipTime, "MODIFIED_BY" => $request->GetPrincipal()->Id(), "DAV_XML_ID" => $event->GetPropertyValue("UID"), "DATE_CREATE" => CDavICalendarTimeZone::GetFormattedServerDateTime($event->GetPropertyValue("CREATED")), "PROPERTY_CATEGORY" => $event->GetPropertyValue("CATEGORIES"));
     if ($priority = $event->GetPropertyValue("PRIORITY")) {
         if ($priority <= 3) {
             $arFields["PROPERTY_IMPORTANCE"] = "high";
         } elseif ($priority > 3 && $priority <= 6) {
             $arFields["PROPERTY_IMPORTANCE"] = "normal";
         } else {
             $arFields["PROPERTY_IMPORTANCE"] = "low";
         }
     } else {
         $arFields["PROPERTY_IMPORTANCE"] = "normal";
     }
     if ($transp = $event->GetPropertyValue("TRANSP")) {
         if ($transp == 'TRANSPARENT') {
             $arFields["PROPERTY_ACCESSIBILITY"] = "free";
         } else {
             $arFields["PROPERTY_ACCESSIBILITY"] = "busy";
         }
     } else {
         $arFields["PROPERTY_ACCESSIBILITY"] = "busy";
     }
     $arVAlarm = $event->GetComponents("VALARM");
     if (count($arVAlarm) > 0 && $event->GetPropertyValue("X-MOZ-LASTACK") == null) {
         $trigger = $arVAlarm[0]->GetPropertyValue("TRIGGER");
         if (preg_match('/^-P(T?)([0-9]+)([HMD])$/i', $trigger, $arMatches)) {
             $arPeriodMapTmp = array("M" => "min", "H" => "hour", "D" => "day");
             $arFields["PROPERTY_REMIND_SETTINGS"] = $arMatches[2] . "_" . $arPeriodMapTmp[$arMatches[3]];
         }
     }
     if ($rrule = $event->GetPropertyValueParsed("RRULE")) {
         // RRULE:FREQ=WEEKLY;COUNT=5;INTERVAL=2;BYDAY=TU,SA
         $arFields["PROPERTY_PERIOD_TYPE"] = $rrule["FREQ"];
         $arFields["PROPERTY_PERIOD_COUNT"] = isset($rrule["INTERVAL"]) ? $rrule["INTERVAL"] : 1;
         if ($arFields["PROPERTY_PERIOD_TYPE"] == "WEEKLY") {
             if (isset($rrule["BYDAY"])) {
                 $ar = explode(",", $rrule["BYDAY"]);
                 $ar1 = array();
                 foreach ($ar as $v) {
                     $ar1[] = $arWeekDayMap[strtoupper($v)];
                 }
                 $arFields["PROPERTY_PERIOD_ADDITIONAL"] = implode(",", $ar1);
             } else {
                 $arFields["PROPERTY_PERIOD_ADDITIONAL"] = date("w", MakeTimeStamp($arFields["DATE_FROM"])) - 1;
                 if ($arFields["PROPERTY_PERIOD_ADDITIONAL"] < 0) {
                     $arFields["PROPERTY_PERIOD_ADDITIONAL"] = 6;
                 }
             }
         }
         $arFields["PROPERTY_EVENT_LENGTH"] = MakeTimeStamp($arFields["DATE_TO"]) - MakeTimeStamp($arFields["DATE_FROM"]);
         if (isset($rrule["UNTIL"])) {
             $arFields["ACTIVE_TO"] = CDavICalendarTimeZone::GetFormattedServerDateTime($rrule["UNTIL"]);
         } elseif (isset($rrule["COUNT"])) {
             $eventTime = $this->GetPeriodicEventTime(MakeTimeStamp($arFields["ACTIVE_TO"]), array("freq" => $arFields["PROPERTY_PERIOD_TYPE"], "interval" => $arFields["PROPERTY_PERIOD_COUNT"], "byday" => $arFields["PROPERTY_PERIOD_ADDITIONAL"]), $rrule["COUNT"]);
             $arFields["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $eventTime);
         } else {
             $arFields["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), 2145938400);
         }
     }
     return $arFields;
 }
Пример #8
0
$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;
    $todayStartTs = CCalendar::Timestamp(CCalendar::Date(time() + $userOffset, false));
    $todayEndTs = $todayStartTs + $oneDay - 1;
    $tomorrowStartTs = $todayStartTs + $oneDay;
    $tomorrowEndTs = $tomorrowStartTs + $oneDay - 1;
    $today = CCalendar::Date(time(), false);
    $tomorrow = CCalendar::Date(time() + 86400, false);
    $bToday = false;
    $bTomorrow = false;
    $bLater = false;
    $use_sections = "YES";
    $iconEvent = '/bitrix/templates/mobile_app/images/calendar/event.png';
    $iconMeeting = '/bitrix/templates/mobile_app/images/calendar/meeting.png';
    $iconInviting = '/bitrix/templates/mobile_app/images/calendar/meeting-q.png';
    $dateFormat = GetMessage('MB_CAL_EVENT_DATE_FORMAT');
    $timeFormat = IsAmPmMode() ? GetMessage('MB_CAL_EVENT_TIME_FORMAT_AMPM') : GetMessage('MB_CAL_EVENT_TIME_FORMAT');
    $count = count($arEvents);
    for ($i = 0; $i < $count; $i++) {
        $event = $arEvents[$i];
        $event['DT_FROM_TS'] = CCalendar::_fixTimestamp($event['DT_FROM_TS']);
        $event['DT_TO_TS'] = CCalendar::_fixTimestamp($event['DT_TO_TS']);
        $item = array("ID" => $event['ID'], "NAME" => CMobile::PrepareStrToJson($event['NAME']), "URL" => $url . "?event_id=" . $event['ID']);
Пример #9
0
    {
        return CSite::GetDateFormat("FULL");
    }
}
if (!CModule::IncludeModule("calendar") || !class_exists("CCalendar")) {
    return ShowError(GetMessage("EC_CALENDAR_MODULE_NOT_INSTALLED"));
}
// Limits
if (strlen($arParams["INIT_DATE"]) > 0 && strpos($arParams["INIT_DATE"], '.') !== false) {
    $ts = CCalendar::Timestamp($arParams["INIT_DATE"]);
} else {
    $ts = time();
}
$fromLimit = CCalendar::Date($ts, false);
$ts = CCalendar::Timestamp($fromLimit);
$toLimit = CCalendar::Date(mktime(0, 0, 0, date("m", $ts) + $arParams["FUTURE_MONTH_COUNT"], date("d", $ts), date("Y", $ts)), false);
$arResult['ITEMS'] = array();
$arEvents = CCalendar::GetNearestEventsList(array('bCurUserList' => $arParams['B_CUR_USER_LIST'], 'fromLimit' => $fromLimit, 'toLimit' => $toLimit, 'type' => $arParams['CALENDAR_TYPE'], 'sectionId' => $arParams['CALENDAR_SECTION_ID']));
if ($arEvents == 'access_denied') {
    $arResult['ACCESS_DENIED'] = true;
} elseif ($arEvents == 'inactive_feature') {
    $arResult['INACTIVE_FEATURE'] = true;
} elseif (is_array($arEvents)) {
    if (strpos($arParams['DETAIL_URL'], '?') !== FALSE) {
        $arParams['DETAIL_URL'] = substr($arParams['DETAIL_URL'], 0, strpos($arParams['DETAIL_URL'], '?'));
    }
    $arParams['DETAIL_URL'] = str_replace('#user_id#', $curUserId, strtolower($arParams['DETAIL_URL']));
    for ($i = 0, $l = count($arEvents); $i < $l; $i++) {
        $arEvents[$i]['_DETAIL_URL'] = $arParams['DETAIL_URL'] . '?EVENT_ID=' . $arEvents[$i]['ID'] . '&EVENT_DATE=' . $arEvents[$i]['DT_FROM'];
        if ($arEvents[$i]['IS_MEETING'] && $arEvents[$i]['USER_MEETING']['STATUS'] == 'Q') {
            $arEvents[$i]['_ADD_CLASS'] = ' calendar-not-confirmed';
Пример #10
0
 public static function EventGetNearest($arParams = array(), $nav = null, $server = null)
 {
     $userId = CCalendar::GetCurUserId();
     $methodName = "calendar.event.get.nearest";
     if (!isset($arParams['type'], $arParams['ownerId']) || $arParams['forCurrentUser']) {
         $arParams['type'] = 'user';
         $arParams['ownerId'] = $userId;
         $arParams['forCurrentUser'] = true;
     }
     if (!isset($arParams['days'])) {
         $arParams['days'] = 60;
     }
     // Limits
     $ts = time();
     $fromLimit = CCalendar::Date($ts, false);
     $toLimit = CCalendar::Date($ts + CCalendar::DAY_LENGTH * $arParams['days'], false);
     $arEvents = CCalendar::GetNearestEventsList(array('bCurUserList' => !!$arParams['forCurrentUser'], 'fromLimit' => $fromLimit, 'toLimit' => $toLimit, 'type' => $arParams['CALENDAR_TYPE'], 'sectionId' => $arParams['CALENDAR_SECTION_ID']));
     if ($arEvents == 'access_denied' || $arEvents == 'inactive_feature') {
         throw new Exception(GetMessage('CAL_REST_ACCESS_DENIED'));
     } elseif (is_array($arEvents)) {
         if (isset($arParams['detailUrl'])) {
             if (strpos($arParams['detailUrl'], '?') !== FALSE) {
                 $arParams['detailUrl'] = substr($arParams['detailUrl'], 0, strpos($arParams['detailUrl'], '?'));
             }
             $arParams['detailUrl'] = str_replace('#user_id#', $userId, strtolower($arParams['detailUrl']));
             for ($i = 0, $l = count($arEvents); $i < $l; $i++) {
                 $arEvents[$i]['~detailUrl'] = $arParams['detailUrl'] . '?EVENT_ID=' . $arEvents[$i]['ID'] . '&EVENT_DATE=' . $arEvents[$i]['DT_FROM'];
             }
         }
         if (isset($arParams['maxEventsCount'])) {
             array_splice($arEvents, intVal($arParams['maxEventsCount']));
         }
     }
     return $arEvents;
 }
Пример #11
0
 public static function GetAbsent($users = false, $Params = array())
 {
     // Can be called from agent... So we have to create $USER if it is not exists
     $tempUser = CCalendar::TempUser(false, true);
     $curUserId = isset($Params['userId']) ? intVal($Params['userId']) : CCalendar::GetCurUserId();
     $arUsers = array();
     if ($users !== false && is_array($users)) {
         foreach ($users as $id) {
             if ($id > 0) {
                 $arUsers[] = intVal($id);
             }
         }
     }
     if (!count($arUsers)) {
         $users = false;
     }
     $arFilter = array('DELETED' => 'N', 'ACCESSIBILITY' => 'absent');
     if ($users) {
         $arFilter['CREATED_BY'] = $users;
     }
     if (isset($Params['fromLimit'])) {
         $arFilter['FROM_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['fromLimit'], false), true, false);
     }
     if (isset($Params['toLimit'])) {
         $arFilter['TO_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['toLimit'], false), true, false);
     }
     $arEvents = CCalendarEvent::GetList(array('arFilter' => $arFilter, 'parseRecursion' => true, 'getUserfields' => false, 'userId' => $curUserId, 'preciseLimits' => true, 'checkPermissions' => false, 'skipDeclined' => true));
     $bSocNet = CModule::IncludeModule("socialnetwork");
     $result = array();
     $settings = CCalendar::GetSettings(array('request' => false));
     foreach ($arEvents as $event) {
         $userId = isset($event['USER_ID']) ? $event['USER_ID'] : $event['CREATED_BY'];
         if ($users !== false && !in_array($userId, $arUsers)) {
             continue;
         }
         if ($bSocNet && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $userId, "calendar")) {
             continue;
         }
         if ((!$event['CAL_TYPE'] != 'user' || $curUserId != $event['OWNER_ID']) && $curUserId != $event['CREATED_BY'] && !isset($arUserMeeting[$event['ID']])) {
             $sectId = $event['SECT_ID'];
             if (!$event['ACCESSIBILITY']) {
                 $event['ACCESSIBILITY'] = 'busy';
             }
             $private = $event['PRIVATE_EVENT'] && $event['CAL_TYPE'] == 'user';
             $bManager = false;
             if (!$private && CCalendar::IsIntranetEnabled() && CModule::IncludeModule('intranet') && $event['CAL_TYPE'] == 'user' && $settings['dep_manager_sub']) {
                 $bManager = in_array($curUserId, CCalendar::GetUserManagers($event['OWNER_ID'], true));
             }
             if ($private || !CCalendarSect::CanDo('calendar_view_full', $sectId) && !$bManager) {
                 $event = self::ApplyAccessRestrictions($event, $userId);
             }
         }
         $skipTime = $event['DT_SKIP_TIME'] === 'Y';
         $fromTs = CCalendar::Timestamp($event['DATE_FROM'], false, !$skipTime);
         $toTs = CCalendar::Timestamp($event['DATE_TO'], false, !$skipTime);
         if ($event['DT_SKIP_TIME'] !== 'Y') {
             $fromTs -= $event['~USER_OFFSET_FROM'];
             $toTs -= $event['~USER_OFFSET_TO'];
         }
         $result[] = array('ID' => $event['ID'], 'NAME' => $event['NAME'], 'DATE_FROM' => CCalendar::Date($fromTs, !$skipTime, false), 'DATE_TO' => CCalendar::Date($toTs, !$skipTime, false), 'DT_FROM_TS' => $fromTs, 'DT_TO_TS' => $toTs, 'CREATED_BY' => $userId, 'DETAIL_TEXT' => '', 'USER_ID' => $userId);
     }
     // Sort by DATE_FROM_TS_UTC
     usort($result, array('CCalendar', '_NearestSort'));
     CCalendar::TempUser($tempUser, false);
     return $result;
 }
Пример #12
0
 function UpdateListItems($listName, $updates)
 {
     global $USER;
     $arStatusValues = array_flip($this->arStatusValues);
     $arPriorityValues = array_flip($this->arPriorityValues);
     if (!($listName_original = CIntranetUtils::checkGUID($listName))) {
         return new CSoapFault('Data error', 'Wrong GUID - ' . $listName);
     }
     $obResponse = new CXMLCreator('Results');
     $listName = ToUpper(CIntranetUtils::makeGUID($listName_original));
     $arSections = CCalendarSect::GetList(array('arFilter' => array('XML_ID' => $listName_original)));
     if (!$arSections || !is_array($arSections[0])) {
         return new CSoapFault('List not found', 'List with ' . $listName . ' GUID not found');
     }
     $arSection = $arSections[0];
     $bGroup = $arSection['CAL_TYPE'] == 'group';
     $calType = $arSection['CAL_TYPE'];
     $ownerId = $arSection['OWNER_ID'];
     if ($bGroup) {
         CModule::IncludeModule('socialnetwork');
         $arGroupTmp = CSocNetGroup::GetByID($arSection['SOCNET_GROUP_ID']);
         if ($arGroupTmp["CLOSED"] == "Y") {
             if (COption::GetOptionString("socialnetwork", "work_with_closed_groups", "N") != "Y") {
                 return new CSoapFault('Cannot modify archive group calendar', 'Cannot modify archive group calendar');
             }
         }
     }
     $obBatch = $updates->children[0];
     $atrONERROR = $obBatch->getAttribute('OnError');
     $atrDATEINUTC = $obBatch->getAttribute('DateInUtc');
     $atrPROPERTIES = $obBatch->getAttribute('Properties');
     $arChanges = $obBatch->children;
     $arResultIDs = array();
     $dateStart = ConvertTimeStamp(strtotime('-1 hour'), 'FULL');
     $arResponseRows = array();
     $arReplicationIDs = array();
     $userId = is_object($USER) && $USER->GetID() ? $USER->GetID() : 1;
     foreach ($arChanges as $obMethod) {
         $arData = array('_command' => $obMethod->getAttribute('Cmd'));
         foreach ($obMethod->children as $obField) {
             $name = $obField->getAttribute('Name');
             if ($name == 'MetaInfo') {
                 $name .= '_' . $obField->getAttribute('Property');
             }
             $arData[$name] = $obField->content;
         }
         if ($arData['_command'] == 'Delete') {
             $obRes = new CXMLCreator('Result');
             $obRes->setAttribute('ID', $obMethod->getAttribute('ID') . ',' . $arData['_command']);
             $obRes->setAttribute('List', $listName);
             $obRes->addChild($obNode = new CXMLCreator('ErrorCode'));
             $res = CCalendar::DeleteEvent($arData['ID']);
             if ($res === true) {
                 $obNode->setData('0x00000000');
             } else {
                 $obNode->setData('0x81020014');
             }
             /*
             	0x00000000 - ok
             	0x81020015 - data conflict
             	0x81020014 - generic error such as invalid value for Field
             	0x81020016 - item does not exist
             */
             $obResponse->addChild($obRes);
         } elseif ($arData['_command'] == 'New' || $arData['_command'] == 'Update') {
             $q = ToLower($arData['Description']);
             if (($pos = strrpos($q, '</body>')) !== false) {
                 $arData['Description'] = substr($arData['Description'], 0, $pos);
             }
             if (($pos = strpos($q, '<body>')) !== false) {
                 $arData['Description'] = substr($arData['Description'], $pos + 6);
             }
             $arData['Description'] = str_replace('</DIV>', "\r\n</DIV>", $arData['Description']);
             $arData['Description'] = str_replace(array("&#10;", "&#13;"), "", $arData['Description']);
             $arData['Description'] = preg_replace("/<![^>]*>/", '', $arData['Description']);
             //$arData['Description'] = strip_tags($arData['Description']);
             $arData['Description'] = trim($arData['Description']);
             $arData['Location'] = trim($arData['Location']);
             if (isset($arData['EventDate'])) {
                 $fromTsUTC = $this->__makeTS($arData['EventDate']);
                 $toTsUTC = $this->__makeTS($arData['EndDate']) + ($arData['fAllDayEvent'] ? -86340 : 0);
                 $TZBias = intval(date('Z', $fromTsUTC));
             }
             $arData['EventType'] = intval($arData['EventType']);
             if ($arData['EventType'] == 2) {
                 $arData['EventType'] = 0;
             }
             if ($arData['EventType'] > 2) {
                 return new CSoapFault('Unsupported event type', 'Event type unsupported');
             }
             $arData['fRecurrence'] = intval($arData['fRecurrence']);
             $arData['RRULE'] = '';
             $id = $arData['_command'] == 'New' ? 0 : intVal($arData['ID']);
             if ($arData['RecurrenceData']) {
                 //$xmlstr = $arData['XMLTZone'];
                 //$arData['XMLTZone'] = new CDataXML();
                 //$arData['XMLTZone']->LoadString($xmlstr);
                 $xmlstr = $arData['RecurrenceData'];
                 $obRecurData = new CDataXML();
                 $obRecurData->LoadString($xmlstr);
                 /*
                 <recurrence>
                 		<rule>
                 			<firstDayOfWeek>mo</firstDayOfWeek>
                 			<repeat>
                 				<weekly mo='TRUE' tu='TRUE' th='TRUE' sa='TRUE' weekFrequency='1' />
                 			</repeat>
                 			<repeatForever>FALSE</repeatForever>
                 		</rule>
                 </recurrence>
                 <deleteExceptions>true</deleteExceptions>
                 */
                 $obRecurRule = $obRecurData->tree->children[0]->children[0];
                 $obRecurRepeat = $obRecurRule->children[1];
                 $obNode = $obRecurRepeat->children[0];
                 $arData['RRULE'] = array();
                 switch ($obNode->name) {
                     case 'daily':
                         // hack. we have no "work days" daily recurence
                         if ($obNode->getAttribute('weekday') == 'TRUE') {
                             $arData['RRULE']['FREQ'] = 'WEEKLY';
                             $arData['RRULE']['BYDAY'] = 'MO,TU,WE,TH,FR';
                             $arData['RRULE']['INTERVAL'] = 1;
                         } else {
                             $arData['RRULE']['FREQ'] = 'DAILY';
                             $arData['RRULE']['INTERVAL'] = $obNode->getAttribute('dayFrequency');
                         }
                         $time_end = strtotime(date(date('Y-m-d', $fromTsUTC) . ' H:i:s', $toTsUTC));
                         $arData['DT_LENGTH'] = $time_end - $fromTsUTC;
                         break;
                     case 'weekly':
                         $arData['RRULE']['FREQ'] = 'WEEKLY';
                         $arData['RRULE']['BYDAY'] = '';
                         $arWeekDays = array('mo', 'tu', 'we', 'th', 'fr', 'sa', 'su');
                         foreach ($arWeekDays as $day => $value) {
                             if ($obNode->getAttribute($value)) {
                                 $arData['RRULE']['BYDAY'][] = strtoupper($value);
                             }
                         }
                         $arData['RRULE']['BYDAY'] = implode(',', $arData['RRULE']['BYDAY']);
                         $arData['RRULE']['INTERVAL'] = $obNode->getAttribute('weekFrequency');
                         $time_end = strtotime(date(date('Y-m-d', $fromTsUTC) . ' H:i:s', $toTsUTC));
                         $arData['DT_LENGTH'] = $time_end - $fromTsUTC;
                         break;
                     case 'monthly':
                         $arData['RRULE']['FREQ'] = 'MONTHLY';
                         $arData['RRULE']['INTERVAL'] = $obNode->getAttribute('monthFrequency');
                         $time_end = strtotime(date(date('Y-m', $fromTsUTC) . '-d H:i:s', $toTsUTC));
                         $arData['DT_LENGTH'] = $time_end - $fromTsUTC;
                         break;
                     case 'yearly':
                         $arData['RRULE']['FREQ'] = 'YEARLY';
                         $arData['RRULE']['INTERVAL'] = $obNode->getAttribute('yearFrequency');
                         $time_end = strtotime(date(date('Y', $fromTsUTC) . '-m-d H:i:s', $toTsUTC));
                         $arData['DT_LENGTH'] = $time_end - $fromTsUTC;
                         break;
                 }
                 if ($arData['DT_LENGTH'] == 0 && isset($arData['RRULE']['FREQ'])) {
                     $arData['DT_LENGTH'] = 86400;
                 }
                 $obWhile = $obRecurRule->children[2];
                 if ($obWhile->name == 'repeatForever') {
                     $arData['RRULE']['UNTIL'] = MakeTimeStamp('');
                 } elseif ($obWhile->name == 'windowEnd') {
                     $toTsUTC = $this->__makeTS($obWhile->textContent());
                     $arData['RRULE']['UNTIL'] = ConvertTimeStamp($toTsUTC, 'FULL');
                 }
             } elseif ($arData['fRecurrence'] == -1 && $id > 0) {
                 $arData['RRULE'] = -1;
             }
             $skipTime = $arData['fAllDayEvent'] ? 'Y' : 'N';
             $fromTs = $fromTsUTC;
             $toTs = $toTsUTC;
             if (!$arData['fAllDayEvent']) {
                 $fromTs += CCalendar::GetCurrentOffsetUTC($userId);
                 $toTs += CCalendar::GetCurrentOffsetUTC($userId);
             }
             // fields
             $arFields = array("ID" => $id, 'CAL_TYPE' => $calType, 'OWNER_ID' => $ownerId, 'CREATED_BY' => $userId, 'DATE_FROM' => CCalendar::Date($fromTs, $skipTime == 'N'), 'DATE_TO' => CCalendar::Date($toTs, $skipTime == 'N'), 'DT_SKIP_TIME' => $skipTime, 'NAME' => $arData['Title'], 'DESCRIPTION' => CCalendar::ParseHTMLToBB($arData['Description']), 'SECTIONS' => array($arSection['ID']), 'ACCESSIBILITY' => $arStatusValues[$arData['MetaInfo_BusyStatus']], 'IMPORTANCE' => $arPriorityValues[$arData['MetaInfo_Priority']], 'RRULE' => $arData['RRULE'], 'LOCATION' => CCalendar::UnParseTextLocation($arData['Location']));
             if (isset($arData['DT_LENGTH']) && $arData['DT_LENGTH'] > 0) {
                 $arFields['DT_LENGTH'] = $arData['DT_LENGTH'];
             }
             $EventID = CCalendar::SaveEvent(array('arFields' => $arFields, 'fromWebservice' => true));
             if ($EventID) {
                 // dirty hack
                 $arReplicationIDs[$EventID] = $arData['MetaInfo_ReplicationID'];
                 $arResponseRows[$EventID] = new CXMLCreator('Result');
                 $arResponseRows[$EventID]->setAttribute('ID', $obMethod->getAttribute('ID') . ',' . $arData['_command']);
                 $arResponseRows[$EventID]->setAttribute('List', $listName);
                 $arResponseRows[$EventID]->addChild($obNode = new CXMLCreator('ErrorCode'));
                 $obNode->setData('0x00000000');
                 //$arResponseRows[$EventID]->setAttribute('Version', 3);
             }
         }
     }
     $userId = is_object($USER) && $USER->GetID() ? $USER->GetID() : 1;
     $fetchMeetings = CCalendar::GetMeetingSection($userId) == $arSection['ID'];
     $arEvents = CCalendarEvent::GetList(array('arFilter' => array('CAL_TYPE' => $calType, 'OWNER_ID' => $ownerId, 'SECTION' => $arSection['ID']), 'getUserfields' => false, 'parseRecursion' => false, 'fetchAttendees' => false, 'fetchMeetings' => $fetchMeetings, 'userId' => $userId));
     foreach ($arEvents as $key => $event) {
         if ($arResponseRows[$event['ID']]) {
             $obRow = $this->__getRow($event, $listName, $last_change = 0);
             $obRow->setAttribute('xmlns:z', "#RowsetSchema");
             if ($arReplicationIDs[$event['ID']]) {
                 $obRow->setAttribute('MetaInfo_ReplicationID', $arReplicationIDs[$event['ID']]);
             }
             $arResponseRows[$event['ID']]->addChild($obRow);
         }
         $obResponse->addChild($arResponseRows[$event['ID']]);
     }
     return array('UpdateListItemsResult' => $obResponse);
 }
Пример #13
0
<?php

define("PUBLIC_AJAX_MODE", true);
define("NO_KEEP_STATISTIC", "Y");
define("NO_AGENT_STATISTIC", "Y");
define("NO_AGENT_CHECK", true);
define("DisableEventsCheck", true);
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";
header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET);
if (check_bitrix_sessid() && CModule::IncludeModule("calendar")) {
    if (isset($_REQUEST['bx_event_calendar_check_meeting_room']) && $_REQUEST['bx_event_calendar_check_meeting_room'] === 'Y') {
        $check = false;
        $settings = CCalendar::GetSettings();
        $from = CCalendar::Date(CCalendar::Timestamp($_REQUEST['from']));
        $to = CCalendar::Date(CCalendar::Timestamp($_REQUEST['to']));
        $loc_new = CCalendar::ParseLocation(trim($_REQUEST['location']));
        $params = array('dateFrom' => $from, 'dateTo' => $to, 'regularity' => 'NONE', 'members' => false);
        if ($loc_new['mrid'] == $settings['vr_iblock_id']) {
            $params['VMiblockId'] = $settings['vr_iblock_id'];
            $check = CCalendar::CheckVideoRoom($params);
        } else {
            $params['RMiblockId'] = $settings['rm_iblock_id'];
            $params['mrid'] = $loc_new['mrid'];
            $params['mrevid_old'] = 0;
            $check = CCalendar::CheckMeetingRoom($params);
        }
        ?>
<script>top.BXCRES_Check = <?php 
        echo CUtil::PhpToJSObject($check);
        ?>
;</script><?php 
Пример #14
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']);
     $arNewFields["DATE_FROM"] = $arFields['DATE_FROM'];
     $arNewFields["DATE_TO"] = $arFields['DATE_TO'];
     $arNewFields["TZ_FROM"] = $arFields['TZ_FROM'];
     $arNewFields["TZ_TO"] = $arFields['TZ_TO'];
     $arNewFields["SKIP_TIME"] = $arFields['SKIP_TIME'];
     if ($arNewFields["SKIP_TIME"]) {
         $arNewFields["DATE_TO"] = CCalendar::Date(CCalendar::Timestamp($arNewFields['DATE_TO']) - CCalendar::GetDayLen(), false);
     }
     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'];
         }
         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['PROPERTY_PERIOD_UNTIL'])) {
             $arNewFields['RRULE']['UNTIL'] = $arFields['PROPERTY_PERIOD_UNTIL'];
         } else {
             $arNewFields['RRULE']['UNTIL'] = $arFields['DT_TO_TS'];
         }
     }
     $eventId = CCalendar::SaveEvent(array('arFields' => $arNewFields, 'userId' => $userId, 'bAffectToDav' => false, 'bSilentAccessMeeting' => true));
     self::$silentErrorMode = false;
     return $eventId;
 }