Beispiel #1
0
 public static function ManageConnections($arConnections = array(), $Params = array())
 {
     global $APPLICATION;
     $ownerId = isset($Params['ownerId']) ? $Params['ownerId'] : self::$ownerId;
     $bSync = false;
     $l = count($arConnections);
     for ($i = 0; $i < $l; $i++) {
         $con = $arConnections[$i];
         $conId = intVal($con['id']);
         if ($conId <= 0) {
             if ($con['del'] == 'Y') {
                 continue;
             }
             if (!CCalendar::CheckCalDavUrl($con['link'], $con['user_name'], $con['pass'])) {
                 return GetMessage("EC_CALDAV_URL_ERROR");
             }
             CDavConnection::Add(array("ENTITY_TYPE" => 'user', "ENTITY_ID" => self::$ownerId, "ACCOUNT_TYPE" => 'caldav', "NAME" => $con['name'], "SERVER" => $con['link'], "SERVER_USERNAME" => $con['user_name'], "SERVER_PASSWORD" => $con['pass']));
             $bSync = true;
         } elseif ($con['del'] != 'Y') {
             $arFields = array("NAME" => $con['name'], "SERVER" => $con['link'], "SERVER_USERNAME" => $con['user_name']);
             if ($con['pass'] !== 'bxec_not_modify_pass') {
                 $arFields["SERVER_PASSWORD"] = $con['pass'];
             }
             CDavConnection::Update($conId, $arFields);
             $bSync = true;
         } else {
             CDavConnection::Delete($conId);
             $res = CCalendarSect::GetList(array('arFilter' => array('CAL_TYPE' => 'user', 'OWNER_ID' => $ownerId, 'CAL_DAV_CON' => $conId)));
             foreach ($res as $sect) {
                 if ($con['del_calendars'] == 'Y') {
                     // Delete all callendars from this connection
                     CCalendarSect::Delete($sect['ID']);
                 } else {
                     CCalendarSect::Edit(array('arFields' => array("ID" => $sect['ID'], "CAL_DAV_CON" => '', 'CAL_DAV_CAL' => '', 'CAL_DAV_MOD' => '')));
                 }
             }
         }
     }
     if ($err = $APPLICATION->GetException()) {
         return $err->GetString();
     }
     if ($bSync) {
         CDavGroupdavClientCalendar::DataSync("user", self::$ownerId);
     }
     $res = CDavConnection::GetList(array("ID" => "DESC"), array("ENTITY_TYPE" => "user", "ENTITY_ID" => self::$ownerId, "ACCOUNT_TYPE" => 'caldav'), false, false);
     while ($arCon = $res->Fetch()) {
         if (strpos($arCon['LAST_RESULT'], "[200]") === false) {
             return GetMessage('EC_CALDAV_CONNECTION_ERROR', array('#CONNECTION_NAME#' => $arCon['NAME'], '#ERROR_STR#' => $arCon['LAST_RESULT']));
         }
     }
     return true;
 }
 public static function GetList($Params = array())
 {
     global $DB, $USER;
     $arFilter = $Params['arFilter'];
     $arOrder = isset($Params['arOrder']) ? $Params['arOrder'] : array('SORT' => 'asc');
     $Params['joinTypeInfo'] = !!$Params['joinTypeInfo'];
     $checkPermissions = $Params['checkPermissions'] !== false;
     $bCache = CCalendar::CacheTime() > 0;
     if ($bCache) {
         $cache = new CPHPCache();
         $cacheId = serialize(array('section_list', $arFilter, $arOrder, $Params['joinTypeInfo'], CCalendar::IsIntranetEnabled()));
         $cachePath = CCalendar::CachePath() . 'section_list';
         if ($cache->InitCache(CCalendar::CacheTime(), $cacheId, $cachePath)) {
             $res = $cache->GetVars();
             $arResult = $res["arResult"];
             $arSectionIds = $res["arSectionIds"];
         }
     }
     if (!$bCache || !isset($arSectionIds)) {
         $arFields = self::GetFields();
         $arSqlSearch = array();
         if (is_array($arFilter)) {
             $filter_keys = array_keys($arFilter);
             for ($i = 0, $l = count($filter_keys); $i < $l; $i++) {
                 $n = strtoupper($filter_keys[$i]);
                 $val = $arFilter[$filter_keys[$i]];
                 if (is_string($val) && strlen($val) <= 0 || strval($val) == "NOT_REF") {
                     continue;
                 }
                 if ($n == 'ID' || $n == 'XML_ID' || $n == 'OWNER_ID') {
                     $arSqlSearch[] = GetFilterQuery("CS." . $n, $val, 'N');
                 } elseif ($n == 'CAL_TYPE' && is_array($val)) {
                     $strType = "";
                     foreach ($val as $type) {
                         $strType .= ",'" . CDatabase::ForSql($type) . "'";
                     }
                     $arSqlSearch[] = "CS.CAL_TYPE in (" . trim($strType, ", ") . ")";
                     $arSqlSearch[] = "CT.ACTIVE='Y'";
                 } elseif (isset($arFields[$n])) {
                     $arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val, isset($arFields[$n]["PROCENT"]) && $arFields[$n]["PROCENT"] == "N" ? "N" : "Y");
                 }
             }
         }
         $strOrderBy = '';
         foreach ($arOrder as $by => $order) {
             if (isset($arFields[strtoupper($by)])) {
                 $strOrderBy .= $arFields[strtoupper($by)]["FIELD_NAME"] . ' ' . (strtolower($order) == 'desc' ? 'desc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS LAST" : "") : 'asc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS FIRST" : "")) . ',';
             }
         }
         if (strlen($strOrderBy) > 0) {
             $strOrderBy = "ORDER BY " . rtrim($strOrderBy, ",");
         }
         $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
         if (isset($arFilter['ADDITIONAL_IDS']) && is_array($arFilter['ADDITIONAL_IDS']) && count($arFilter['ADDITIONAL_IDS']) > 0) {
             $strTypes = "";
             foreach ($arFilter['ADDITIONAL_IDS'] as $adid) {
                 $strTypes .= "," . IntVal($adid);
             }
             $strSqlSearch = '(' . $strSqlSearch . ') OR ID in(' . trim($strTypes, ', ') . ')';
         }
         $select = 'CS.*';
         $from = 'b_calendar_section CS';
         // Fetch types info into selection
         if ($Params['joinTypeInfo']) {
             $select .= ", CT.NAME AS TYPE_NAME, CT.DESCRIPTION AS TYPE_DESC";
             $from .= "\n INNER JOIN b_calendar_type CT ON (CS.CAL_TYPE=CT.XML_ID)";
         }
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\t{$select}\n\t\t\t\tFROM\n\t\t\t\t\t{$from}\n\t\t\t\tWHERE\n\t\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strOrderBy}";
         $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $arResult = array();
         $arSectionIds = array();
         $isExchangeEnabled = CCalendar::IsExchangeEnabled();
         $isCalDAVEnabled = CCalendar::IsCalDAVEnabled();
         while ($arRes = $res->Fetch()) {
             $arRes['COLOR'] = CCalendar::Color($arRes['COLOR'], true);
             $arSectionIds[] = $arRes['ID'];
             if (isset($arRes['EXPORT']) && $arRes['EXPORT'] != "") {
                 $arRes['EXPORT'] = unserialize($arRes['EXPORT']);
                 if (is_array($arRes['EXPORT']) && $arRes['EXPORT']['ALLOW']) {
                     $arRes['EXPORT']['LINK'] = self::GetExportLink($arRes['ID'], $arRes['CAL_TYPE'], $arRes['OWNER_ID']);
                 }
             }
             if (!is_array($arRes['EXPORT'])) {
                 $arRes['EXPORT'] = array('ALLOW' => false, 'SET' => false, 'LINK' => false);
             }
             // Outlook js
             if (CCalendar::IsIntranetEnabled()) {
                 $arRes['OUTLOOK_JS'] = CCalendarSect::GetOutlookLink(array('ID' => intVal($arRes['ID']), 'XML_ID' => $arRes['XML_ID'], 'TYPE' => $arRes['CAL_TYPE'], 'NAME' => $arRes['NAME'], 'PREFIX' => CCalendar::GetOwnerName($arRes['CAL_TYPE'], $arRes['OWNER_ID']), 'LINK_URL' => CCalendar::GetOuterUrl()));
             }
             if ($arRes['CAL_TYPE'] == 'user') {
                 $arRes['IS_EXCHANGE'] = strlen($arRes["DAV_EXCH_CAL"]) > 0 && $isExchangeEnabled;
                 if ($arRes["CAL_DAV_CON"] && $isCalDAVEnabled) {
                     $arRes["CAL_DAV_CON"] = intVal($arRes["CAL_DAV_CON"]);
                     $resCon = CDavConnection::GetList(array("ID" => "ASC"), array("ID" => $arRes["CAL_DAV_CON"]));
                     if ($con = $resCon->Fetch()) {
                         $arRes['CAL_DAV_CON'] = $arRes["CAL_DAV_CON"];
                     } else {
                         $arRes['CAL_DAV_CON'] = false;
                     }
                 }
             } else {
                 $arRes['IS_EXCHANGE'] = false;
                 $arRes['CAL_DAV_CON'] = false;
             }
             $arResult[] = $arRes;
         }
         if ($bCache) {
             $cache->StartDataCache(CCalendar::CacheTime(), $cacheId, $cachePath);
             $cache->EndDataCache(array("arResult" => $arResult, "arSectionIds" => $arSectionIds));
         }
     }
     if ($checkPermissions && count($arSectionIds) > 0) {
         $userId = $Params['userId'] ? intVal($Params['userId']) : $USER->GetID();
         $arPerm = CCalendarSect::GetArrayPermissions($arSectionIds);
         $res = array();
         $arAccessCodes = array();
         $settings = CCalendar::GetSettings(array('request' => false));
         foreach ($arResult as $sect) {
             $sectId = $sect['ID'];
             $bOwner = $sect['CAL_TYPE'] == 'user' && $sect['OWNER_ID'] == $userId;
             $bManager = false;
             if (CModule::IncludeModule('intranet') && $sect['CAL_TYPE'] == 'user' && $settings['dep_manager_sub']) {
                 if (!$userId) {
                     $userId = CCalendar::GetUserId();
                 }
                 $bManager = in_array($userId, CCalendar::GetUserManagers($sect['OWNER_ID'], true));
             }
             if ($bOwner || $bManager || self::CanDo('calendar_view_time', $sectId)) {
                 $sect['PERM'] = array('view_time' => $bManager || $bOwner || self::CanDo('calendar_view_time', $sectId, $userId), 'view_title' => $bManager || $bOwner || self::CanDo('calendar_view_title', $sectId, $userId), 'view_full' => $bManager || $bOwner || self::CanDo('calendar_view_full', $sectId, $userId), 'add' => $bOwner || self::CanDo('calendar_add', $sectId, $userId), 'edit' => $bOwner || self::CanDo('calendar_edit', $sectId, $userId), 'edit_section' => $bOwner || self::CanDo('calendar_edit_section', $sectId, $userId), 'access' => $bOwner || self::CanDo('calendar_edit_access', $sectId, $userId));
                 if ($bOwner || self::CanDo('calendar_edit_access', $sectId, $userId)) {
                     $sect['ACCESS'] = array();
                     if (count($arPerm[$sectId]) > 0) {
                         // Add codes to get they full names for interface
                         $arAccessCodes = array_merge($arAccessCodes, array_keys($arPerm[$sectId]));
                         $sect['ACCESS'] = $arPerm[$sectId];
                     }
                 }
                 $res[] = $sect;
             }
         }
         CCalendar::PushAccessNames($arAccessCodes);
         $arResult = $res;
     }
     return $arResult;
 }
