Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 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;
         }
Esempio n. 4
0
    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;
    }
Esempio n. 5
0
 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();";
 }
Esempio n. 7
0
 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];
 }
Esempio n. 8
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;
 }
Esempio n. 9
0
 }
 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"]);
Esempio n. 10
0
<?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']));
Esempio n. 11
0
 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("&#10;", "&#13;"), "", $arData['Description']);
             $arData['Description'] = preg_replace("/<![^>]*>/", '', $arData['Description']);
             //$arData['Description'] = strip_tags($arData['Description']);
             $arData['Description'] = trim($arData['Description']);
             $arData['Location'] = trim($arData['Location']);
             $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);
 }
Esempio n. 12
0
// 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"]) {
Esempio n. 13
0
 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();
         }
     }
 }
Esempio n. 14
0
 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());
 }
Esempio n. 15
0
 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;
 }