Example #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;
 }
 public static function DoCheckCalDAVServer($scheme, $host = null, $port = null, $username = null, $password = null, $path = null)
 {
     if ($scheme . "!" == intval($scheme) . "!") {
         $scheme = intval($scheme);
         if ($scheme <= 0) {
             return false;
         }
         $arConnection = CDavConnection::GetById($scheme);
         if (!is_array($arConnection)) {
             return false;
         }
         $scheme = $arConnection["SERVER_SCHEME"];
         $host = $arConnection["SERVER_HOST"];
         $port = $arConnection["SERVER_PORT"];
         $username = $arConnection["SERVER_USERNAME"];
         $password = $arConnection["SERVER_PASSWORD"];
         $path = $arConnection["SERVER_PATH"];
     }
     $client = new CDavGroupdavClientCalendar($scheme, $host, $port, $username, $password);
     if (CDav::UseProxy()) {
         $arProxy = CDav::GetProxySettings();
         $client->SetProxy($arProxy["PROXY_SCHEME"], $arProxy["PROXY_HOST"], $arProxy["PROXY_PORT"], $arProxy["PROXY_USERNAME"], $arProxy["PROXY_PASSWORD"]);
     }
     return $client->CheckWebdavServer($path);
 }
Example #4
0
    function Request($action)
    {
        global $APPLICATION;
        $sectionId = $_REQUEST['section_id'] == 'none' ? 'none' : intVal($_REQUEST['section_id']);
        CUtil::JSPostUnEscape();
        // Export calendar
        if ($action == 'export') {
            // We don't need to check access  couse we will check security SIGN from the URL
            $bCheck = $_GET['check'] == 'Y';
            $calendarId = $_GET['calendar_id'];
            if ($bCheck) {
                $GLOBALS['APPLICATION']->RestartBuffer();
                if ($this->CheckSign($_GET['sign'], intVal($_GET['user_id']), $calendarId > 0 ? $calendarId : 'superposed_calendars')) {
                    echo 'BEGIN:VCALENDAR';
                }
                die;
            }
            if (!isset($calendarId) || intVal($calendarId) <= 0) {
                $this->ReturnICal_SP(array('userId' => intVal($_GET['user_id']), 'sign' => $_GET['sign']));
            } else {
                $this->ReturnICal(array('calendarId' => intVal($calendarId), 'userId' => intVal($_GET['user_id']), 'sign' => $_GET['sign'], 'ownerType' => $_GET['owner_type'], 'ownerId' => $_GET['owner_id'], 'iblockId' => $_GET['ibl']));
            }
        } else {
            // First of all - CHECK ACCESS
            $this->GetPermissions(array('userId' => $curUserId));
            if (!$this->bAccess) {
                return $APPLICATION->ThrowException(GetMessage("EC_ACCESS_DENIED"));
            }
            $APPLICATION->RestartBuffer();
            if (!check_bitrix_sessid()) {
                echo '<!--BX_EC_DUBLICATE_ACTION_REQUEST' . bitrix_sessid() . '-->';
                return;
            }
            switch ($action) {
                // * * * * * Add and Edit event * * * * *
                case 'add':
                case 'edit':
                    if ($this->bReadOnly) {
                        return $this->ThrowError(GetMessage('EC_ACCESS_DENIED'));
                    }
                    $id = intVal($_POST['id']);
                    // If other calendar was selected for event
                    if ($_POST['b_recreate'] == 'Y' && intVal($_POST['old_calendar'])) {
                        $old_id = $id;
                        $id = 0;
                        $action = 'add';
                    }
                    $from_ts = MakeTimeStamp($_POST['from'], getTSFormat());
                    $to_ts = MakeTimeStamp($_POST['to'], getTSFormat());
                    $arGuests = isset($_POST['guest']) ? $_POST['guest'] : false;
                    $bPeriodic = isset($_POST['per_type']) && $_POST['per_type'] != 'none';
                    if ($bPeriodic) {
                        $per_type = trim($_POST['per_type']);
                        $per_count = intVal($_POST['per_count']);
                        $per_from_ts = MakeTimeStamp($_POST['per_from'], getTSFormat());
                        if ($per_from_ts < $from_ts) {
                            $per_from_ts = mktime(date("H", $from_ts), date("i", $from_ts), date("s", $from_ts), date("m", $per_from_ts), date("d", $per_from_ts), date("Y", $per_from_ts));
                        } else {
                            $per_from_ts = $from_ts;
                        }
                        $per_from = date(getDateFormat(), $per_from_ts);
                        $per_ts = $_POST['per_to'] == 'no_limit' ? 2145938400 : MakeTimeStamp($_POST['per_to'], getTSFormat());
                        $per_to = date(getDateFormat(), $per_ts);
                        $per_week_days = $per_type == 'weekly' ? trim($_POST['per_week_days']) : '';
                        $per_len = intVal($to_ts - $from_ts);
                        $from = $per_from;
                        $to = $per_to;
                        $PROP = array('PERIOD_TYPE' => strtoupper($per_type), 'PERIOD_COUNT' => $per_count, 'EVENT_LENGTH' => $per_len, 'PERIOD_ADDITIONAL' => $per_week_days);
                    } else {
                        $from = date(getDateFormat(), $from_ts);
                        $to = date(getDateFormat(), $to_ts);
                        $PROP = array('PERIOD_TYPE' => 'NONE');
                    }
                    if ($_POST['rem'] == 'Y' && floatval($_POST['rem_count']) > 0 && in_array($_POST['rem_type'], array('min', 'hour', 'day'))) {
                        $arRem = array('count' => floatval($_POST['rem_count']), 'type' => $_POST['rem_type']);
                    } else {
                        $arRem = false;
                    }
                    $PROP['ACCESSIBILITY'] = $_POST['accessibility'] && in_array($_POST['accessibility'], array('quest', 'free', 'absent')) ? $_POST['accessibility'] : 'busy';
                    $PROP['IMPORTANCE'] = $_POST['importance'] && in_array($_POST['importance'], array('high', 'low')) ? $_POST['importance'] : 'normal';
                    $PROP['PRIVATE'] = $_POST['private_event'] == true ? $_POST['private_event'] : false;
                    if (isset($_POST['host']) && intVal($_POST['host']) > 0) {
                        $PROP['PARENT'] = intVal($_POST['host']);
                    }
                    $isMeeting = !!$_POST['is_meeting'];
                    $arParams = array('iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'sectionId' => $sectionId, 'calendarId' => $_POST['calendar'], 'bNew' => $action == 'add', 'id' => $id, 'name' => trim($_POST['name']), 'desc' => trim($_POST['desc']), 'dateFrom' => cutZeroTime($from), 'dateTo' => cutZeroTime($to), 'isMeeting' => $isMeeting, 'prop' => $PROP, 'remind' => $arRem, 'fullUrl' => $this->fullUrl, 'userId' => $this->userId, 'pathToUserCalendar' => $this->pathToUserCalendar, 'pathToGroupCalendar' => $this->pathToGroupCalendar, 'userIblockId' => $this->userIblockId, 'location' => array('old' => trim($_POST['location_old']), 'new' => trim($_POST['location_new']), 'change' => $_POST['location_change'] == 'Y'), 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'RMPath' => $this->RMPath, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting, 'VMPath' => $this->VMPath, 'VMPathDetail' => $this->VMPathDetail);
                    if ($isMeeting) {
                        $arParams['guests'] = $arGuests;
                        $arParams['meetingText'] = trim($_POST['meeting_text']);
                        $arParams['setSpecialNotes'] = !!$_POST['setSpecialNotes'];
                        if (isset($_POST['status'])) {
                            $arParams['status'] = $_POST['status'];
                        }
                        $arParams['reinviteParamsList'] = $this->reinviteParamsList;
                    }
                    $eventId = $this->SaveEvent($arParams);
                    // We successfully create new event and have to delete old
                    if (is_int($eventId) && $eventId > 0 && $_POST['b_recreate'] == 'Y' && intVal($_POST['old_calendar'])) {
                        // delete original event
                        $res = CECEvent::Delete(array('id' => $old_id, 'iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'userId' => $this->userId, 'pathToUserCalendar' => $this->pathToUserCalendar, 'pathToGroupCalendar' => $this->pathToGroupCalendar, 'userIblockId' => $this->userIblockId, 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting));
                        if ($res !== true) {
                            return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_EVENT_DEL_ERROR'));
                        }
                    }
                    break;
                    // * * * * * Delete event * * * * *
                // * * * * * Delete event * * * * *
                case 'delete':
                    if ($this->bReadOnly) {
                        return $this->ThrowError(GetMessage('EC_ACCESS_DENIED'));
                    }
                    $res = CECEvent::Delete(array('id' => intVal($_POST['id']), 'iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'userId' => $this->userId, 'pathToUserCalendar' => $this->pathToUserCalendar, 'pathToGroupCalendar' => $this->pathToGroupCalendar, 'userIblockId' => $this->userIblockId, 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting));
                    if ($res !== true) {
                        return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_EVENT_DEL_ERROR'));
                    }
                    ?>
<script>window._bx_result = true;</script><?php 
                    $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/');
                    break;
                    // * * * * * Load events for some time limits * * * * *
                // * * * * * Load events for some time limits * * * * *
                case 'load_events':
                    $this->SetLoadLimits(intVal($_POST['month']), intVal($_POST['year']));
                    $cl = $_POST['usecl'] == 'Y' && !isset($_POST['cl']) ? array() : $_POST['cl'];
                    $this->arCalendarIds = $cl;
                    $this->arHiddenCals_ = is_array($_POST['hcl']) ? $_POST['hcl'] : array();
                    $ev = $this->GetEventsEx(array("bJS" => true, 'bCheckSPEvents' => true));
                    if ($this->allowSuperpose && !$this->bListMode) {
                        $this->HandleSuperpose($this->arSPIblIds);
                        $spev = $this->GetSuperposedEvents(array('bJS' => true));
                        if ($spev != '[]') {
                            if ($ev == '[]') {
                                $ev = $spev;
                            } else {
                                $ev = substr($ev, 0, -1) . ',' . substr($spev, 1);
                            }
                        }
                    }
                    ?>
<script>window._bx_ar_events = <?php 
                    echo $ev;
                    ?>
;</script><?php 
                    break;
                    // * * * * * Edit calendar * * * * *
                // * * * * * Edit calendar * * * * *
                case 'calendar_edit':
                    if ($this->bReadOnly) {
                        return $this->ThrowError(GetMessage('EC_ACCESS_DENIED'));
                    }
                    $id = intVal($_POST['id']);
                    $bNew = !isset($id) || $id == 0;
                    $arFields = array('ID' => $id, 'NAME' => trim($_POST['name']), 'DESCRIPTION' => trim($_POST['desc']), 'COLOR' => colorReplace($_POST['color']), 'EXPORT' => isset($_POST['export']) && $_POST['export'] == 'Y', 'EXPORT_SET' => isset($_POST['exp_set']) && in_array($_POST['exp_set'], array('all', '3_9', '6_12')) ? $_POST['exp_set'] : 'all', 'PRIVATE_STATUS' => isset($_POST['private_status']) && in_array($_POST['private_status'], array('private', 'time', 'title')) ? $_POST['private_status'] : 'full');
                    if ($bNew) {
                        $arFields['IS_EXCHANGE'] = $_POST['is_exchange'] == 'Y';
                    }
                    $id = $this->SaveCalendar(array('sectionId' => $sectionId, 'arFields' => $arFields));
                    if (intVal($id) <= 0) {
                        return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_CALENDAR_SAVE_ERROR'));
                    }
                    $export_link = $arFields['EXPORT'] ? $this->GetExportLink($id, $this->ownerType, $this->ownerId, $this->iblockId) : '';
                    $outlookJs = CECCalendar::GetOutlookLink(array('ID' => $id, 'PREFIX' => $this->GetOwnerName(array('iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId))));
                    if ($this->ownerType == 'USER' && $_POST['is_def_meet_calendar'] == 'Y') {
                        $SET = $this->GetUserSettings();
                        $SET['MeetCalId'] = $id;
                        $this->SetUserSettings($SET);
                    }
                    ?>
<script>window._bx_calendar = {ID: <?php 
                    echo intVal($id);
                    ?>
, EXPORT_LINK: '<?php 
                    echo $export_link;
                    ?>
',  EXPORT: '<?php 
                    echo $arFields['EXPORT'];
                    ?>
',  EXPORT_SET: '<?php 
                    echo $arFields['EXPORT_SET'];
                    ?>
', OUTLOOK_JS: '<?php 
                    echo CUtil::JSEscape($outlookJs);
                    ?>
'};</script><?php 
                    // Clear cache
                    $this->ClearCache($this->cachePath . $this->iblockId . "/calendars/" . ($this->bOwner ? $this->ownerId : 0) . "/");
                    $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/');
                    if ($this->ownerType == 'GROUP') {
                        $this->ClearCache($this->cachePath . 'sp_groups/');
                    } elseif ($this->ownerType == 'USER') {
                        $this->ClearCache($this->cachePath . 'sp_user/');
                    } else {
                        $this->ClearCache($this->cachePath . 'sp_common/');
                    }
                    break;
                    // * * * * * Delete calendar * * * * *
                // * * * * * Delete calendar * * * * *
                case 'calendar_delete':
                    if ($this->bReadOnly) {
                        return $this->ThrowError(GetMessage('EC_ACCESS_DENIED'));
                    }
                    $id = intVal($_POST['id']);
                    if (!$this->CheckCalendar(array('calendarId' => $id, 'sectionId' => $sectionId))) {
                        return $this->ThrowError(GetMessage('EC_CALENDAR_DEL_ERROR') . ' ' . GetMessage('EC_CAL_INCORRECT_ERROR'));
                    }
                    $res = $this->DeleteCalendar($id);
                    if ($res !== true) {
                        return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_CALENDAR_DEL_ERROR'));
                    }
                    // Clear cache
                    $this->ClearCache($this->cachePath . $this->iblockId . "/calendars/" . ($this->bOwner ? $this->ownerId : 0) . "/");
                    if ($this->ownerType == 'GROUP') {
                        $this->ClearCache($this->cachePath . 'sp_groups/');
                    } elseif ($this->ownerType == 'USER') {
                        $this->ClearCache($this->cachePath . 'sp_user/');
                    } else {
                        $this->ClearCache($this->cachePath . 'sp_common/');
                    }
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Append superposed calendar * * * * *
                // * * * * * Append superposed calendar * * * * *
                case 'spcal_disp_save':
                    $spcl = is_array($_POST['spcl']) ? $_POST['spcl'] : array();
                    if (!$this->SaveDisplayedSPCalendars($spcl)) {
                        return $this->ThrowError('Error! Cant save displayed superposed calendars');
                    }
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Hide superposed calendar * * * * *
                // * * * * * Hide superposed calendar * * * * *
                case 'spcal_hide':
                    $this->HideSPCalendar(intVal($_POST['id']));
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Return info about user, and user calendars * * * * *
                // * * * * * Return info about user, and user calendars * * * * *
                case 'spcal_user_cals':
                    $name = trim($_POST['name']);
                    if ($res = $this->HandleSPUserCals($name)) {
                        ?>
<script>window._bx_result = <?php 
                        echo CUtil::PhpToJSObject($res);
                        ?>
;</script><?php 
                    } else {
                        ?>
<script>window._bx_result = [];</script><?php 
                    }
                    break;
                    // * * * * * Return info about user, and user calendars * * * * *
                // * * * * * Return info about user, and user calendars * * * * *
                case 'spcal_del_user':
                    if (!$this->DeleteTrackingUser(intVal($_POST['id']))) {
                        return $this->ThrowError('Error! Cant delete tracking user!');
                    }
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Delete all tracking users * * * * *
                // * * * * * Delete all tracking users * * * * *
                case 'spcal_del_all_user':
                    $this->DeleteTrackingUser();
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Add calendar to Superposed * * * * *
                // * * * * * Add calendar to Superposed * * * * *
                case 'add_cal2sp':
                    if (!$this->AddCalendar2SP()) {
                        return $this->ThrowError('Error! Cant add calendar');
                    }
                    $this->ClearCache($this->cachePath . 'sp_handle/' . $this->curUserId % 1000 . "/");
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Save user settings * * * * *
                // * * * * * Save user settings * * * * *
                case 'set_settings':
                    if (isset($_POST['clear_all']) && $_POST['clear_all'] == true) {
                        // Del user options
                        $res = $this->SetUserSettings(false);
                        ?>
<script>window._bx_result = <?php 
                        echo CUtil::PhpToJSObject($res);
                        ?>
;</script><?php 
                    } else {
                        $Set = array('tab_id' => $_POST['tab_id'], 'cal_sec' => $_POST['cal_sec'], 'sp_cal_sec' => $_POST['sp_cal_sec'], 'planner_scale' => isset($_POST['planner_scale']) ? intVal($_POST['planner_scale']) : false, 'planner_width' => isset($_POST['planner_width']) ? intVal($_POST['planner_width']) : false, 'planner_height' => isset($_POST['planner_height']) ? intVal($_POST['planner_height']) : false);
                        if (isset($_POST['meet_cal_id'])) {
                            $Set['MeetCalId'] = intVal($_POST['meet_cal_id']);
                        }
                        $Set['blink'] = $_POST['blink'] !== 'false';
                        if (isset($_POST['show_ban'])) {
                            $Set['ShowBanner'] = (bool) $_POST['show_ban'];
                        }
                        $this->SetUserSettings($Set);
                    }
                    break;
                    // * * * * * Find guests for event by name * * * * *
                // * * * * * Find guests for event by name * * * * *
                case 'get_guests':
                    if (isset($_POST['from'])) {
                        $from = date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat()));
                        $to = isset($_POST['to']) ? date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())) : $from;
                    } else {
                        $from = false;
                        $to = false;
                    }
                    $bAddCurUser = false;
                    $res = $this->HandleUserSearch(trim($_POST['name']), $from, $to, false, $_POST['event_id'], $bAddCurUser);
                    ?>
<script>window._bx_result = <?php 
                    echo CUtil::PhpToJSObject($res);
                    ?>
;<?php 
                    if ($bAddCurUser) {
                        ?>
window._bx_add_cur_user = true;<?php 
                    }
                    ?>
</script><?php 
                    break;
                    // * * * * * Confirm user part in event * * * * *
                // * * * * * Confirm user part in event * * * * *
                case 'confirm_event':
                    $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/');
                    $this->ConfirmEvent(array('id' => intVal($_POST['id'])));
                    ?>
<script>window._bx_result = true;</script><?php 
                    break;
                    // * * * * * Check users accessibility * * * * *
                // * * * * * Check users accessibility * * * * *
                case 'check_guests':
                    $res = $this->CheckGuestsAccessibility(array('arGuests' => $_POST['guests'], 'from' => $_POST['from'], 'to' => $_POST['to'], 'eventId' => $_POST['event_id']));
                    ?>
<script>window._bx_result = <?php 
                    echo CUtil::PhpToJSObject($res);
                    ?>
;</script><?php 
                    break;
                    // * * * * * Get list of group members * * * * *
                // * * * * * Get list of group members * * * * *
                case 'get_group_members':
                    if ($this->ownerType == 'GROUP') {
                        if (isset($_POST['from'])) {
                            $from = date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat()));
                            $to = isset($_POST['to']) ? date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())) : $from;
                        } else {
                            $from = false;
                            $to = false;
                        }
                        $bAddCurUser = false;
                        $res = $this->GetGroupMembers(array('groupId' => $this->ownerId, 'from' => $from, 'to' => $to), $bAddCurUser);
                        ?>
<script>window._bx_result = <?php 
                        echo CUtil::PhpToJSObject($res);
                        ?>
;<?php 
                        if ($bAddCurUser) {
                            ?>
window._bx_add_cur_user = true;<?php 
                        }
                        ?>
</script><?php 
                    }
                    break;
                    // * * * * * Get intranet company structure * * * * *
                // * * * * * Get intranet company structure * * * * *
                case 'get_company_structure':
                    CEventCalendar::GetIntranetStructure();
                    break;
                    // * * * * * Get Guests Accessability * * * * *
                // * * * * * Get Guests Accessability * * * * *
                case 'get_guests_accessability':
                    $this->GetGuestsAccessability(array('users' => $_POST['users'], 'from' => date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())), 'to' => date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())), 'curEventId' => intVal($_POST['cur_event_id'])));
                    break;
                    // * * * * * Get meeting room accessibility * * * * *
                // * * * * * Get meeting room accessibility * * * * *
                case 'get_mr_accessability':
                    $this->GetMRAccessability(array('id' => intVal($_POST['id']), 'from' => date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())), 'to' => date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())), 'curEventId' => intVal($_POST['cur_event_id'])));
                    break;
                    // * * * * * Get meeting room accessibility * * * * *
                // * * * * * Get meeting room accessibility * * * * *
                case 'check_mr_vr_accessability':
                    $check = false;
                    $from = date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat()));
                    $to = date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat()));
                    $loc_old = $_POST['location_old'] ? CEventCalendar::ParseLocation(trim($_POST['location_old'])) : false;
                    $loc_new = CEventCalendar::ParseLocation(trim($_POST['location_new']));
                    $Params = array('dateFrom' => cutZeroTime($from), 'dateTo' => cutZeroTime($to), 'regularity' => isset($_POST['per_type']) && strlen($_POST['per_type']) > 0 ? strtoupper($_POST['per_type']) : 'NONE', 'members' => isset($_POST['guest']) ? $_POST['guest'] : false);
                    $tst = MakeTimeStamp($Params['dateTo']);
                    if (date("H:i", $tst) == '00:00') {
                        $Params['dateTo'] = CIBlockFormatProperties::DateFormat(getDateFormat(true), $tst + (23 * 60 + 59) * 60);
                    }
                    if (intVal($_POST['id']) > 0) {
                        $Params['ID'] = intVal($_POST['id']);
                    }
                    if ($loc_new['mrid'] == $this->VMiblockId) {
                        $Params['allowVideoMeeting'] = $this->allowVideoMeeting;
                        $Params['VMiblockId'] = $this->VMiblockId;
                        $check = CEventCalendar::CheckVR($Params);
                    } else {
                        $Params['allowResMeeting'] = $this->allowResMeeting;
                        $Params['RMiblockId'] = $this->RMiblockId;
                        $Params['mrid'] = $loc_new['mrid'];
                        $Params['mrevid_old'] = $loc_old ? $loc_old['mrevid'] : 0;
                        $check = CEventCalendar::CheckMR($Params);
                    }
                    ?>
