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; }
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; }
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; }
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; }