Beispiel #3
0
 function Show($Params)
 {
     global $APPLICATION, $USER, $EC_UserFields;
     $this->GetPermissions(array('userId' => $curUserId));
     if (!$this->bAccess) {
         return $APPLICATION->ThrowException(GetMessage("EC_ACCESS_DENIED"));
     }
     if ($this->reserveMeetingReadonlyMode) {
         $this->bReadOnly = true;
     }
     $arCalendars = $this->GetCalendarsEx();
     // Cache inside
     $sectionId = $this->GetSectionId();
     // * * * HANDLE SUPERPOSED CALENDARS  * * *
     if ($this->allowSuperpose) {
         $this->HandleSuperpose($this->arSPIblIds, true);
     }
     $arCalendarIds = $this->GetUserActiveCalendars();
     // Show popup event at start
     if (isset($_GET['EVENT_ID']) && intVal($_GET['EVENT_ID']) > 0) {
         $eventId = intVal($_GET['EVENT_ID']);
         $bDelEvent = false;
         $rsEvent = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $this->iblockId, "ACTIVE" => "Y", "ID" => $eventId, "CHECK_PERMISSIONS" => "N"), false, false, array("ACTIVE_FROM", "IBLOCK_SECTION_ID", "CREATED_BY", "PROPERTY_CONFIRMED"));
         if ($ev = $rsEvent->Fetch()) {
             if ($ev["CREATED_BY"] == $USER->GetId() && isset($_GET['CONFIRM']) && $ev["PROPERTY_CONFIRMED_ENUM_ID"] == $this->GetConfirmedID($this->iblockId, "Q")) {
                 $this->GenEventDynClose($eventId);
                 if ($_GET['CONFIRM'] == 'Y') {
                     $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/');
                     $this->ConfirmEvent(array('id' => $eventId, 'bCheckOwner' => false));
                 } elseif ($_GET['CONFIRM'] == 'N') {
                     $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/');
                     CECEvent::Delete(array('id' => $eventId, 'iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'userId' => $USER->GetId(), 'pathToUserCalendar' => $this->pathToUserCalendar, 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting));
                     $bDelEvent = true;
                     // Event was deleted
                     $eventId = false;
                 }
             } elseif ($ev["CREATED_BY"] == $USER->GetId() && isset($_GET['CLOSE_MESS']) && $_GET['CLOSE_MESS'] == 'Y') {
                 $this->GenEventDynClose($eventId);
             }
             if (!$bDelEvent) {
                 // If user turn off this calendar
                 if (!in_array($ev["IBLOCK_SECTION_ID"], $arCalendarIds)) {
                     $arCalendarIds[] = $ev["IBLOCK_SECTION_ID"];
                 }
                 if (!isset($_GET['EVENT_DATE'])) {
                     $date = $ev['ACTIVE_FROM'];
                 } else {
                     $date = $_GET['EVENT_DATE'];
                 }
                 $ts = MakeTimeStamp($date, getTSFormat());
                 $startup_event_date = date(getDateFormat(false), $ts);
                 $init_month = date('m', $ts);
                 $init_year = date('Y', $ts);
             }
         }
         $arStartupEvent = $eventId ? array('id' => $eventId, 'date' => $startup_event_date) : false;
     } else {
         $arStartupEvent = false;
     }
     if (!$init_month && !$init_year && strlen($Params["initDate"]) > 0 && strpos($Params["initDate"], '.') !== false) {
         $ts = MakeTimeStamp($Params["initDate"], getTSFormat());
         $init_month = date('m', $ts);
         $init_year = date('Y', $ts);
     }
     if (!isset($init_month)) {
         $init_month = date("m");
     }
     if (!isset($init_year)) {
         $init_year = date("Y");
     }
     $id = 'EC' . rand() . '_';
     if (!isset($Params['weekHolidays'])) {
         $Params['weekHolidays'] = array(5, 6);
     }
     if ($Params["workTime"][0] <= 0) {
         $Params["workTime"][0] = 9;
     }
     if ($Params["workTime"][1] <= 0) {
         $Params["workTime"][1] = 19;
     }
     if (isset($Params['yearHolidays'])) {
         $Params['yearHolidays'] = explode(',', $Params['yearHolidays']);
         array_walk($Params['yearHolidays'], 'trim_');
     } else {
         $Params['yearHolidays'] = array();
     }
     $arCalColors = array('#CEE669', '#E6A469', '#98AEF6', '#7DDEC2', '#B592EC', '#D98E85', '#F6EA68', '#DDBFEB');
     $arStrWeek = array(array(GetMessage('EC_MON_F'), GetMessage('EC_MON')), array(GetMessage('EC_TUE_F'), GetMessage('EC_TUE')), array(GetMessage('EC_WEN_F'), GetMessage('EC_WEN')), array(GetMessage('EC_THU_F'), GetMessage('EC_THU')), array(GetMessage('EC_FRI_F'), GetMessage('EC_FRI')), array(GetMessage('EC_SAT_F'), GetMessage('EC_SAT')), array(GetMessage('EC_SAN_F'), GetMessage('EC_SAN')));
     $arStrMonth = array(GetMessage('EC_JAN'), GetMessage('EC_FEB'), GetMessage('EC_MAR'), GetMessage('EC_APR'), GetMessage('EC_MAY'), GetMessage('EC_JUN'), GetMessage('EC_JUL'), GetMessage('EC_AUG'), GetMessage('EC_SEP'), GetMessage('EC_OCT'), GetMessage('EC_NOV'), GetMessage('EC_DEC'));
     $arStrMonth_R = array(GetMessage('EC_JAN_R'), GetMessage('EC_FEB_R'), GetMessage('EC_MAR_R'), GetMessage('EC_APR_R'), GetMessage('EC_MAY_R'), GetMessage('EC_JUN_R'), GetMessage('EC_JUL_R'), GetMessage('EC_AUG_R'), GetMessage('EC_SEP_R'), GetMessage('EC_OCT_R'), GetMessage('EC_NOV_R'), GetMessage('EC_DEC_R'));
     $EC_UserFields = false;
     $this->CheckSectionProperties($this->iblockId, $this->ownerType);
     $UserSettings = $this->GetUserSettings();
     if (!$this->bReadOnly && count($arCalendars) > 0) {
         $this->bShowBanner = true;
     }
     if (isset($UserSettings['ShowBanner']) && !$UserSettings['ShowBanner']) {
         $this->bShowBanner = false;
     }
     $JSConfig = array('sessid' => bitrix_sessid(), 'month' => $arStrMonth, 'month_r' => $arStrMonth_R, 'days' => $arStrWeek, 'id' => $id, 'week_holidays' => $Params['weekHolidays'], 'year_holidays' => $Params['yearHolidays'], 'iblockId' => $this->iblockId, 'init_month' => $init_month, 'init_year' => $init_year, 'arCalColors' => $arCalColors, 'bReadOnly' => $this->bReadOnly, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'userId' => $this->userId, 'userName' => $this->userName, 'section_id' => $sectionId, 'arCalendars' => $arCalendars, 'arCalendarIds' => $arCalendarIds, 'page' => $this->pageUrl, 'fullUrl' => $this->fullUrl, 'startupEvent' => $arStartupEvent, 'bSuperpose' => $this->bSuperpose, 'arSPCalendars' => $this->arSPCal, 'arSPCalendarsShow' => $this->arSPCalShow, 'superposeExportLink' => $this->superposeExportLink, 'bSPUserCals' => $this->superposeUsersCals || $this->superposeCurUserCals, 'SP' => $this->GetCurCalsSPParams(), 'allowAdd2SP' => $this->allowAdd2SP, 'workTime' => $Params["workTime"], 'Settings' => $UserSettings, 'bSocNet' => $this->bSocNet, 'pathToUser' => $this->pathToUser, 'dateFormat' => CSite::GetDateFormat("SHORT", SITE_ID), 'meetingRooms' => $this->GetMeetingRoomList(), 'allowResMeeting' => $this->allowResMeeting, 'allowVideoMeeting' => $this->allowVideoMeeting, 'bExtranet' => $this->bExtranet, 'bShowBanner' => $this->bShowBanner, 'planner_js_src' => '/bitrix/js/intranet/event_calendar/planner.js?v=' . filemtime($_SERVER['DOCUMENT_ROOT'] . "/bitrix/js/intranet/event_calendar/planner.js"), 'reserveMeetingReadonlyMode' => $this->reserveMeetingReadonlyMode);
     if ($this->reserveMeetingReadonlyMode) {
         $JSConfig['pathToReserveNew'] = $this->pathToReserveNew;
     }
     if (CEventCalendar::IsCalDAVEnabled() && $this->ownerType == "USER") {
         $JSConfig['bCalDAV'] = true;
         if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) {
             $serverName = SITE_SERVER_NAME;
         } else {
             $serverName = COption::GetOptionString("main", "server_name", $_SERVER["SERVER_NAME"]);
         }
         $JSConfig['caldav_link_all'] = (CMain::IsHTTPS() ? "https://" : "http://") . $serverName;
         if ($this->ownerType == 'USER') {
             if ($this->ownerId == $this->userId) {
                 $login = $USER->GetLogin();
             } else {
                 $rsUser = CUser::GetByID($this->ownerId);
                 if ($arUser = $rsUser->Fetch()) {
                     $login = $arUser['LOGIN'];
                 }
             }
             $JSConfig['caldav_link_one'] = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER["SERVER_NAME"] . "/bitrix/groupdav.php/" . SITE_ID . "/" . $login . "/calendar/#CALENDAR_ID#/";
         } else {
             if ($this->ownerType == 'GROUP') {
                 $JSConfig['caldav_link_one'] = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER["SERVER_NAME"] . "/bitrix/groupdav.php/" . SITE_ID . "/group-" . $this->ownerId . "/calendar/#CALENDAR_ID#/";
             }
         }
         if ($this->ownerType == 'USER') {
             $res = CDavConnection::GetList(array("ID" => "DESC"), array("ENTITY_TYPE" => "user", "ENTITY_ID" => $this->ownerId, "ACCOUNT_TYPE" => 'caldav'), false, false);
             $arConnections = array();
             while ($arCon = $res->Fetch()) {
                 $arConnections[] = array('id' => $arCon['ID'], 'name' => $arCon['NAME'], 'link' => $arCon['SERVER'], 'user_name' => $arCon['SERVER_USERNAME'], 'last_result' => $arCon['LAST_RESULT'], 'sync_date' => $arCon['SYNCHRONIZED']);
             }
             $JSConfig['connections'] = $arConnections;
         }
     }
     if (CEventCalendar::IsExchangeEnabled() && $this->ownerType == 'USER') {
         $JSConfig['bExchange'] = true;
     }
     $from_limit = date(getDateFormat(false), mktime(0, 0, 0, $init_month - 1, 20, $init_year));
     $to_limit = date(getDateFormat(false), mktime(0, 0, 0, $init_month + 1, 10, $init_year));
     $this->SetLoadLimits($init_month, $init_year);
     if ($sectionId !== false) {
         // Get events  (*Cache Inside)
         $ids = array();
         for ($i = 0, $l = count($arCalendars); $i < $l; $i++) {
             if (in_array($arCalendars[$i]['ID'], $arCalendarIds)) {
                 $ids[] = $arCalendars[$i]['ID'];
             }
         }
         $JS_arEvents = $this->GetEventsEx(array("bJS" => true, "arCalendarIds" => $ids, 'DontSaveOptions' => true, 'checkPermissions' => false));
         // Get events from superposed calendars *Favorite calendars*
         $JS_arSPEvents = $this->GetSuperposedEvents(array('bJS' => true));
     } else {
         $JS_arEvents = '[]';
         $JS_arSPEvents = '[]';
     }
     $APPLICATION->AddHeadString('<link rel="stylesheet" type="text/css" href="' . CUtil::GetAdditionalFileURL("/bitrix/js/intranet/event_calendar/event_calendar.css") . '">');
     // Build calendar base html and dialogs
     CEventCalendar::BuildCalendarSceleton(array('bExtranet' => $this->bExtranet, 'bReadOnly' => $this->bReadOnly, 'id' => $id, 'arCalendarsCount' => count($arCalendars), 'allowSuperpose' => $this->allowSuperpose, 'bSocNet' => $this->bSocNet, 'week_days' => $arStrWeek, 'ownerId' => $this->ownerId, 'ownerType' => $this->ownerType, 'component' => $component, 'bShowBanner' => $this->bShowBanner));
     // Append Javascript files and CSS files
     $this->AppendJS(array('JSConfig' => CUtil::PhpToJSObject($JSConfig), 'JS_arEvents' => $JS_arEvents, 'JS_arSPEvents' => $JS_arSPEvents));
 }
 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();";
 }
