• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/controller/calendareventviewform.php
  • Класс: BitrixCalendarControllerCalendarEventViewForm
  • Вызов: CalendarEventViewForm::getCalendarViewSliderParamsAction
public function getCalendarViewSliderParamsAction(int $entryId, string $dateFrom, int $timezoneOffset = 0): array
{
	$responseParams = [];
	$userId = CCalendar::GetCurUserId();

	if ($entryId)
	{
		$entry = CCalendarEvent::getEventForViewInterface($entryId, [
			'eventDate' => $dateFrom,
			'timezoneOffset' => $timezoneOffset,
			'userId' => $userId
		]);
	}
	else
	{
		$this->addError(new Error(Loc::getMessage('EC_EVENT_NOT_FOUND'), 'EVENT_NOT_FOUND_01'));
		return [];
	}

	if (!$entry || !$entry['ID'])
	{
		$this->addError(new Error(Loc::getMessage('EC_EVENT_NOT_FOUND'), 'EVENT_NOT_FOUND_02'));
		return [];
	}

	$responseParams['userId'] = $userId;
	$responseParams['userTimezone'] = CCalendar::GetUserTimezoneName($userId);
	$responseParams['entry'] = $entry;
	$responseParams['userIndex'] = CCalendarEvent::getUserIndex();
	$responseParams['userSettings'] = UserSettings::get($userId);
	$responseParams['plannerFeatureEnabled'] = Bitrix24Manager::isPlannerFeatureEnabled();
	$responseParams['entryUrl'] = CHTTP::urlAddParams(
		CCalendar::GetPath($entry['CAL_TYPE'], $entry['OWNER_ID'], true),
		[
			'EVENT_ID' => (int)$entry['ID'],
			'EVENT_DATE' => urlencode($entry['DATE_FROM'])
		]
	);
	$responseParams['dayOfWeekMonthFormat'] = stripslashes(
		BitrixMainContext::getCurrent()
			->getCulture()
			->getDayOfWeekMonthFormat()
	);

	$sections = CCalendarSect::GetList([
		'arFilter' => [
			'ID' => $entry['SECTION_ID'],
			'ACTIVE' => 'Y',
		],
		'checkPermissions' => false,
		'getPermissions' => true
	]);
	$responseParams['section'] = $sections[0] ?? null;

	if (!$responseParams['section'])
	{
		$this->addError(new Error(Loc::getMessage('EC_EVENT_NOT_FOUND'), 'SECTION_NOT_FOUND'));
		return [];
	}

	$params = array_merge([
		'event' => $entry,
		'type' => CCalendar::GetType(),
		'bIntranet' => CCalendar::IsIntranetEnabled(),
		'bSocNet' => CCalendar::IsSocNet(),
		'AVATAR_SIZE' => 21,
	], $responseParams);

	$userId = CCalendar::GetCurUserId();
	$event = $params['event'];

	$timezoneHint = $this->getTimezoneHint($userId, $event);

	$UF = CCalendarEvent::GetEventUserFields($event);

	if (isset($event['UF_CRM_CAL_EVENT']))
	{
		$event['UF_CRM_CAL_EVENT'] = $UF['UF_CRM_CAL_EVENT'];
		if (empty($event['UF_CRM_CAL_EVENT']['VALUE']))
		{
			$event['UF_CRM_CAL_EVENT'] = false;
		}
	}

	if (isset($event['UF_WEBDAV_CAL_EVENT']))
	{
		$event['UF_WEBDAV_CAL_EVENT'] = $UF['UF_WEBDAV_CAL_EVENT'];
		if(empty($event['UF_WEBDAV_CAL_EVENT']['VALUE']))
		{
			$event['UF_WEBDAV_CAL_EVENT'] = false;
		}
	}

	$event['REMIND'] = CCalendarReminder::GetTextReminders($event['REMIND'] ?? []);

	$event['permissions'] = CCalendarEvent::getEventPermissions($event, $userId);

	$curUserStatus = '';
	$userId = CCalendar::GetCurUserId();

	$viewComments = $event['permissions']['view_comments'];

	//get meeting host and attendees
	$meetingHost = false;
	if ($event['IS_MEETING'])
	{
		$userIndex = CCalendarEvent::getUserIndex();
		$attendees = ['y' => [], 'n' => [], 'q' => [], 'i' => []];

		if (isset($event['ATTENDEE_LIST']) && is_array($event['ATTENDEE_LIST']))
		{
			foreach ($event['ATTENDEE_LIST'] as $attendee)
			{
				if ($userId === (int)$attendee['id'])
				{
					$curUserStatus = $attendee['status'];
					$viewComments = true;
				}

				$status = (mb_strtolower($attendee['status']) === 'h' || empty($attendee['status']))
					? 'y'
					: $attendee['status']
				;
				$attendees[mb_strtolower($status)][] = $userIndex[$attendee['id']];
				if ($attendee['status'] === 'H')
				{
					$meetingHost = $userIndex[$attendee['id']];
					$meetingHost['ID'] = $attendee['id'];
				}
			}
		}
	}

	if (!$meetingHost && isset($event['MEETING_HOST']))
	{
		$meetingHost = CCalendar::GetUser($event['MEETING_HOST'], true);
	}

	if ($meetingHost && is_array($meetingHost))
	{
		$meetingHost['DISPLAY_NAME'] = CCalendar::GetUserName($meetingHost);
		if (!isset($meetingHost['AVATAR']))
		{
			$meetingHost['AVATAR'] = CCalendar::GetUserAvatarSrc($meetingHost);
		}
		$meetingHost['URL'] = CCalendar::GetUserUrl($meetingHost["ID"], ($params["PATH_TO_USER"] ?? ''));
	}

	$params['id'] = 'calendar_view_slider_'.mt_rand();
	$params['event'] = $event;
	$params['eventId'] = $event['ID'];
	$params['parentId'] = $event['PARENT_ID'];
	$params['name'] = $event['NAME'];
	$params['fromToHtml'] = $this->getFromToHtml($event);
	$params['timezoneHint'] = $timezoneHint;
	$params['isMeeting'] = $event['IS_MEETING'];
	$params['isRemind'] = $event['REMIND'];
	$params['isRrule'] = $event['RRULE'];
	$params['rruleDescription'] = CCalendarEvent::GetRRULEDescription($event, false);

	$params['avatarSize'] = 34;
	$params['attendees'] = $attendees ?? [];

	$params['curUserStatus'] = $curUserStatus;
	$params['meetingHost'] = $meetingHost;
	$params['meetingHostDisplayName'] = htmlspecialcharsbx($meetingHost['DISPLAY_NAME'] ?? null);
	$params['meetingHostWorkPosition'] = htmlspecialcharsbx($meetingHost['WORK_POSITION'] ?? null);

	$meetingCreator = $this->getMeetingCreator($event);
	$params['meetingCreatorUrl'] = $meetingCreator['URL'] ?? null;
	$params['meetingCreatorDisplayName'] = $meetingCreator['DISPLAY_NAME'] ?? null;

	$params['isHighImportance'] = $event['IMPORTANCE'] === 'high';
	$params['description'] = $event['~DESCRIPTION'] ?? null;

	$params['isWebdavEvent'] = $event['UF_WEBDAV_CAL_EVENT'] ?? null;
	$params['isCrmEvent'] = $event['UF_CRM_CAL_EVENT'] ?? null;

	$params['accessibility'] = $event['ACCESSIBILITY'];
	$params['isIntranetEnabled'] = CCalendar::IsIntranetEnabled();
	$params['isPrivate'] = $event['PRIVATE_EVENT'];

	$params['location'] = htmlspecialcharsbx(CCalendar::GetTextLocation($event['LOCATION'] ?? null));

	$params['canEditCalendar'] = $event['permissions']['edit'];

	$params['showComments'] = $viewComments;

	//views
	if (!empty($params['isWebdavEvent']))
	{
		$params['filesView'] = $this->getFilesView($event)->getContent();
	}
	if (!empty($params['isCrmEvent']))
	{
		$params['crmView'] = $this->getCrmView($event)->getContent();
	}

	$signedEvent = [
		'UF_CRM_CAL_EVENT' => $params['event']['UF_CRM_CAL_EVENT'] ?? null,
		'UF_WEBDAV_CAL_EVENT' => $params['event']['UF_WEBDAV_CAL_EVENT'] ?? null,
		'PARENT_ID' => $params['event']['PARENT_ID'],
		'ID' => $params['event']['ID'],
		'CREATED_BY' => $params['event']['CREATED_BY'],
	];

	if (
		isset($params['event']['RELATIONS']['COMMENT_XML_ID'])
		&& $params['event']['RELATIONS']['COMMENT_XML_ID']
	)
	{
		$signedEvent['ENTITY_XML_ID'] = $params['event']['RELATIONS']['COMMENT_XML_ID'];
	}
	else
	{
		$signedEvent['ENTITY_XML_ID'] = CCalendarEvent::GetEventCommentXmlId($params['event']);
	}

	$params['signedEvent'] = (new Signer())->sign(Json::encode($signedEvent));

	return $params;
}