<script>window._bx_result = <?php 
                    echo $check === true ? 'true' : '"' . $check . '"';
                    ?>
</script><?php 
                    break;
                case 'connections_edit':
                    if ($this->bReadOnly || $this->ownerType != 'USER') {
                        return $this->ThrowError(GetMessage('EC_ACCESS_DENIED'));
                    }
                    if (CEventCalendar::IsCalDAVEnabled()) {
                        $i = 0;
                        $l = count($_POST['connections']);
                        for ($i = 0; $i < $l; $i++) {
                            $con = $_POST['connections'][$i];
                            if ($con['id'] <= 0) {
                                if ($con['del'] == 'Y') {
                                    continue;
                                }
                                if (!CEventCalendar::CheckCalDavUrl($con['link'], $con['user_name'], $con['pass'])) {
                                    return CEventCalendar::ThrowError(GetMessage("EC_CALDAV_URL_ERROR"));
                                }
                                $id = CDavConnection::Add(array("ENTITY_TYPE" => 'user', "ENTITY_ID" => $this->ownerId, "ACCOUNT_TYPE" => 'caldav', "NAME" => $con['name'], "SERVER" => $con['link'], "SERVER_USERNAME" => $con['user_name'], "SERVER_PASSWORD" => $con['pass']));
                            } elseif ($con['del'] != 'Y') {
                                $arFields = array("NAME" => $con['name'], "SERVER" => $con['link'], "SERVER_USERNAME" => $con['user_name']);
                                // TODO
                                //if (!CEventCalendar::CheckCalDavUrl($con['link'], $con['user_name'], $con['pass']))
                                //	return CEventCalendar::ThrowError(GetMessage("EC_CALDAV_URL_ERROR", Array('#CALDAV_URL#' => $con['link'])));
                                if ($con['pass'] !== 'bxec_not_modify_pass') {
                                    $arFields["SERVER_PASSWORD"] = $con['pass'];
                                }
                                CDavConnection::Update(intVal($con['id']), $arFields);
                            } else {
                                CDavConnection::Delete(intVal($con['id']));
                                $db_res = CUserTypeEntity::GetList(array('ID' => 'ASC'), array("ENTITY_ID" => "IBLOCK_" . $this->iblockId . "_SECTION", "FIELD_NAME" => "UF_BXDAVEX_CDAV_COL"));
                                if ($db_res && ($r = $db_res->GetNext())) {
                                    $arSelectFields = array("IBLOCK_ID", "ID", "IBLOCK_SECTION_ID", "UF_BXDAVEX_CDAV_COL");
                                    $rsData = CIBlockSection::GetList(array('ID' => 'ASC'), array("IBLOCK_ID" => $this->iblockId, "CHECK_PERMISSIONS" => 'N', "UF_BXDAVEX_CDAV_COL" => intVal($con['id']), "CREATED_BY" => $this->ownerId, "SECTION_ID" => $this->GetSectionIDByOwnerId($this->ownerId, 'USER', $this->iblockId)), false, $arSelectFields);
                                    while ($arRes = $rsData->Fetch()) {
                                        if ($con['del_calendars'] == 'Y') {
                                            CIBlockSection::Delete($arRes['ID']);
                                        } else {
                                            $GLOBALS["USER_FIELD_MANAGER"]->Update("IBLOCK_" . $this->iblockId . "_SECTION", $arRes['ID'], array("UF_BXDAVEX_CDAV_COL" => ""));
                                        }
                                    }
                                }
                            }
                        }
                        if ($err = $APPLICATION->GetException()) {
                            CEventCalendar::ThrowError($err->GetString());
                        } else {
                            // Manually synchronize calendars
                            CDavGroupdavClientCalendar::DataSync("user", $this->ownerId);
                            // Clear cache
                            $this->ClearCache($this->cachePath . $this->iblockId . "/calendars/" . ($this->bOwner ? $this->ownerId : 0) . "/");
                            $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/');
                            if ($this->ownerType == 'GROUP') {
                                $this->ClearCache($this->cachePath . 'sp_groups/');
                            } elseif ($this->ownerType == 'USER') {
                                $this->ClearCache($this->cachePath . 'sp_user/');
                            } else {
                                $this->ClearCache($this->cachePath . 'sp_common/');
                            }
                        }
                    }
                    break;
                case 'exchange_sync':
                    if ($this->ownerType == 'USER' && CEventCalendar::IsExchangeEnabled()) {
                        $error = "";
                        $res = CDavExchangeCalendar::DoDataSync($this->ownerId, $error);
                        if ($res === true) {
                            ?>
							<script>window._bx_result_sync = true;</script>
						<?php 
                        } elseif ($res === false) {
                            ?>
							<script>window._bx_result_sync = false;</script>
						<?php 
                        } else {
                            CEventCalendar::ThrowError($error);
                        }
                    }
                    break;
            }
            if ($this->ownerType == 'GROUP' && $action != 'load_events' && class_exists('CSocNetGroup')) {
                CSocNetGroup::SetLastActivity($this->ownerId);
            }
        }
        return true;
    }
Example #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;
 }