Beispiel #5
0
 public static function GetById($id)
 {
     $id = intval($id);
     if ($id <= 0) {
         throw new CDavArgumentNullException("id");
     }
     $dbResult = CDavConnection::GetList(array(), array("ID" => $id));
     if ($arResult = $dbResult->Fetch()) {
         return $arResult;
     }
     return null;
 }
Beispiel #6
0
 private static function InitCalDavParams(&$JSConfig)
 {
     global $USER;
     $JSConfig['bCalDAV'] = true;
     if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) {
         $serverName = SITE_SERVER_NAME;
     } else {
         $serverName = COption::GetOptionString("main", "server_name", $_SERVER["SERVER_NAME"]);
     }
     $JSConfig['caldav_link_all'] = (CMain::IsHTTPS() ? "https://" : "http://") . $serverName;
     $login = '';
     if (self::$type == 'user') {
         if (self::$ownerId == self::$userId) {
             $login = $USER->GetLogin();
         } else {
             $rsUser = CUser::GetByID(self::$ownerId);
             if ($arUser = $rsUser->Fetch()) {
                 $login = $arUser['LOGIN'];
             }
         }
         if (CCalendar::IsBitrix24()) {
             $JSConfig['caldav_link_one'] = "https://" . $_SERVER["SERVER_NAME"] . ":1443/bitrix/groupdav.php/" . SITE_ID . "/" . $login . "/calendar/#CALENDAR_ID#/";
         } else {
             $JSConfig['caldav_link_one'] = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER["SERVER_NAME"] . "/bitrix/groupdav.php/" . SITE_ID . "/" . $login . "/calendar/#CALENDAR_ID#/";
         }
     } else {
         if (self::$type == 'group') {
             if (CCalendar::IsBitrix24()) {
                 $JSConfig['caldav_link_one'] = "https://" . $_SERVER["SERVER_NAME"] . ":1443/bitrix/groupdav.php/" . SITE_ID . "/group-" . self::$ownerId . "/calendar/#CALENDAR_ID#/";
             } else {
                 $JSConfig['caldav_link_one'] = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER["SERVER_NAME"] . "/bitrix/groupdav.php/" . SITE_ID . "/group-" . self::$ownerId . "/calendar/#CALENDAR_ID#/";
             }
         }
     }
     if (self::$type == 'user') {
         $res = CDavConnection::GetList(array("ID" => "DESC"), array("ENTITY_TYPE" => "user", "ENTITY_ID" => self::$ownerId, "ACCOUNT_TYPE" => 'caldav'), false, false);
         $arConnections = array();
         while ($arCon = $res->Fetch()) {
             $arConnections[] = array('id' => $arCon['ID'], 'name' => $arCon['NAME'], 'link' => $arCon['SERVER'], 'user_name' => $arCon['SERVER_USERNAME'], 'last_result' => $arCon['LAST_RESULT'], 'sync_date' => $arCon['SYNCHRONIZED']);
         }
         $JSConfig['connections'] = $arConnections;
     }
 }