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 GetNearestEventsList($arParams)
 {
     if (!isset($arParams['userId'])) {
         global $USER;
         // Get current user id
         $curUserId = $USER->IsAuthorized() ? $USER->GetID() : 0;
     } else {
         $curUserId = intval($arParams['userId']);
     }
     if ($arParams['bCurUserList']) {
         if ($curUserId <= 0 || class_exists('CSocNetFeatures') && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $curUserId, "calendar")) {
             return 'inactive_feature';
         }
         // Get iblock id for users calendar from module-settings
         $iblockId = COption::GetOptionInt("intranet", 'iblock_calendar');
         // Get section id
         $sectionId = CEventCalendar::GetSectionIDByOwnerId($curUserId, "USER", $iblockId);
         // Expand filter
         $arFilterEx = array("CREATED_BY" => $curUserId, "SECTION_ID" => $sectionId, "INCLUDE_SUBSECTIONS" => "Y");
     } else {
         if (intVal($arParams['iblockSectionId']) > 0) {
             $arFilterEx = array("SECTION_ID" => $arParams['iblockSectionId'], "INCLUDE_SUBSECTIONS" => "Y");
         }
         $iblockId = $arParams['iblockId'];
     }
     // Check access
     $maxPerm = CIBlock::GetPermission($iblockId);
     $bAccess = $maxPerm >= 'R';
     if (CIBlock::GetPermission($iblockId) < 'R') {
         return 'access_denied';
     }
     $arSelect = array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME", "ACTIVE_FROM", "ACTIVE_TO", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "CREATED_BY", "PROPERTY_*");
     $arFilter = array("IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "CHECK_PERMISSIONS" => 'N', ">=DATE_ACTIVE_TO" => $arParams['fromLimit'], "<=DATE_ACTIVE_FROM" => $arParams['toLimit']);
     if (count($arFilterEx) > 0) {
         $arFilter = array_merge($arFilter, $arFilterEx);
     }
     $bCache = true;
     $arResult = false;
     if ($bCache) {
         $cache = new CPHPCache();
         $cachePath = 'event_calendar/events/' . $iblockId . '/';
         $cacheId = 'ne_' . serialize($arFilter);
         if (($tzOffset = CTimeZone::GetOffset()) != 0) {
             $cacheId .= "_" . $tzOffset;
         }
         $cacheTime = 36000000;
         if ($cache->InitCache($cacheTime, $cacheId, $cachePath)) {
             $res = $cache->GetVars();
             $arResult = $res['events'];
         }
     }
     if (!$bCache || $arResult === false) {
         $arSort = array('ACTIVE_FROM' => 'ASC');
         $rsElement = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
         $arResult = array();
         while ($obElement = $rsElement->GetNextElement()) {
             $arItem = $obElement->GetFields();
             $props = $obElement->GetProperties();
             $arItem["ACCESSIBILITY"] = isset($props['ACCESSIBILITY']['VALUE']) ? $props['ACCESSIBILITY']['VALUE'] : 'busy';
             $arItem["IMPORTANCE"] = isset($props['IMPORTANCE']['VALUE']) ? $props['IMPORTANCE']['VALUE'] : '';
             $arItem["PRIVATE"] = isset($props['PRIVATE']['VALUE']) ? $props['PRIVATE']['VALUE'] : '';
             if (isset($props['PARENT']) && $props['PARENT']['VALUE'] > 0) {
                 $status = strtoupper(isset($props['CONFIRMED']) ? $props['CONFIRMED']['VALUE_XML_ID'] : 'Q');
                 if ($status != 'Y' && $status != 'N') {
                     $status = 'Q';
                 }
                 $arItem['STATUS'] = $status;
             }
             $arItem["DISPLAY_ACTIVE_FROM"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_FROM"]));
             $arItem["DISPLAY_ACTIVE_TO"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_TO"]));
             $perType = isset($props['PERIOD_TYPE']['VALUE']) && $props['PERIOD_TYPE']['VALUE'] != 'NONE' ? strtoupper($props['PERIOD_TYPE']['VALUE']) : false;
             if ($perType) {
                 $count = isset($props['PERIOD_COUNT']['VALUE']) ? intval($props['PERIOD_COUNT']['VALUE']) : '';
                 $length = isset($props['EVENT_LENGTH']['VALUE']) ? intval($props['EVENT_LENGTH']['VALUE']) : '';
                 $additional = isset($props['PERIOD_ADDITIONAL']['VALUE']) ? $props['PERIOD_ADDITIONAL']['VALUE'] : '';
                 CEventCalendar::DisplayPeriodicEvent($arResult, array('arItem' => $arItem, 'perType' => $perType, 'count' => $count, 'length' => $length, 'additional' => $additional, 'fromLimit' => $arParams['fromLimit'], 'toLimit' => $arParams['toLimit']));
             } else {
                 CEventCalendar::HandleElement($arResult, $arItem);
             }
         }
         if ($bCache) {
             $cache->StartDataCache($cacheTime, $cacheId, $cachePath);
             $cache->EndDataCache(array("events" => $arResult));
         }
     }
     return $arResult;
 }
Ejemplo n.º 3
0
 public function Add($arParams)
 {
     global $USER;
     $res = null;
     $calendar_id = $arParams['calendar_id'];
     $calIblock = COption::GetOptionInt('intranet', 'iblock_calendar', null, $arParams['site_id']);
     $calIblockSection = CEventCalendar::GetSectionIDByOwnerId($USER->GetID(), 'USER', $calIblock);
     if (!$calendar_id) {
         $calendar_id = CUserOptions::GetOption('timeman', 'default_calendar', 0);
     }
     if ($calIblockSection > 0) {
         $arCalendars = CEventCalendar::GetCalendarList(array($calIblock, $calIblockSection, 0, 'USER'));
         if (count($arCalendars) == 1) {
             if ($calendar_id && $calendar_id != $arCalendars[0]['ID']) {
                 CUserOptions::DeleteOption('timeman', 'default_calendar');
             }
             $calendar_id = $arCalendars[0]['ID'];
         } else {
             $bCalendarFound = false;
             $arCalsList = array();
             foreach ($arCalendars as $cal) {
                 if ($cal['ID'] == $calendar_id) {
                     $bCalendarFound = true;
                     break;
                 }
                 $arCalsList[] = array('ID' => $cal['ID'], 'NAME' => $cal['NAME'], 'COLOR' => $cal['COLOR']);
             }
             if (!$bCalendarFound) {
                 $bReturnRes = true;
                 $res = array('error_id' => 'CHOOSE_CALENDAR', 'error' => array('TEXT' => GetMessage('TM_CALENDAR_CHOOSE'), 'CALENDARS' => $arCalsList));
             }
         }
     }
     if (!$bReturnRes) {
         if (!$calIblockSection) {
             $calIblockSection = 'none';
         }
         $today = CTimeMan::RemoveHoursTS(time());
         $data = array('DATE_FROM' => $today + CTimeMan::MakeShortTS($arParams['from']), 'DATE_TO' => $today + CTimeMan::MakeShortTS($arParams['to']), 'NAME' => $arParams['name'], 'ABSENCE' => $arParams['absence'] == 'Y');
         $obCalendar = new CEventCalendar();
         $obCalendar->Init(array('ownerType' => 'USER', 'ownerId' => $USER->GetID(), 'bOwner' => true, 'iblockId' => $calIblock, 'bCache' => false));
         $arPermissions = $obCalendar->GetPermissions(array('setProperties' => true));
         $arRes = array('iblockId' => $obCalendar->iblockId, 'ownerType' => $obCalendar->ownerType, 'ownerId' => $obCalendar->ownerId, 'bNew' => true, 'fullUrl' => $obCalendar->fullUrl, 'userId' => $obCalendar->userId, 'pathToUserCalendar' => $obCalendar->pathToUserCalendar, 'pathToGroupCalendar' => $obCalendar->pathToGroupCalendar, 'userIblockId' => $obCalendar->userIblockId, 'calendarId' => $calendar_id, 'sectionId' => $calIblockSection, 'dateFrom' => ConvertTimeStamp($data['DATE_FROM'], 'FULL'), 'dateTo' => ConvertTimeStamp($data['DATE_TO'], 'FULL'), 'name' => $data['NAME'], 'desc' => '', 'prop' => array('ACCESSIBILITY' => $data['ABSENCE'] ? 'absent' : 'busy'), 'notDisplayCalendar' => true);
         if ($GLOBALS['BX_TIMEMAN_RECENTLY_ADDED_EVENT_ID'] = $obCalendar->SaveEvent($arRes)) {
             if ($_REQUEST['cal_set_default'] == 'Y') {
                 CUserOptions::SetOption('timeman', 'default_calendar', $calendar_id);
             }
         }
     }
     return $res;
 }
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;
 }