public function Execute() { if (!CModule::IncludeModule("intranet")) { return CBPActivityExecutionStatus::Closed; } $calendarIblockId = COption::GetOptionInt("intranet", 'iblock_calendar', 0); if ($calendarIblockId <= 0) { return CBPActivityExecutionStatus::Closed; } $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $arCalendarUser = CBPHelper::ExtractUsers($this->CalendarUser, $documentId); foreach ($arCalendarUser as $calendarUser) { $Params = array('iblockId' => $calendarIblockId, 'ownerType' => "USER", 'ownerId' => $calendarUser, 'cacheTime' => 0, 'pageUrl' => false, 'allowSuperpose' => false, 'allowResMeeting' => false, 'allowVideoMeeting' => false, 'userIblockId' => $calendarIblockId); $EC = new CEventCalendar(); $EC->Init($Params); $sectionId = $EC->GetSectionIDByOwnerId($calendarUser, 'USER', $calendarIblockId); if ($sectionId <= 0) { $sectionId = CEventCalendar::CreateSectionForOwner($calendarUser, "USER", $calendarIblockId); } $arGuestCalendars = $EC->GetCalendars(array('sectionId' => $sectionId, 'iblockId' => $calendarIblockId, 'ownerType' => 'USER', 'ownerId' => $calendarUser, 'bOwner' => true, 'forExport' => true, 'bOnlyID' => true)); $arParams = array('iblockId' => $calendarIblockId, 'ownerType' => "USER", 'ownerId' => $calendarUser, 'sectionId' => $sectionId, 'bNew' => true, 'name' => $this->CalendarName, 'desc' => $this->CalendarDesrc, 'dateFrom' => cutZeroTime($this->CalendarFrom), 'dateTo' => cutZeroTime($this->CalendarTo), 'isMeeting' => false, 'prop' => array('PERIOD_TYPE' => 'NONE', 'ACCESSIBILITY' => 'busy', 'IMPORTANCE' => 'normal', 'PRIVATE' => false), 'userId' => $calendarUser, 'userIblockId' => $calendarIblockId, 'location' => array('new' => '', 'change' => true)); if (count($arGuestCalendars) > 0) { $arParams["calendarId"] = $arGuestCalendars[0]; } $EC->SaveEvent($arParams); } if (isset($EC)) { $EC->ClearCache($EC->cachePath . 'events/' . $calendarIblockId . '/'); } return CBPActivityExecutionStatus::Closed; }
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; }
if (!CModule::IncludeModule("iblock")) { $this->AbortResultCache(); ShowError(GetMessage("EC_IBLOCK_MODULE_NOT_INSTALLED")); return; } CModule::IncludeModule("socialnetwork"); // Limits if (strlen($arParams["INIT_DATE"]) > 0 && strpos($arParams["INIT_DATE"], '.') !== false) { $ts = MakeTimeStamp($arParams["INIT_DATE"], getTSFormat()); } else { $ts = MakeTimeStamp(date(getDateFormat(false)), getTSFormat()); } $fromLimit = date(getDateFormat(false), $ts); $toLimit = date(getDateFormat(false), mktime(0, 0, 0, date("m", $ts) + $arParams["FUTURE_MONTH_COUNT"], date("d", $ts), date("Y", $ts))); $arResult['ITEMS'] = array(); $arEvents = CEventCalendar::GetNearestEventsList(array('bCurUserList' => $arParams['B_CUR_USER_LIST'], 'fromLimit' => $fromLimit, 'toLimit' => $toLimit, 'iblockId' => $arParams["IBLOCK_ID"], 'iblockSectionId' => $arParams["IBLOCK_SECTION_ID"])); if ($arEvents == 'access_denied') { $arResult['ACCESS_DENIED'] = true; } elseif ($arEvents == 'inactive_feature') { $arResult['INACTIVE_FEATURE'] = true; } elseif (is_array($arEvents)) { $limitTromTS = MakeTimeStamp($fromLimit, getTSFormat()); 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]['_FROM_TS'] = MakeTimeStamp($arEvents[$i]['DATE_FROM'], getTSFormat()); if ($arEvents[$i]['_FROM_TS'] < $limitTromTS) { continue; }
function CreateDefault($arParams = array(), $bDisplay = true, &$newSectionId = 'none') { $iblockId = $arParams['iblockId']; $ownerId = $arParams['ownerId']; $ownerType = $arParams['ownerType']; $sectionId = $arParams['sectionId']; if ($ownerType == 'USER') { $name = GetMessage('EC_DEF_SECT_USER_CAL'); } else { $name = GetMessage('EC_DEF_SECT_GROUP_CAL'); } $arFields = array('ID' => 0, 'NAME' => $name, 'DESCRIPTION' => '', "COLOR" => "#CEE669", "EXPORT" => true, "EXPORT_SET" => 'all'); $arParams['arFields'] = $arFields; $ID = CECCalendar::Edit($arParams, $newSectionId, $bDisplay); if ($ID > 0 && $bDisplay) { $arEx = CECCalendar::GetExportParams($iblockId, $ID, $ownerType, $ownerId); $outlookJs = CECCalendar::GetOutlookLink(array('ID' => intVal($ID), 'PREFIX' => CEventCalendar::GetOwnerName(array('iblockId' => $iblockId, 'ownerType' => $ownerType, 'ownerId' => $ownerId)))); ?> <script>window._bx_def_calendar = { ID: <?php echo intVal($ID); ?> , NAME: '<?php echo $arFields['NAME']; ?> ', COLOR: '<?php echo $arFields['COLOR']; ?> ', EXPORT: <?php echo $arEx['ALLOW'] ? 'true' : 'false'; ?> , EXPORT_SET: '<?php echo $arEx['SET']; ?> ', EXPORT_LINK: '<?php echo $arEx['LINK']; ?> ', PRIVATE_STATUS: 'full', bNew: true, OUTLOOK_JS: '<?php echo addslashes(htmlspecialcharsex($outlookJs)); ?> ' };</script> <?php } // Clear cache CEventCalendar::ClearCache("event_calendar/" . $iblockId . "/calendars/" . ($ownerId > 0 ? $ownerId : 0) . "/"); if ($ownerType == 'GROUP') { CEventCalendar::ClearCache('event_calendar/sp_groups/'); } elseif ($ownerType == 'USER') { CEventCalendar::ClearCache('event_calendar/sp_user/'); } else { CEventCalendar::ClearCache('event_calendar/sp_common/'); } return $ID; }
public static function ConvertEntity($ownerType, $ownerId, $sectionId, $iblockId, $createdBy) { $eventsCount = 0; $sectCount = 0; $bs = new CIBlockSection(); $ent_id = "IBLOCK_" . $iblockId . "_SECTION"; $result = array('eventsCount' => 0, 'sectCount' => 0); $bSetAccessFromCalendar = true; $Access = array('G2' => CCalendar::GetAccessTasksByName('calendar_section', 'calendar_denied')); // CONVERT ACCESS: if ($ownerType == 'user') { if (!CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $ownerId, "calendar")) { return $result; } // Read $read = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $ownerId, "calendar", 'view'); $taskId = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_view'); if ($read == 'A') { // All users $Access['G2'] = $taskId; } elseif ($read == 'C') { // All autorized $Access['AU'] = $taskId; } elseif ($read == 'M' || $read == 'E') { // Friends $Access['SU' . $ownerId . '_F'] = $taskId; } elseif ($bSetAccessFromCalendar) { $bSetAccessFromCalendar = false; } // Write - will override read access $write = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $ownerId, "calendar", 'write'); $taskId = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_edit'); if ($write == 'A') { // All users $Access['G2'] = $taskId; } elseif ($write == 'C') { // All autorized $Access['AU'] = $taskId; } elseif ($write == 'M' || $write == 'E') { // Friends $Access['SU' . $ownerId . '_F'] = $taskId; } } elseif ($ownerType == 'group') { if (!CSocNetFeatures::IsActiveFeature(SONET_ENTITY_GROUP, $ownerId, "calendar")) { return $result; } // Read $read = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $ownerId, "calendar", 'view'); $taskId = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_view'); if ($read == 'A') { // Group owner $Access['SG' . $ownerId . '_A'] = $taskId; } elseif ($read == 'E') { // Group moderator $Access['SG' . $ownerId . '_E'] = $taskId; } elseif ($read == 'K') { // User $Access['SG' . $ownerId . '_K'] = $taskId; } elseif ($read == 'L') { // Authorized $Access['AU'] = $taskId; } elseif ($read == 'N') { // Authorized $Access['G2'] = $taskId; } // Write - will override read access $write = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $ownerId, "calendar", 'write'); $taskId = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_edit'); if ($write == 'A') { // Group owner $Access['SG' . $ownerId . '_A'] = $taskId; } elseif ($write == 'E') { // Group moderator $Access['SG' . $ownerId . '_E'] = $taskId; } elseif ($write == 'K') { // User $Access['SG' . $ownerId . '_K'] = $taskId; } elseif ($write == 'L') { // Authorized $Access['AU'] = $taskId; } elseif ($write == 'N') { // Authorized $Access['G2'] = $taskId; } } else { $arGroupPerm = CIBlock::GetGroupPermissions($iblockId); $taskByLetter = array('D' => CCalendar::GetAccessTasksByName('calendar_section', 'calendar_denied'), 'R' => CCalendar::GetAccessTasksByName('calendar_section', 'calendar_view'), 'W' => CCalendar::GetAccessTasksByName('calendar_section', 'calendar_edit'), 'X' => CCalendar::GetAccessTasksByName('calendar_section', 'calendar_access')); foreach ($arGroupPerm as $groupId => $letter) { $Access['G' . $groupId] = $taskByLetter[$letter]; } } // 1. Fetch sections $arUserSections = CEventCalendar::GetCalendarList(array($iblockId, $sectionId, 0, $ownerType)); $calendarIndex = array(); foreach ($arUserSections as $section) { $arUF = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields($ent_id, $section['ID']); if (isset($arUF["UF_CAL_CONVERTED"]) && strlen($arUF["UF_CAL_CONVERTED"]['VALUE']) > 0) { continue; } $SectionAccess = array(); if ($bSetAccessFromCalendar && $ownerType == 'user') { if ($section['PRIVATE_STATUS'] == 'private') { $deniedTask = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_denied'); $SectionAccess['G2'] = $deniedTask; } elseif ($section['PRIVATE_STATUS'] == 'time') { $viewTimeTask = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_view_time'); $SectionAccess['G2'] = $viewTimeTask; } elseif ($section['PRIVATE_STATUS'] == 'title') { $viewTitleTask = CCalendar::GetAccessTasksByName('calendar_section', 'calendar_view_title'); $SectionAccess['G2'] = $viewTitleTask; } else { $SectionAccess = $Access; // nested from common access settings from socnet } } else { $SectionAccess = $Access; // G2 => denied } $new_sect_id = CCalendarSect::Edit(array('arFields' => array("CAL_TYPE" => $ownerType, "NAME" => $section['NAME'], "OWNER_ID" => $ownerId, "CREATED_BY" => $createdBy, "DESCRIPTION" => $section['DESCRIPTION'], "COLOR" => $section["COLOR"], "ACCESS" => $SectionAccess))); // Set converted property $bs->Update($section['ID'], array('UF_CAL_CONVERTED' => 1)); $calendarIndex[$section['ID']] = $new_sect_id; $sectCount++; } // 2. Create events $arEvents = CEventCalendar::GetCalendarEventsList(array($iblockId, $sectionId, 0), array()); foreach ($arEvents as $event) { if (!isset($calendarIndex[$event['IBLOCK_SECTION_ID']]) || $event['PROPERTY_PARENT'] > 0) { continue; } $arFields = array("CAL_TYPE" => $ownerType, "OWNER_ID" => $ownerId, "CREATED_BY" => $event["CREATED_BY"], "DT_FROM" => $event['ACTIVE_FROM'], "DT_TO" => $event['ACTIVE_TO'], 'NAME' => htmlspecialcharsback($event['NAME']), 'DESCRIPTION' => CCalendar::ParseHTMLToBB(htmlspecialcharsback($event['DETAIL_TEXT'])), 'SECTIONS' => array($calendarIndex[$event['IBLOCK_SECTION_ID']]), 'ACCESSIBILITY' => $event['PROPERTY_ACCESSIBILITY'], 'IMPORTANCE' => $event['PROPERTY_IMPORTANCE'], 'PRIVATE_EVENT' => $event['PROPERTY_PRIVATE'] && $event['PROPERTY_PRIVATE'] == 'true' ? '1' : '', 'RRULE' => array(), 'LOCATION' => array('NEW' => $event['PROPERTY_LOCATION'], 'RE_RESERVE' => 'N'), "REMIND" => array(), "IS_MEETING" => $event['PROPERTY_IS_MEETING'] == 'Y'); if (!empty($event['PROPERTY_REMIND_SETTINGS'])) { $ar = explode("_", $event["PROPERTY_REMIND_SETTINGS"]); if (count($ar) == 2) { $arFields["REMIND"][] = array('type' => $ar[1], 'count' => floatVal($ar[0])); } } if (isset($event["PROPERTY_PERIOD_TYPE"]) && in_array($event["PROPERTY_PERIOD_TYPE"], array("DAILY", "WEEKLY", "MONTHLY", "YEARLY"))) { $arFields['RRULE']['FREQ'] = $event["PROPERTY_PERIOD_TYPE"]; $arFields['RRULE']['INTERVAL'] = $event["PROPERTY_PERIOD_COUNT"]; if (!empty($event['PROPERTY_EVENT_LENGTH'])) { $arFields['DT_LENGTH'] = intval($event['PROPERTY_EVENT_LENGTH']); } if (!$arFields['DT_LENGTH']) { $arFields['DT_LENGTH'] = 86400; } if ($arFields['RRULE']['FREQ'] == "WEEKLY" && !empty($event['PROPERTY_PERIOD_ADDITIONAL'])) { $arFields['RRULE']['BYDAY'] = array(); $bydays = explode(',', $event['PROPERTY_PERIOD_ADDITIONAL']); foreach ($bydays as $day) { $day = CCalendar::WeekDayByInd($day); if ($day !== false) { $arFields['RRULE']['BYDAY'][] = $day; } } $arFields['RRULE']['BYDAY'] = implode(',', $arFields['RRULE']['BYDAY']); } $arFields['RRULE']['UNTIL'] = $event['ACTIVE_TO']; } if ($arFields['IS_MEETING']) { if ($event['PROPERTY_PARENT'] > 0) { continue; } $host = intVal($event['CREATED_BY']); $arFields['ATTENDEES'] = array(); if ($event['PROPERTY_HOST_IS_ABSENT'] == 'N') { $arFields['ATTENDEES'][] = $host; } $arGuests = CECEvent::GetGuests(self::$userIblockId, $event['ID']); $attendeesStatuses = array(); foreach ($arGuests as $userId => $ev) { $attendeesStatuses[$userId] = $ev['PROPERTY_VALUES']['CONFIRMED']; $arFields['ATTENDEES'][] = $userId; } $arFields['MEETING_HOST'] = $host; $arFields['MEETING'] = array('HOST_NAME' => CCalendar::GetUserName($host), 'TEXT' => is_array($event['PROPERTY_MEETING_TEXT']) && is_string($event['PROPERTY_MEETING_TEXT']['TEXT']) ? trim($event['PROPERTY_MEETING_TEXT']['TEXT']) : '', 'OPEN' => false, 'NOTIFY' => false, 'REINVITE' => false); } $new_event_id = CCalendar::SaveEvent(array('arFields' => $arFields, 'bAffectToDav' => false, 'attendeesStatuses' => $attendeesStatuses, 'bSendInvitations' => false)); $eventsCount++; } // 3. Set userfield $bs->Update($sectionId, array('UF_CAL_CONVERTED' => 1)); return array('eventsCount' => $eventsCount, 'sectCount' => $sectCount); }
public static function DataSync($paramEntityType = null, $paramEntityId = 0) { if (DAV_CALDAV_DEBUG) { CDav::WriteToLog("Starting CalDAV sync", "SYNCC"); } self::InitUserEntity(); $siteId = CDav::GetIntranetSite(); $maxNumber = 5; $index = 0; $bShouldClearCache = false; $paramEntityId = intval($paramEntityId); $arConnectionsFilter = array("ACCOUNT_TYPE" => 'caldav'); if (!is_null($paramEntityType) && $paramEntityId > 0) { $arConnectionsFilter["ENTITY_TYPE"] = $paramEntityType; $arConnectionsFilter["ENTITY_ID"] = $paramEntityId; } $dbConnections = CDavConnection::GetList(array("SYNCHRONIZED" => "ASC"), $arConnectionsFilter, false, false, array("ID", "ENTITY_TYPE", "ENTITY_ID", "SERVER_SCHEME", "SERVER_HOST", "SERVER_PORT", "SERVER_USERNAME", "SERVER_PASSWORD", "SERVER_PATH", "SYNCHRONIZED")); while ($arConnection = $dbConnections->Fetch()) { $index++; if ($index > $maxNumber) { break; } if (DAV_CALDAV_DEBUG) { CDav::WriteToLog("Connection [" . $arConnection["ID"] . "] " . $arConnection["ENTITY_TYPE"] . "/" . $arConnection["ENTITY_ID"], "SYNCC"); } CDavConnection::SetLastResult($arConnection["ID"], "[0]"); $client = new CDavGroupdavClientCalendar($arConnection["SERVER_SCHEME"], $arConnection["SERVER_HOST"], $arConnection["SERVER_PORT"], $arConnection["SERVER_USERNAME"], $arConnection["SERVER_PASSWORD"]); if (CDav::UseProxy()) { $arProxy = CDav::GetProxySettings(); $client->SetProxy($arProxy["PROXY_SCHEME"], $arProxy["PROXY_HOST"], $arProxy["PROXY_PORT"], $arProxy["PROXY_USERNAME"], $arProxy["PROXY_PASSWORD"]); } //$client->Debug(); if (!$client->CheckWebdavServer($arConnection["SERVER_PATH"])) { $t = ''; $arErrors = $client->GetErrors(); foreach ($arErrors as $arError) { if (strlen($t) > 0) { $t .= ', '; } $t .= '[' . $arError[0] . '] ' . $arError[1]; } CDavConnection::SetLastResult($arConnection["ID"], strlen($t) > 0 ? $t : "[404] Not Found"); if (DAV_CALDAV_DEBUG) { CDav::WriteToLog("ERROR: " . $t, "SYNCC"); } continue; } $arCalendarsList = $client->GetCalendarList($arConnection["SERVER_PATH"]); if (count($arCalendarsList) <= 0) { CDavConnection::SetLastResult($arConnection["ID"], "[204] No Content"); continue; } $arUserCalendars = array(); foreach ($arCalendarsList as $value) { $arUserCalendars[] = array("XML_ID" => $value["href"], "NAME" => $value["displayname"], "DESCRIPTION" => $value["calendar-description"], "COLOR" => $value["calendar-color"], "MODIFICATION_LABEL" => $value["getctag"]); } $tmpNumCals = count($arUserCalendars); $tmpNumItems = 0; $arUserCalendars = CEventCalendar::SyncCalendars("caldav", $arUserCalendars, $arConnection["ENTITY_TYPE"], $arConnection["ENTITY_ID"], $siteId, $arConnection["ID"]); foreach ($arUserCalendars as $userCalendar) { $bShouldClearCache = true; $arCalendarItemsList = $client->GetCalendarItemsList($userCalendar["XML_ID"]); $arUserCalendarItems = array(); foreach ($arCalendarItemsList as $value) { if (strpos($value["getcontenttype"], "text/calendar") !== false && strpos($value["getcontenttype"], "component=vevent") !== false && isset($value["getetag"])) { $arUserCalendarItems[] = array("XML_ID" => basename($value["href"], ".ics"), "MODIFICATION_LABEL" => $value["getetag"]); } } $arUserCalendarItems = CEventCalendar::SyncCalendarItems("caldav", $userCalendar["CALENDAR_ID"], $arUserCalendarItems); $arHrefs = array(); $arIdMap = array(); foreach ($arUserCalendarItems as $value) { $h = $userCalendar["XML_ID"] . $value["XML_ID"] . ".ics"; $arHrefs[] = $h; $arIdMap[$h] = $value["ID"]; } $arCalendarItemsList = $client->GetCalendarItemsList($userCalendar["XML_ID"], $arHrefs, true); $tmpNumItems += count($arCalendarItemsList); foreach ($arCalendarItemsList as $value) { if (!array_key_exists($value["href"], $arIdMap)) { continue; } $arModifyEventArray = array("ID" => $arIdMap[$value["href"]], "NAME" => $value["calendar-data"]["NAME"], "DETAIL_TEXT" => $value["calendar-data"]["DETAIL_TEXT"], "DETAIL_TEXT_TYPE" => $value["calendar-data"]["DETAIL_TEXT_TYPE"], "XML_ID" => basename($value["href"], ".ics"), "PROPERTY_LOCATION" => $value["calendar-data"]["PROPERTY_LOCATION"], "ACTIVE_FROM" => $value["calendar-data"]["ACTIVE_FROM"], "ACTIVE_TO" => $value["calendar-data"]["ACTIVE_TO"], "PROPERTY_IMPORTANCE" => $value["calendar-data"]["PROPERTY_IMPORTANCE"], "PROPERTY_ACCESSIBILITY" => $value["calendar-data"]["PROPERTY_ACCESSIBILITY"], "PROPERTY_REMIND_SETTINGS" => $value["calendar-data"]["PROPERTY_REMIND_SETTINGS"], "PROPERTY_PERIOD_TYPE" => "NONE", "PROPERTY_BXDAVCD_LABEL" => $value["getetag"]); if (isset($value["calendar-data"]["PROPERTY_PERIOD_TYPE"]) && $value["calendar-data"]["PROPERTY_PERIOD_TYPE"] != "NONE") { $arModifyEventArray["PROPERTY_PERIOD_TYPE"] = $value["calendar-data"]["PROPERTY_PERIOD_TYPE"]; $arModifyEventArray["PROPERTY_PERIOD_COUNT"] = $value["calendar-data"]["PROPERTY_PERIOD_COUNT"]; $arModifyEventArray["PROPERTY_PERIOD_ADDITIONAL"] = $value["calendar-data"]["PROPERTY_PERIOD_ADDITIONAL"]; $arModifyEventArray["PROPERTY_EVENT_LENGTH"] = $value["calendar-data"]["PROPERTY_EVENT_LENGTH"]; } $k = CEventCalendar::ModifyEvent($userCalendar["CALENDAR_ID"], $arModifyEventArray); } } if (DAV_CALDAV_DEBUG) { CDav::WriteToLog("Sync " . intval($tmpNumCals) . " calendars, " . intval($tmpNumItems) . " items", "SYNCC"); } CDavConnection::SetLastResult($arConnection["ID"], "[200] OK"); } if ($bShouldClearCache) { CEventCalendar::SyncClearCache($siteId); } if (DAV_CALDAV_DEBUG) { CDav::WriteToLog("CalDAV sync finished", "SYNCC"); } return "CDavGroupdavClientCalendar::DataSync();"; }
public function Get($arParams) { $ID = intval($arParams['ID']); $site_id = $arParams['site_id']; $calIblock = COption::GetOptionInt('intranet', 'iblock_calendar', null, $site_id); $dbRes = CIBlockElement::GetByID($ID); if ($arRes = $dbRes->Fetch()) { $calIblockSection = $arRes['IBLOCK_SECTION_ID']; } else { return false; } CModule::IncludeModule('socialnetwork'); $obCalendar = new CEventCalendar(); $obCalendar->Init(array('ownerType' => 'USER', 'ownerId' => $arRes['CREATED_BY'], 'bOwner' => true, 'iblockId' => $calIblock, 'userIblockId' => $calIblock)); $arPermissions = $obCalendar->GetPermissions(array('setProperties' => true)); $arEvents = $obCalendar->GetEvents(array('iblockId' => $calIblock, 'sectionId' => $calIblockSection, 'eventId' => $ID, 'bLoadAll' => true, 'ownerType' => 'USER')); return $arEvents[0]; }
public static function DoDataSync($paramUserId, &$lastError) { if (DAV_EXCH_DEBUG) { CDav::WriteToLog("Starting EXCHANGE sync...", "SYNCE"); } $exchangeScheme = COption::GetOptionString("dav", "exchange_scheme", "http"); $exchangeServer = COption::GetOptionString("dav", "exchange_server", ""); $exchangePort = COption::GetOptionString("dav", "exchange_port", "80"); $exchangeUsername = COption::GetOptionString("dav", "exchange_username", ""); $exchangePassword = COption::GetOptionString("dav", "exchange_password", ""); if (empty($exchangeServer)) { CAgent::RemoveAgent("CDavExchangeCalendar::DataSync();", "dav"); COption::SetOptionString("dav", "agent_calendar", "N"); return null; } static $arWeekDayMap = array("sunday" => 6, "monday" => 0, "tuesday" => 1, "wednesday" => 2, "thursday" => 3, "friday" => 4, "saturday" => 5); $siteId = CDav::GetIntranetSite(); $exchange = new CDavExchangeCalendar($exchangeScheme, $exchangeServer, $exchangePort, $exchangeUsername, $exchangePassword); if (GW_DEBUG) { $exchange->Debug(); } $exchangeMailbox = COption::GetOptionString("dav", "exchange_mailbox", ""); $exchangeUseLogin = COption::GetOptionString("dav", "exchange_use_login", "Y"); self::InitUserEntity(); $maxNumber = 15; $index = 0; $bShouldClearCache = null; $paramUserId = intval($paramUserId); $arUserFilter = array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false); if ($paramUserId > 0) { $arUserFilter["ID_EQUAL_EXACT"] = $paramUserId; } if ($exchangeUseLogin == "N") { $arUserFilter["!UF_BXDAVEX_MAILBOX"] = false; } $dbUserList = CUser::GetList($by = "UF_BXDAVEX_CALSYNC", $order = "asc", $arUserFilter, array("SELECT" => array("ID", "LOGIN", "UF_BXDAVEX_MAILBOX", "UF_BXDAVEX_CALSYNC"))); while ($arUser = $dbUserList->Fetch()) { $index++; if ($index > $maxNumber) { break; } if (DAV_EXCH_DEBUG) { CDav::WriteToLog("Processing user [" . $arUser["ID"] . "] " . $arUser["LOGIN"], "SYNCE"); } $GLOBALS["USER_FIELD_MANAGER"]->Update("USER", $arUser["ID"], array("UF_BXDAVEX_CALSYNC" => ConvertTimeStamp(time(), FULL))); $mailbox = $exchangeUseLogin == "Y" ? $arUser["LOGIN"] . $exchangeMailbox : $arUser["UF_BXDAVEX_MAILBOX"]; if (empty($mailbox)) { $lastError = GetMessage("DAV_EC_EMPTY_MAILBOX"); continue; } $arCalendarsList = $exchange->GetCalendarsList(array("mailbox" => $mailbox)); $arErrorsTmp = $exchange->GetErrors(); if (count($arErrorsTmp) > 0) { $txt = ''; foreach ($arErrorsTmp as $v) { if (!empty($txt)) { $txt .= ", "; } $txt .= "[" . $v[0] . "] " . $v[1]; } if (DAV_EXCH_DEBUG) { CDav::WriteToLog("ERROR: " . $txt, "SYNCE"); } $lastError = $txt; continue; } $bShouldClearCache = false; $arUserCalendars = array(array("XML_ID" => "calendar_" . $arUser["ID"], "NAME" => GetMessage("DAV_EC_CALENDAR"), "MODIFICATION_LABEL" => "")); foreach ($arCalendarsList as $value) { $arUserCalendars[] = array("XML_ID" => $value["XML_ID"], "NAME" => $value["NAME"], "MODIFICATION_LABEL" => $value["MODIFICATION_LABEL"]); } $tmpNumCals = count($arUserCalendars); $arUserCalendars = CEventCalendar::SyncCalendars("exchange", $arUserCalendars, "user", $arUser["ID"], $siteId); $tmpNumItems = 0; foreach ($arUserCalendars as $userCalendar) { $userCalendarXmlId = $userCalendar["XML_ID"]; $userCalendarXmlId = $userCalendarXmlId == "calendar_" . $arUser["ID"] ? "calendar" : $userCalendarXmlId; $arCalendarItemsList = $exchange->GetList(array("mailbox" => $mailbox, "CalendarId" => $userCalendarXmlId), array("ItemShape" => "IdOnly")); $arUserCalendarItems = array(); foreach ($arCalendarItemsList as $value) { $arUserCalendarItems[] = array("XML_ID" => $value["XML_ID"], "MODIFICATION_LABEL" => $value["MODIFICATION_LABEL"]); } $arModifiedUserCalendarItems = CEventCalendar::SyncCalendarItems("exchange", $userCalendar["CALENDAR_ID"], $arUserCalendarItems); $tmpNumItems += count($arModifiedUserCalendarItems); foreach ($arModifiedUserCalendarItems as $value) { $arModifiedCalendarItem = $exchange->GetById($value["XML_ID"]); if (is_array($arModifiedCalendarItem) && count($arModifiedCalendarItem) > 0) { $arModifiedCalendarItem = $arModifiedCalendarItem[0]; $arModifyEventArray = array("ID" => $value["ID"], "NAME" => $arModifiedCalendarItem["NAME"], "DETAIL_TEXT" => $arModifiedCalendarItem["DETAIL_TEXT"], "DETAIL_TEXT_TYPE" => $arModifiedCalendarItem["DETAIL_TEXT_TYPE"], "XML_ID" => $arModifiedCalendarItem["XML_ID"], "PROPERTY_LOCATION" => $arModifiedCalendarItem["PROPERTY_LOCATION"], "ACTIVE_FROM" => $arModifiedCalendarItem["ACTIVE_FROM"], "ACTIVE_TO" => $arModifiedCalendarItem["ACTIVE_TO"], "PROPERTY_IMPORTANCE" => $arModifiedCalendarItem["PROPERTY_IMPORTANCE"], "PROPERTY_ACCESSIBILITY" => $arModifiedCalendarItem["PROPERTY_FREEBUSY"], "PROPERTY_REMIND_SETTINGS" => $arModifiedCalendarItem["PROPERTY_REMIND_SETTINGS"], "PROPERTY_PERIOD_TYPE" => "NONE", "PROPERTY_BXDAVEX_LABEL" => $arModifiedCalendarItem["MODIFICATION_LABEL"]); if ($arModifiedCalendarItem["IS_RECURRING"]) { if ($arModifiedCalendarItem["RECURRING_TYPE"] == "MONTHLY_ABSOLUTE" || $arModifiedCalendarItem["RECURRING_TYPE"] == "MONTHLY_RELATIVE") { $arModifyEventArray["PROPERTY_PERIOD_TYPE"] = "MONTHLY"; } elseif ($arModifiedCalendarItem["RECURRING_TYPE"] == "YEARLY_ABSOLUTE" || $arModifiedCalendarItem["RECURRING_TYPE"] == "YEARLY_RELATIVE") { $arModifyEventArray["PROPERTY_PERIOD_TYPE"] = "YEARLY"; } elseif ($arModifiedCalendarItem["RECURRING_TYPE"] == "WEEKLY") { $arModifyEventArray["PROPERTY_PERIOD_TYPE"] = "WEEKLY"; } elseif ($arModifiedCalendarItem["RECURRING_TYPE"] == "DAILY") { $arModifyEventArray["PROPERTY_PERIOD_TYPE"] = "DAILY"; } if (isset($arModifiedCalendarItem["RECURRING_INTERVAL"])) { $arModifyEventArray["PROPERTY_PERIOD_COUNT"] = $arModifiedCalendarItem["RECURRING_INTERVAL"]; } if ($arModifyEventArray["PROPERTY_PERIOD_TYPE"] == "WEEKLY") { if (isset($arModifiedCalendarItem["RECURRING_DAYSOFWEEK"])) { $ar = preg_split("/[;,\\s]/i", $arModifiedCalendarItem["RECURRING_DAYSOFWEEK"]); $ar1 = array(); foreach ($ar as $v) { $ar1[] = $arWeekDayMap[strtolower($v)]; } $arModifyEventArray["PROPERTY_PERIOD_ADDITIONAL"] = implode(",", $ar1); } } $arModifyEventArray["PROPERTY_EVENT_LENGTH"] = MakeTimeStamp($arModifyEventArray["ACTIVE_TO"]) - MakeTimeStamp($arModifyEventArray["ACTIVE_FROM"]); if (isset($arModifiedCalendarItem["RECURRING_ENDDATE"])) { $arModifyEventArray["ACTIVE_TO"] = $arModifiedCalendarItem["RECURRING_ENDDATE"]; } elseif (isset($arResultItem["RECURRING_NUMBEROFOCCURRENCES"])) { $eventTime = self::GetPeriodicEventTime(MakeTimeStamp($arModifyEventArray["ACTIVE_TO"]), array("freq" => $arModifyEventArray["PROPERTY_PERIOD_TYPE"], "interval" => $arModifyEventArray["PROPERTY_PERIOD_COUNT"], "byday" => $arModifyEventArray["PROPERTY_PERIOD_ADDITIONAL"]), $arResultItem["RECURRING_NUMBEROFOCCURRENCES"]); $arModifyEventArray["ACTIVE_TO"] = date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $eventTime); } else { $arModifyEventArray["ACTIVE_TO"] = ConvertTimeStamp(mktime(0, 0, 0, 12, 31, 2025), "FULL"); } } CEventCalendar::ModifyEvent($userCalendar["CALENDAR_ID"], $arModifyEventArray); $bShouldClearCache = true; } } } if (DAV_EXCH_DEBUG) { CDav::WriteToLog("Sync " . intval($tmpNumCals) . " calendars, " . intval($tmpNumItems) . " items", "SYNCE"); } } if ($bShouldClearCache) { CEventCalendar::SyncClearCache($siteId); } if (DAV_EXCH_DEBUG) { CDav::WriteToLog("EXCHANGE sync finished", "SYNCE"); } return $bShouldClearCache; }
} if (StrLen($errorMessage) <= 0) { $arFields = array("NAME" => $nameV, "DATE_ACTIVE_FROM" => Date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $fromDateTime), "DATE_ACTIVE_TO" => Date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $toDateTime), "CREATED_BY" => $GLOBALS["USER"]->GetID(), "DETAIL_TEXT" => $descriptionV, "PROPERTY_VALUES" => array($arResult["ALLOWED_ITEM_PROPERTIES"]["UF_PERSONS"]["ID"] => array($personsV), $arResult["ALLOWED_ITEM_PROPERTIES"]["UF_RES_TYPE"]["ID"] => array($resTypeV), $arResult["ALLOWED_ITEM_PROPERTIES"]["UF_PREPARE_ROOM"]["ID"] => array($prepareRoomV), $arResult["ALLOWED_ITEM_PROPERTIES"]["PERIOD_TYPE"]["ID"] => array($regularityV), $arResult["ALLOWED_ITEM_PROPERTIES"]["PERIOD_COUNT"]["ID"] => array($regularityCountV), $arResult["ALLOWED_ITEM_PROPERTIES"]["EVENT_LENGTH"]["ID"] => array($regularityLength), $arResult["ALLOWED_ITEM_PROPERTIES"]["PERIOD_ADDITIONAL"]["ID"] => array($regularityAdditionalVString)), "ACTIVE" => "Y"); $iblockElementObject = new CIBlockElement(); if ($arItem) { $res = $iblockElementObject->Update($arItem["ID"], $arFields); } else { $arFields["IBLOCK_ID"] = $arMeeting["IBLOCK_ID"]; $arFields["IBLOCK_SECTION_ID"] = $arMeeting["ID"]; $idTmp = $iblockElementObject->Add($arFields); $res = $idTmp > 0; } if (!$res) { $errorMessage .= $iblockElementObject->LAST_ERROR . " "; } else { CEventCalendar::clearEventsCache($arMeeting["IBLOCK_ID"]); } } if (StrLen($errorMessage) <= 0) { $p = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MEETING"], array("meeting_id" => $arMeeting["ID"])); $p = $p . (StrPos($p, "?") === false ? "?" : "&") . "week_start=" . Date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATE), $fromDateTime); LocalRedirect($p); } else { $arResult["ErrorMessage"] .= $errorMessage; $bVarsFromForm = true; $arResult["Item"]["StartDate"] = HtmlSpecialCharsbx($_REQUEST["start_date"]); $arResult["Item"]["StartTime"] = HtmlSpecialCharsbx($_REQUEST["start_time"]); $arResult["Item"]["TimeoutTime"] = HtmlSpecialCharsbx($_REQUEST["timeout_time"]); $arResult["Item"]["Name"] = HtmlSpecialCharsbx($_REQUEST["name"]); $arResult["Item"]["Persons"] = HtmlSpecialCharsbx($_REQUEST["persons"]); $arResult["Item"]["ResType"] = HtmlSpecialCharsbx($_REQUEST["res_type"]);
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } CEventCalendar::BuildCalendarSceleton(array('bExtranet' => $arResult['bExtranet'], 'bReadOnly' => $arResult['bReadOnly'], 'id' => $arResult['id'], 'arCalendarsCount' => $arResult['arCalendarsCount'], 'bSuperpose' => $arResult['bSuperpose'], 'bSocNet' => $arResult['bSocNet'], 'week_days' => $arResult['week_days'], 'ownerType' => $arResult['ownerType'], 'component' => $component, 'JSConfig' => $arResult['JSConfig'], 'JS_arEvents' => $arResult['JS_arEvents'], 'JS_arSPEvents' => $arResult['JS_arSPEvents'], 'bShowOutlookBanner' => $arResult['bShowOutlookBanner']));
function UpdateListItems($listName, $updates) { global $USER; $arStatusValues = array_flip($this->arStatusValues); $arPriorityValues = array_flip($this->arPriorityValues); $arWeekDays = array_flip($this->arWeekDays); if (!($listName_original = CIntranetUtils::checkGUID($listName))) { return new CSoapFault('Data error', 'Wrong GUID - ' . $listName); } $obResponse = new CXMLCreator('Results'); $listName = ToUpper(CIntranetUtils::makeGUID($listName_original)); $obRes = CIBlockSection::GetList(array('SORT' => 'ASC'), array('XML_ID' => $listName_original)); if (!($arSection = $obRes->Fetch())) { return new CSoapFault('List not found', 'List with ' . $listName . ' GUID is not found'); } $bGroup = $arSection['SOCNET_GROUP_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'); } } } $obCalendar = new CEventCalendar(); $obCalendar->Init(array('ownerType' => $bGroup ? 'GROUP' : 'USER', 'ownerId' => $bGroup ? $arSection['SOCNET_GROUP_ID'] : (is_object($USER) && $USER->GetID() ? $USER->GetID() : false), 'bOwner' => true, 'iblockId' => $arSection['IBLOCK_ID'], 'bCache' => false)); // dirty hack $arPermissions = $obCalendar->GetPermissions(array('setProperties' => true)); $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(); 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')); if (CECEvent::Delete(array('id' => $arData['ID'], 'ownerType' => $bGroup ? 'GROUP' : 'USER', 'ownerId' => $bGroup ? $arSection['SOCNET_GROUP_ID'] : (is_object($USER) && $USER->GetID() ? $USER->GetID() : false), 'bOwner' => true, 'iblockId' => $arSection['IBLOCK_ID'], 'RMiblockId' => $this->__getRMIblockID(), 'allowResMeeting' => true))) { CEventCalendar::ClearCache('/event_calendar/events/' . $arSection['IBLOCK_ID'] . '/'); $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(" ", " "), "", $arData['Description']); $arData['Description'] = preg_replace("/<![^>]*>/", '', $arData['Description']); //$arData['Description'] = strip_tags($arData['Description']); $arData['Description'] = trim($arData['Description']); $arData['Location'] = trim($arData['Location']); $arData['EventDate'] = $this->__makeTS($arData['EventDate']); $arData['EndDate'] = $this->__makeTS($arData['EndDate']) + ($arData['fAllDayEvent'] ? -86340 : 0); $TZBias = intval(date('Z', $arData['EventDate'])); $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']); 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['RecurrenceData'] = array(); switch ($obNode->name) { case 'daily': // hack. we have no "work days" daily recurence if ($obNode->getAttribute('weekday') == 'TRUE') { $arData['RecurrenceData']['PERIOD_TYPE'] = 'WEEKLY'; $arData['RecurrenceData']['PERIOD_ADDITIONAL'] = '0,1,2,3,4'; $arData['RecurrenceData']['PERIOD_COUNT'] = 1; } else { $arData['RecurrenceData']['PERIOD_TYPE'] = 'DAILY'; $arData['RecurrenceData']['PERIOD_COUNT'] = $obNode->getAttribute('dayFrequency'); } $time_end = strtotime(date(date('Y-m-d', $arData['EventDate']) . ' H:i:s', $arData['EndDate'])); $arData['RecurrenceData']['EVENT_LENGTH'] = $time_end - $arData['EventDate']; break; case 'weekly': $arData['RecurrenceData']['PERIOD_TYPE'] = 'WEEKLY'; $arData['RecurrenceData']['PERIOD_ADDITIONAL'] = ''; foreach ($arWeekDays as $day => $value) { if ($obNode->getAttribute($day)) { $arData['RecurrenceData']['PERIOD_ADDITIONAL'] .= ($arData['RecurrenceData']['PERIOD_ADDITIONAL'] == '' ? '' : ',') . $value; } } $arData['RecurrenceData']['PERIOD_COUNT'] = $obNode->getAttribute('weekFrequency'); $time_end = strtotime(date(date('Y-m-d', $arData['EventDate']) . ' H:i:s', $arData['EndDate'])); $arData['RecurrenceData']['EVENT_LENGTH'] = $time_end - $arData['EventDate']; break; case 'monthly': $arData['RecurrenceData']['PERIOD_TYPE'] = 'MONTHLY'; $arData['RecurrenceData']['PERIOD_COUNT'] = $obNode->getAttribute('monthFrequency'); $time_end = strtotime(date(date('Y-m', $arData['EventDate']) . '-d H:i:s', $arData['EndDate'])); $arData['RecurrenceData']['EVENT_LENGTH'] = $time_end - $arData['EventDate']; break; case 'yearly': $arData['RecurrenceData']['PERIOD_TYPE'] = 'YEARLY'; $arData['RecurrenceData']['PERIOD_COUNT'] = $obNode->getAttribute('yearFrequency'); $time_end = strtotime(date(date('Y', $arData['EventDate']) . '-m-d H:i:s', $arData['EndDate'])); $arData['RecurrenceData']['EVENT_LENGTH'] = $time_end - $arData['EventDate']; break; } $obWhile = $obRule->children[2]; if ($obWhile->name == 'repeatForever') { $arData['EndDate'] = MakeTimeStamp(''); } elseif ($obWhile->name == 'windowEnd') { $arData['EndDate'] = $this->__makeTS($obWhile->textContent()); } } $TZBias = $arData['fAllDayEvent'] ? 0 : $TZBias; $arData['EventDate'] += $TZBias; $arData['EndDate'] += $TZBias; $arRes = array('iblockId' => $obCalendar->iblockId, 'ownerType' => $obCalendar->ownerType, 'ownerId' => $obCalendar->ownerId, 'RMiblockId' => $this->__getRMIblockID(), 'allowResMeeting' => true, 'bNew' => $arData['_command'] == 'New', 'fullUrl' => $obCalendar->fullUrl, 'userId' => $obCalendar->userId, 'pathToUserCalendar' => $obCalendar->pathToUserCalendar, 'pathToGroupCalendar' => $obCalendar->pathToGroupCalendar, 'userIblockId' => $obCalendar->userIblockId, 'calendarId' => $arSection['ID'], 'sectionId' => $arSection['IBLOCK_SECTION_ID'], 'dateFrom' => ConvertTimeStamp($arData['EventDate'], 'FULL'), 'dateTo' => ConvertTimeStamp($arData['EndDate'], 'FULL'), 'name' => $arData['Title'], 'desc' => $arData['Description'], 'prop' => array('ACCESSIBILITY' => $arStatusValues[$arData['MetaInfo_BusyStatus']], 'IMPORTANCE' => $arPriorityValues[$arData['MetaInfo_Priority']]), 'notDisplayCalendar' => true, 'location' => array('new' => CEventCalendar::ParseLocation($arData['Location']))); if ($arData['fRecurrence']) { $arRes['prop']['PERIOD_TYPE'] = $arData['RecurrenceData']['PERIOD_TYPE']; $arRes['prop']['PERIOD_COUNT'] = $arData['RecurrenceData']['PERIOD_COUNT']; $arRes['prop']['EVENT_LENGTH'] = $arData['RecurrenceData']['EVENT_LENGTH']; $arRes['prop']['PERIOD_ADDITIONAL'] = $arData['RecurrenceData']['PERIOD_ADDITIONAL']; } if ($arData['_command'] == 'New') { $arRes['bNew'] = true; } else { $arRes['id'] = $arData['ID']; } if (!$arRes['bNew']) { if ($arOldEvent = $obCalendar->GetEvents(array('ownerType' => 'USER', 'ownerId' => $arSection['CREATED_BY'], 'bOwner' => true, 'iblockId' => $arSection['IBLOCK_ID'], 'sectionId' => $arSection['ID'], 'eventId' => $arRes['id'], 'arCalendarIds' => array($arSection['ID']), 'forExport' => true))) { $arOldEvent = $arOldEvent[0]; $arRes['prop']['VERSION'] = $arOldEvent['VERSION']; if ($arOldEvent['LOCATION']) { } $arRes['location']['old'] = CEventCalendar::ParseLocation($arOldEvent['LOCATION']); if ($arRes['location']['old']['mrid']) { $arRes['location']['new'] = 'ECMR_' . $arRes['location']['old']['mrid']; $arRes['prop']['VERSION']++; } $bMaster = true; if (is_array($arOldEvent['GUESTS']) && count($arOldEvent['GUESTS']) > 0) { $arRes['GUESTS'] = array(); foreach ($arOldEvent['GUESTS'] as $arGuest) { $arRes['GUESTS'][] = $arGuest['id']; } } if (is_array($arOldEvent['HOST'])) { $bMaster = false; $arRes['prop']['PARENT'] = $arOldEvent['HOST']['parentId']; } if (!$bMaster) { $arRes['name'] = $arOldEvent['NAME']; $arRes['desc'] = $arOldEvent['DETAIL_TEXT']; $arRes['dateFrom'] = $arOldEvent['DATE_FROM']; $arRes['dateTo'] = $arOldEvent['DATE_TO']; if (is_array($arOldEvent['PERIOD'])) { $arRes['prop']['PERIOD_TYPE'] = $arOldEvent['PERIOD']['TYPE']; $arRes['prop']['PERIOD_COUNT'] = $arOldEvent['PERIOD']['COUNT']; $arRes['prop']['EVENT_LENGTH'] = $arOldEvent['PERIOD']['LENGTH']; $arRes['prop']['PERIOD_ADDITIONAL'] = $arOldEvent['PERIOD']['DAYS']; } else { unset($arRes['prop']['PERIOD_TYPE']); unset($arRes['prop']['PERIOD_COUNT']); unset($arRes['prop']['EVENT_LENGTH']); unset($arRes['prop']['PERIOD_ADDITIONAL']); } } else { if (is_array($arOldEvent['PERIOD']) && !$arData['RecurrenceData'] && $arData['EventType'] == 1) { $arRes['dateFrom'] = $arOldEvent['DATE_FROM']; $arRes['dateTo'] = $arOldEvent['DATE_TO']; $arRes['prop']['PERIOD_TYPE'] = $arOldEvent['PERIOD']['TYPE']; $arRes['prop']['PERIOD_COUNT'] = $arOldEvent['PERIOD']['COUNT']; $arRes['prop']['EVENT_LENGTH'] = $arOldEvent['PERIOD']['LENGTH']; $arRes['prop']['PERIOD_ADDITIONAL'] = $arOldEvent['PERIOD']['DAYS']; } } } else { return new CSoapFault('Event not found', 'Event ' . $arRes['id'] . ' not found on server'); } } if (is_array($arRes['location']['old'])) { $arRes['location']['old'] = $arRes['location']['old']['str']; } if (is_array($arRes['location']['new'])) { $arRes['location']['new'] = $arRes['location']['new']['str']; } if ($EventID = $obCalendar->SaveEvent($arRes)) { CEventCalendar::ClearCache('/event_calendar/events/' . $arRes['iblockId'] . '/'); // 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); } } } $arMethodParams = array('ownerType' => 'USER', 'ownerId' => is_object($USER) && $USER->GetID() ? $USER->GetID() : false, 'iblockId' => $arSection['IBLOCK_ID'], 'sectionId' => $arSection['ID'], 'arCalendarIds' => array($arSection['ID']), 'forExport' => true, 'bLoadAll' => false, 'timestampFrom' => $dateStart); $arCalendarEntries = $obCalendar->GetEvents($arMethodParams); foreach ($arCalendarEntries as $arEntry) { if ($arResponseRows[$arEntry['ID']]) { $obRow = $this->__getRow($arEntry, $listName, $last_change = 0); $obRow->setAttribute('xmlns:z', "#RowsetSchema"); if ($arReplicationIDs[$arEntry['ID']]) { $obRow->setAttribute('MetaInfo_ReplicationID', $arReplicationIDs[$arEntry['ID']]); } $arResponseRows[$arEntry['ID']]->addChild($obRow); } $obResponse->addChild($arResponseRows[$arEntry['ID']]); } return array('UpdateListItemsResult' => $obResponse); }
// Set Reserve Video Meeting params if ($Params["allowVideoMeeting"]) { $VMiblockId = isset($arParams["VIDEO_MEETING_IBLOCK_ID"]) ? $arParams["VIDEO_MEETING_IBLOCK_ID"] : 0; if (!$VMiblockId) { $rsIBlock = CIBlock::GetList(array("sort" => "asc"), array("TYPE" => $arParams["IBLOCK_TYPE"], "ACTIVE" => "Y", "CODE" => 'video-meeting')); if ($arr = $rsIBlock->Fetch()) { $VMiblockId = $arr["ID"] > 0 ? $arr["ID"] : 0; } } $Params['VMiblockId'] = $VMiblockId; $Params['VMPath'] = isset($arParams["PATH_TO_VIDEO_MEETING"]) ? $arParams["PATH_TO_VIDEO_MEETING"] : ''; $Params['VMUserGroups'] = isset($arParams["VIDEO_MEETING_USERGROUPS"]) ? $arParams["VIDEO_MEETING_USERGROUPS"] : array(1); } $APPLICATION->ResetException(); // Create new instance of Event Calendar object $EC = new CEventCalendar(); $EC->Init($Params); // Init with $Params array if (isset($_REQUEST['action'])) { $EC->Request($_REQUEST['action']); } else { $EC->Show(array('initDate' => $arParams["INIT_DATE"], 'weekHolidays' => $arParams['WEEK_HOLIDAYS'], 'workTime' => array(intVal($arParams['WORK_TIME_START']), intVal($arParams['WORK_TIME_END'])), 'yearHolidays' => $arParams['YEAR_HOLIDAYS'])); } if ($ex = $APPLICATION->GetException()) { return ShowError($ex->GetString()); } // Set title and navigation $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "Y" ? "Y" : "N"; $arParams["SET_NAV_CHAIN"] = $arParams["SET_NAV_CHAIN"] == "Y" ? "Y" : "N"; //Turn OFF by default if ($arParams["STR_TITLE"]) {
public static function GetEventGuests($eventId, $userId) { if (self::IsNewCalendar()) { $res = array(); $arAttendees = CCalendarEvent::GetAttendees($eventId); if (is_array($arAttendees)) { foreach ($arAttendees[$eventId] as $arGuest) { $res[] = array('id' => $arGuest['USER_ID'], 'status' => $arGuest['STATUS']); } } return $res; } else { $dbRes = CIBlockElement::GetByID($eventId); if ($arRes = $dbRes->Fetch()) { $calIblockSection = $arRes['IBLOCK_SECTION_ID']; $calIblock = $arRes['IBLOCK_ID']; } CModule::IncludeModule('socialnetwork'); $obCalendar = new CEventCalendar(); $obCalendar->Init(array('ownerType' => 'USER', 'ownerId' => $userId, 'bOwner' => true, 'iblockId' => $calIblock, 'userIblockId' => COption::GetOptionInt('intranet', 'iblock_calendar', 0, SITE_ID))); $arPermissions = $obCalendar->GetPermissions(array('setProperties' => true)); $arEvents = $obCalendar->GetEvents(array('iblockId' => $calIblock, 'sectionId' => $calIblockSection, 'eventId' => $eventId, 'bLoadAll' => true, 'ownerType' => 'USER')); if ($event = $arEvents[0]) { return is_array($event['GUESTS']) ? array_values($event['GUESTS']) : array(); } } }
public function Delete($id, $siteId, $account, $arPath) { $calendarId = $this->GetCalendarId($siteId, $account, $arPath); if ($calendarId == null) { return '404 Not Found'; } $request = $this->groupdav->GetRequest(); $oldEvent = $this->GetEntry('DELETE', $id, $calendarId); if (!is_array($oldEvent)) { return $oldEvent; } CDav::Report("CDavCalendarHandler::Delete", "id", $id); return CEventCalendar::DeleteCalendarEvent($calendarId, $oldEvent["ID"], $request->GetPrincipal()->Id()); }
public function GetEvents($date) { $arEvents = array(); if (CBXFeatures::IsFeatureEnabled('Calendar')) { $ts = CTimeMan::RemoveHoursTS(MakeTimeStamp($date)); if ($ts > 0) { $calendar2 = COption::GetOptionString("intranet", "calendar_2", "N") == "Y" && CModule::IncludeModule('calendar'); if ($calendar2) { $arFilter = array('arFilter' => array("OWNER_ID" => $this->USER_ID, "FROM_LIMIT" => ConvertTimeStamp($ts, 'FULL'), "TO_LIMIT" => ConvertTimeStamp($ts + 86399, 'FULL')), 'parseRecursion' => true, 'userId' => $this->USER_ID, 'skipDeclined' => true, 'fetchAttendees' => false, 'fetchMeetings' => true); $arNewEvents = CCalendarEvent::GetList($arFilter); if (count($arNewEvents) > 0) { foreach ($arNewEvents as $arEvent) { if ($arEvent['RRULE']) { $ts_from = MakeTimeStamp($arEvent['DT_FROM']); $ts_to = MakeTimeStamp($arEvent['DT_TO']); if ($ts_to < $ts || $ts_from > $ts + 86399) { continue; } } $arEvents[] = array('ID' => $arEvent['ID'], 'OWNER_ID' => $this->USER_ID, 'CREATED_BY' => $arEvent['CREATED_BY'], 'NAME' => $arEvent['NAME'], 'DETAIL_TEXT' => $arEvent['DESCRIPTION'], 'DATE_FROM' => $arEvent['DT_FROM'], 'DATE_TO' => $arEvent['DT_TO'], 'IMPORTANCE' => $arEvent['IMPORTANCE'], 'ACCESSIBILITY' => $arEvent['ACCESSIBILITY']); } } } else { $arEvents = CEventCalendar::GetNearestEventsList(array('userId' => $this->USER_ID, 'bCurUserList' => true, 'fromLimit' => ConvertTimeStamp($ts, 'FULL'), 'toLimit' => ConvertTimeStamp($ts + 86399, 'FULL'), 'iblockId' => COption::GetOptionInt('intranet', 'iblock_calendar'))); foreach ($arEvents as $key => $event) { if ($event['STATUS'] === 'N') { unset($arEvents[$key]); } } } return array_values($arEvents); } } return false; }