• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/event_calendar.php
  • Класс: CEventCalendar
  • Вызов: CEventCalendar::Show
public function Show($Params)
{
	global $APPLICATION, $USER, $EC_UserFields;

	$this->GetPermissions(array('userId' => $curUserId));
	if (!$this->bAccess)
		return $APPLICATION->ThrowException(GetMessage("EC_ACCESS_DENIED"));

	if ($this->reserveMeetingReadonlyMode)
		$this->bReadOnly = true;

	$arCalendars = $this->GetCalendarsEx(); // Cache inside
	$sectionId = $this->GetSectionId();

	// * * * HANDLE SUPERPOSED CALENDARS  * * *
	if ($this->allowSuperpose)
		$this->HandleSuperpose($this->arSPIblIds, true);

	$arCalendarIds = $this->GetUserActiveCalendars();

	// Show popup event at start
	if (isset($_GET['EVENT_ID']) && intval($_GET['EVENT_ID']) > 0)
	{
		$eventId = intval($_GET['EVENT_ID']);
		$bDelEvent = false;
		$rsEvent = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $this->iblockId, "ACTIVE" => "Y", "ID" => $eventId, "CHECK_PERMISSIONS" => "N"), false, false, array("ACTIVE_FROM", "IBLOCK_SECTION_ID", "CREATED_BY", "PROPERTY_CONFIRMED"));

		if ($ev = $rsEvent->Fetch())
		{
			if ($ev["CREATED_BY"] == $USER->GetId() && isset($_GET['CONFIRM']) && $ev["PROPERTY_CONFIRMED_ENUM_ID"] == $this->GetConfirmedID($this->iblockId, "Q"))
			{
				$this->GenEventDynClose($eventId);
				if ($_GET['CONFIRM'] == 'Y')
				{
					$this->ClearCache($this->cachePath.'events/'.$this->iblockId.'/');
					$this->ConfirmEvent(array('id' => $eventId, 'bCheckOwner' => false));
				}
				elseif ($_GET['CONFIRM'] == 'N')
				{
					$this->ClearCache($this->cachePath.'events/'.$this->iblockId.'/');

					CECEvent::Delete(array(
						'id' => $eventId,
						'iblockId' => $this->iblockId,
						'ownerType' => $this->ownerType,
						'ownerId' => $this->ownerId,
						'userId' => $USER->GetId(),
						'pathToUserCalendar' => $this->pathToUserCalendar,
						'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0,
						'allowResMeeting' => $this->allowResMeeting,

						'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0,
						'allowVideoMeeting' => $this->allowVideoMeeting,
					));
					$bDelEvent = true; // Event was deleted
					$eventId = false;
				}
			}
			elseif($ev["CREATED_BY"] == $USER->GetId() && isset($_GET['CLOSE_MESS']) && $_GET['CLOSE_MESS']=='Y')
			{
				$this->GenEventDynClose($eventId);
			}

			if (!$bDelEvent)
			{
				// If user turn off this calendar
				if (!in_array($ev["IBLOCK_SECTION_ID"], $arCalendarIds))
					$arCalendarIds[] = $ev["IBLOCK_SECTION_ID"];
				if (!isset($_GET['EVENT_DATE']))
					$date = $ev['ACTIVE_FROM'];
				else
					$date = $_GET['EVENT_DATE'];

				$ts = MakeTimeStamp($date, getTSFormat());
				$startup_event_date = date(getDateFormat(false), $ts);
				$init_month = date('m', $ts);
				$init_year = date('Y', $ts);
			}
		}
		$arStartupEvent = $eventId ? array('id' => $eventId, 'date' => $startup_event_date) : false;
	}
	else
	{
		$arStartupEvent = false;
	}

	if (!$init_month && !$init_year && $Params["initDate"] <> '' && mb_strpos($Params["initDate"], '.') !== false)
	{
		$ts = MakeTimeStamp($Params["initDate"], getTSFormat());
		$init_month = date('m', $ts);
		$init_year = date('Y', $ts);
	}

	if (!isset($init_month))
		$init_month = date("m");
	if (!isset($init_year))
		$init_year = date("Y");

	$id = 'EC'.rand().'_';

	if (!isset($Params['weekHolidays']))
		$Params['weekHolidays'] = array(5, 6);

	if ($Params["workTime"][0] <= 0)
		$Params["workTime"][0] = 9;
	if ($Params["workTime"][1] <= 0)
		$Params["workTime"][1] = 19;

	if (isset($Params['yearHolidays']))
	{
		$Params['yearHolidays'] = explode(',', $Params['yearHolidays']);
		array_walk($Params['yearHolidays'], 'trim_');
	}
	else
	{
		$Params['yearHolidays'] = array();
	}

	$arCalColors = Array('#CEE669','#E6A469','#98AEF6','#7DDEC2','#B592EC','#D98E85','#F6EA68','#DDBFEB');

	$arStrWeek = array(
		array(GetMessage('EC_MON_F'), GetMessage('EC_MON')),
		array(GetMessage('EC_TUE_F'), GetMessage('EC_TUE')),
		array(GetMessage('EC_WEN_F'), GetMessage('EC_WEN')),
		array(GetMessage('EC_THU_F'), GetMessage('EC_THU')),
		array(GetMessage('EC_FRI_F'), GetMessage('EC_FRI')),
		array(GetMessage('EC_SAT_F'), GetMessage('EC_SAT')),
		array(GetMessage('EC_SAN_F'), GetMessage('EC_SAN'))
	);

	$arStrMonth = array(GetMessage('EC_JAN'), GetMessage('EC_FEB'), GetMessage('EC_MAR'), GetMessage('EC_APR'), GetMessage('EC_MAY'), GetMessage('EC_JUN'), GetMessage('EC_JUL'), GetMessage('EC_AUG'), GetMessage('EC_SEP'), GetMessage('EC_OCT'), GetMessage('EC_NOV'), GetMessage('EC_DEC'));
	$arStrMonth_R = array(GetMessage('EC_JAN_R'), GetMessage('EC_FEB_R'), GetMessage('EC_MAR_R'), GetMessage('EC_APR_R'), GetMessage('EC_MAY_R'), GetMessage('EC_JUN_R'), GetMessage('EC_JUL_R'), GetMessage('EC_AUG_R'), GetMessage('EC_SEP_R'), GetMessage('EC_OCT_R'), GetMessage('EC_NOV_R'), GetMessage('EC_DEC_R'));

	$EC_UserFields = false;
	$this->CheckSectionProperties($this->iblockId, $this->ownerType);
	$UserSettings = $this->GetUserSettings();

	if (!$this->bReadOnly && count($arCalendars) > 0)
		$this->bShowBanner = true;

	if (isset($UserSettings['ShowBanner']) && !$UserSettings['ShowBanner'])
		$this->bShowBanner = false;

	$JSConfig = Array(
		'sessid' => bitrix_sessid(),
		'month' => $arStrMonth,
		'month_r' => $arStrMonth_R,
		'days' => $arStrWeek,
		'id' => $id,
		'week_holidays' => $Params['weekHolidays'],
		'year_holidays' => $Params['yearHolidays'],
		'iblockId' => $this->iblockId,
		'init_month' => $init_month,
		'init_year' => $init_year,
		'arCalColors' => $arCalColors,
		'bReadOnly' => $this->bReadOnly,
		'ownerType' => $this->ownerType,
		'ownerId' => $this->ownerId,
		'userId' => $this->userId,
		'userName' => $this->userName,
		'section_id' => $sectionId,
		'arCalendars' => $arCalendars,
		'arCalendarIds' => $arCalendarIds,
		'page' => $this->pageUrl,
		'fullUrl' => $this->fullUrl,
		'startupEvent' => $arStartupEvent,
		'bSuperpose' => $this->bSuperpose,
		'arSPCalendars' => $this->arSPCal,
		'arSPCalendarsShow' => $this->arSPCalShow,
		'superposeExportLink' => $this->superposeExportLink,
		'bSPUserCals' => $this->superposeUsersCals || $this->superposeCurUserCals,
		'SP' => $this->GetCurCalsSPParams(),
		'allowAdd2SP' => $this->allowAdd2SP,
		'workTime' => $Params["workTime"],
		'Settings' => $UserSettings,
		'bSocNet' => $this->bSocNet,
		'pathToUser' => $this->pathToUser,
		'dateFormat' => CSite::GetDateFormat("SHORT", SITE_ID),
		'meetingRooms' => $this->GetMeetingRoomList(),
		'allowResMeeting' => $this->allowResMeeting,
		'allowVideoMeeting' => $this->allowVideoMeeting,
		'bExtranet' => $this->bExtranet,
		'bShowBanner' => $this->bShowBanner,
		'planner_js_src' => '/bitrix/js/intranet/event_calendar/planner.js?v='.filemtime($_SERVER['DOCUMENT_ROOT']."/bitrix/js/intranet/event_calendar/planner.js"),
		'reserveMeetingReadonlyMode' => $this->reserveMeetingReadonlyMode
	);

	if ($this->reserveMeetingReadonlyMode)
		$JSConfig['pathToReserveNew'] = $this->pathToReserveNew;

	if (CEventCalendar::IsCalDAVEnabled() && $this->ownerType == "USER")
	{
		$JSConfig['bCalDAV'] = true;
		if (defined("SITE_SERVER_NAME") && SITE_SERVER_NAME <> '')
			$serverName = SITE_SERVER_NAME;
		else
			$serverName = COption::GetOptionString("main", "server_name", $_SERVER["SERVER_NAME"]);

		$JSConfig['caldav_link_all'] = (CMain::IsHTTPS() ? "https://" : "http://").$serverName;
		if ($this->ownerType == 'USER')
		{
			if ($this->ownerId == $this->userId)
			{
				$login = $USER->GetLogin();
			}
			else
			{
				$rsUser = CUser::GetByID($this->ownerId);
				if($arUser = $rsUser->Fetch())
					$login = $arUser['LOGIN'];
			}

			$JSConfig['caldav_link_one'] = (CMain::IsHTTPS() ? "https://" : "http://").$_SERVER["SERVER_NAME"]."/bitrix/groupdav.php/".SITE_ID."/".$login."/calendar/#CALENDAR_ID#/";
		}
		else if ($this->ownerType == 'GROUP')
		{
			$JSConfig['caldav_link_one'] = (CMain::IsHTTPS() ? "https://" : "http://").$_SERVER["SERVER_NAME"]."/bitrix/groupdav.php/".SITE_ID."/group-".$this->ownerId."/calendar/#CALENDAR_ID#/";
		}

		if ($this->ownerType == 'USER')
		{
			$res = CDavConnection::GetList(
				array("ID" => "DESC"),
				array("ENTITY_TYPE" => "user", "ENTITY_ID" => $this->ownerId, "ACCOUNT_TYPE" => 'caldav'),
				false,
				false
			);

			$arConnections = array();
			while($arCon = $res->Fetch())
			{
				$arConnections[] = array(
					'id' => $arCon['ID'],
					'name' => $arCon['NAME'],
					'link' => $arCon['SERVER'],
					'user_name' => $arCon['SERVER_USERNAME'],
					'last_result' => $arCon['LAST_RESULT'],
					'sync_date' => $arCon['SYNCHRONIZED']
				);
			}
			$JSConfig['connections'] = $arConnections;
		}
	}

	if (CEventCalendar::IsExchangeEnabled() && $this->ownerType == 'USER')
	{
		$JSConfig['bExchange'] = true;
	}

	$from_limit = date(getDateFormat(false), mktime(0, 0, 0, $init_month - 1, 20, $init_year));
	$to_limit = date(getDateFormat(false), mktime(0, 0, 0, $init_month + 1, 10, $init_year));
	$this->SetLoadLimits($init_month, $init_year);

	if ($sectionId !== false)
	{
		// Get events  (*Cache Inside)
		$ids = array();
		for ($i = 0, $l = count($arCalendars); $i < $l; $i++)
		{
			if (in_array($arCalendars[$i]['ID'], $arCalendarIds))
				$ids[] = $arCalendars[$i]['ID'];
		}
		$JS_arEvents = $this->GetEventsEx(array(
			"bJS" => true,
			"arCalendarIds" => $ids,
			'DontSaveOptions' => true,
			'checkPermissions' => false
		));

		// Get events from superposed calendars *Favorite calendars*
		$JS_arSPEvents = $this->GetSuperposedEvents(array('bJS' => true));
	}
	else
	{
		$JS_arEvents = '[]';
		$JS_arSPEvents = '[]';
	}

	$APPLICATION->AddHeadString('');

	// Build calendar base html and dialogs
	CEventCalendar::BuildCalendarSceleton(array(
		'bExtranet' => $this->bExtranet,
		'bReadOnly' => $this->bReadOnly,
		'id' => $id,
		'arCalendarsCount' => count($arCalendars),
		'allowSuperpose' => $this->allowSuperpose ,
		'bSocNet' => $this->bSocNet,
		'week_days' => $arStrWeek,
		'ownerId' => $this->ownerId,
		'ownerType' => $this->ownerType,
		'component' => $component,
		'bShowBanner' => $this->bShowBanner
	));

	// Append Javascript files and CSS files
	$this->AppendJS(array(
		'JSConfig' => CUtil::PhpToJSObject($JSConfig),
		'JS_arEvents' => $JS_arEvents,
		'JS_arSPEvents' => $JS_arSPEvents
	));
}