Ejemplo 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;
 }
Ejemplo n.º 2
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;
    }
Ejemplo n.º 3
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);
 }
Ejemplo n.º 4
0
 public static function AddEvent($MEETING_ID, $arFields, $arParams = array())
 {
     global $USER;
     $EventID = false;
     if (self::IsNewCalendar()) {
         $arEventFields = array('ID' => $arFields['EVENT_ID'], 'CAL_TYPE' => 'user', 'OWNER_ID' => $arFields['OWNER_ID'], 'DT_FROM' => $arFields['DATE_START'], 'DT_TO' => ConvertTimeStamp(MakeTimeStamp($arFields['DATE_START']) + $arFields['DURATION'], 'FULL'), 'NAME' => $arFields['TITLE'], 'DESCRIPTION' => CCalendar::ParseHTMLToBB($arFields['DESCRIPTION']), 'IS_MEETING' => true, 'MEETING_HOST' => $arFields['OWNER_ID'], 'MEETING' => array('HOST_NAME' => CCalendar::GetUserName($arFields['OWNER_ID'])), 'ATTENDEES' => array_keys($arFields['USERS']));
         if ($arFields['CURRENT_STATE'] == CMeeting::STATE_CLOSED) {
             $arEventFields['DT_TO'] = MakeTimeStamp($arFields['DATE_FINISH']) > MakeTimeStamp($arFields['DATE_START']) ? $arFields['DATE_FINISH'] : $arEventFields['DT_TO'];
         }
         $matches = array();
         if (preg_match('/^mr_([\\d]+)_([\\d]+)$/', $arFields["PLACE"], $matches)) {
             $arEventFields['LOCATION'] = 'ECMR_' . $matches[2];
             if ($arFields['EVENT_ID'] > 0) {
                 $arCurrentEvent = CCalendarEvent::GetById($arFields['EVENT_ID']);
                 if ($arCurrentEvent['LOCATION']) {
                     $res = CCalendar::ParseLocation($arCurrentEvent['LOCATION']);
                     if ($res['mrevid']) {
                         $arEventFields['LOCATION'] .= '_' . $res['mrevid'];
                     }
                 }
             }
         } else {
             $arEventFields['LOCATION'] = $arFields['PLACE'];
         }
         if (isset($arFields['REINVITE'])) {
             $arEventFields['MEETING']['REINVITE'] = $arFields['REINVITE'];
         } else {
             $arEventFields['MEETING']['REINVITE'] = false;
         }
         if (isset($arFields['NOTIFY'])) {
             $arEventFields['MEETING']['NOTIFY'] = $arFields['NOTIFY'];
         }
         $EventID = CCalendar::SaveEvent(array('arFields' => $arEventFields, 'userId' => $arFields['OWNER_ID'], 'autoDetectSection' => true, 'autoCreateSection' => true));
     } elseif (!$arFields['EVENT_ID']) {
         $iblockId = $arParams['CALENDAR_IBLOCK_ID'] ? $arParams['CALENDAR_IBLOCK_ID'] : COption::GetOptionInt('intranet', 'iblock_calendar', 0, SITE_ID);
         $obCalendar = new CEventCalendar();
         $obCalendar->Init(array('ownerType' => 'USER', 'ownerId' => $USER->GetID(), 'bOwner' => true, 'iblockId' => $iblockId, 'userIblockId' => $iblockId, 'bCache' => false, 'pathToUserCalendar' => '/company/personal/user/#user_id#/calendar/'));
         $guestCalendarId = false;
         $guestSection = $obCalendar->GetSectionIDByOwnerId($USER->GetID(), 'USER', $iblockId);
         $arGuestCalendars = array();
         if (!$guestSection) {
             $guestSection = $obCalendar->CreateSectionForOwner($USER->GetID(), "USER", $iblockId);
         }
         $arGuestCalendars = $obCalendar->GetCalendars(array('sectionId' => $guestSection, 'iblockId' => $iblockId, 'ownerType' => 'USER', 'ownerId' => $USER->GetID(), 'bOwner' => 1, 'forExport' => true, 'bOnlyID' => true));
         if (count($arGuestCalendars) > 0) {
             $arUserSet = $obCalendar->GetUserSettings(array('static' => false, 'userId' => $USER->GetID()));
             if ($arUserSet && isset($arUserSet['MeetCalId']) && in_array($arUserSet['MeetCalId'], $arGuestCalendars)) {
                 $guestCalendarId = intVal($arUserSet['MeetCalId']);
             } else {
                 $guestCalendarId = $arGuestCalendars[0];
             }
         }
         //$bGroup = $arParams['GROUP_ID'] > 0;
         $arPermissions = $obCalendar->GetPermissions(array('setProperties' => true));
         $arEventFields = array('iblockId' => $obCalendar->iblockId, 'ownerType' => $obCalendar->ownerType, 'ownerId' => $obCalendar->ownerId, 'RMiblockId' => self::__getRMIblockID(), 'allowResMeeting' => true, 'bNew' => true, 'fullUrl' => $obCalendar->fullUrl, 'userId' => $obCalendar->userId, 'pathToUserCalendar' => $obCalendar->pathToUserCalendar, 'pathToGroupCalendar' => $obCalendar->pathToGroupCalendar, 'userIblockId' => $obCalendar->iblockId, 'calendarId' => $guestCalendarId, 'sectionId' => $guestSection, 'dateFrom' => $arFields['DATE_START'], 'dateTo' => $arFields['DATE_FINISH'] ? $arFields['DATE_FINISH'] : ConvertTimeStamp(MakeTimeStamp($arFields['DATE_START']) + $arFields['DURATION'], 'FULL'), 'name' => $arFields['TITLE'], 'desc' => $arFields['DESCRIPTION'], 'prop' => array(), 'isMeeting' => true, 'guests' => array_keys($arFields['USERS']), 'notDisplayCalendar' => true);
         if ($EventID = $obCalendar->SaveEvent($arEventFields)) {
             CEventCalendar::ClearCache('/event_calendar/events/' . $arEventFields['iblockId'] . '/');
             CEventCalendar::ClearCache('/event_calendar/events/' . $arEventFields['userIblockId'] . '/');
         }
     }
     if ($EventID) {
         self::Update($MEETING_ID, array('EVENT_ID' => $EventID));
     }
     return $EventID;
 }