• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
  • Класс: CCalendarEvent
  • Вызов: CCalendarEvent::GetAccessibilityForUsers
static function GetAccessibilityForUsers($params = [])
{
	$curEventId = (int)$params['curEventId'];
	$curUserId = isset($params['userId']) ? (int)$params['userId'] : CCalendar::GetCurUserId();
	if (!is_array($params['users']) || !count($params['users']))
	{
		return [];
	}

	if (!isset($params['checkPermissions']))
	{
		$params['checkPermissions'] = true;
	}

	$users = [];
	$accessibility = [];
	foreach($params['users'] as $userId)
	{
		$userId = (int)$userId;
		if ($userId)
		{
			$users[] = $userId;
			$accessibility[$userId] = [];
		}
	}

	if (empty($users))
	{
		return [];
	}

	$events = self::GetList([
		'arFilter' => [
			"FROM_LIMIT" => $params['from'],
			"TO_LIMIT" => $params['to'],
			"CAL_TYPE" => 'user',
			"OWNER_ID" => $users,
			"ACTIVE_SECTION" => "Y"
		],
		'arSelect' => [
			'ID',
			'PARENT_ID',
			'OWNER_ID',
			'EVENT_TYPE',
			'NAME',
			'DATE_FROM',
			'DATE_TO',
			'TZ_FROM',
			'TZ_TO',
			'TZ_OFFSET_FROM',
			'TZ_OFFSET_TO',
			'DATE_FROM_TS_UTC',
			'DATE_TO_TS_UTC',
			'DT_SKIP_TIME',
			'ACCESSIBILITY',
			'IMPORTANCE',
			'RRULE',
			'EXDATE',
			'SECTION_ID',
			'CAL_TYPE',
			'MEETING_STATUS',
			'IS_MEETING',
			'DT_LENGTH',
			'PRIVATE_EVENT'
		],
		'parseRecursion' => true,
		'fetchAttendees' => false,
		'fetchSection' => true,
		'parseDescription' => false,
		'setDefaultLimit' => false,
		'checkPermissions' => $params['checkPermissions']
	]);

	foreach ($events as $event)
	{
		if ($curEventId && ((int)$event["ID"] === $curEventId || (int)$event["PARENT_ID"] === $curEventId))
		{
			continue;
		}
		if ($event["ACCESSIBILITY"] === 'free')
		{
			continue;
		}
		if ($event["IS_MEETING"] && $event["MEETING_STATUS"] === "N")
		{
			continue;
		}
		if (CCalendarSect::CheckGoogleVirtualSection($event['SECTION_DAV_XML_ID']))
		{
			continue;
		}

		$name = $event["NAME"];
		$accessController = new EventAccessController($curUserId);
		$eventModel = EventModel::createFromArray($event);

		if (
			($event['PRIVATE_EVENT'] && $event['CAL_TYPE'] === 'user' && $event['OWNER_ID'] !== $curUserId)
			|| !$accessController->check(ActionDictionary::ACTION_EVENT_VIEW_TITLE, $eventModel)
		)
		{
			$name = '['.GetMessage('EC_ACCESSIBILITY_'.mb_strtoupper($event['ACCESSIBILITY'])).']';
		}

		$accessibility[$event['OWNER_ID']][] = [
			"ID" => $event["ID"],
			"NAME" => $name,
			"DATE_FROM" => $event["DATE_FROM"],
			"DATE_TO" => $event["DATE_TO"],
			"DATE_FROM_TS_UTC" => $event["DATE_FROM_TS_UTC"],
			"DATE_TO_TS_UTC" => $event["DATE_TO_TS_UTC"],
			"~USER_OFFSET_FROM" => $event["~USER_OFFSET_FROM"],
			"~USER_OFFSET_TO" => $event["~USER_OFFSET_TO"],
			"DT_SKIP_TIME" => $event["DT_SKIP_TIME"],
			"TZ_FROM" => $event["TZ_FROM"],
			"TZ_TO" => $event["TZ_TO"],
			"ACCESSIBILITY" => $event["ACCESSIBILITY"],
			"IMPORTANCE" => $event["IMPORTANCE"],
			"EVENT_TYPE" => $event["EVENT_TYPE"]
		];
	}

	// foreach ($users as $userId)
	// {
	// 	$userSettings = UserSettings::get($userId);
	// 	$enableLunchTime = $userSettings['enableLunchTime'] === 'Y';
	//
	// 	if (!$enableLunchTime)
	// 	{
	// 		continue;
	// 	}
	//
	// 	$lunchStart = CCalendar::Timestamp("{$params['from']} {$userSettings['lunchStart']}");
	// 	$lunchEnd = CCalendar::Timestamp("{$params['from']} {$userSettings['lunchEnd']}");
	// 	$lunchLength = $lunchEnd - $lunchStart;
	//
	// 	$from = $lunchStart;
	// 	$to = CCalendar::Timestamp("{$params['to']} {$userSettings['lunchStart']}");
	// 	while ($from <= $to)
	// 	{
	// 		$dateFrom = (new DateTime())->setTimestamp($from);
	// 		$dateTo = (new DateTime())->setTimestamp($from + $lunchLength);
	// 		$lunchStart = DateTime::createFromPhp($dateFrom);
	// 		$lunchEnd = DateTime::createFromPhp($dateTo);
	// 		$eventTsFromUTC = SharingHelper::getEventTimestampUTC($lunchStart);
	// 		$eventTsToUTC = SharingHelper::getEventTimestampUTC($lunchEnd);
	// 		$accessibility[$userId][] = array(
	// 			'ID' => -1,
	// 			'NAME' => 'Lunch',
	// 			'DATE_FROM' => $lunchStart,
	// 			'DATE_TO' => $lunchEnd,
	// 			'TZ_FROM' => $dateFrom->getTimezone()->getName(),
	// 			'TZ_TO' => $dateTo->getTimezone()->getName(),
	// 			'DATE_FROM_TS_UTC' => $eventTsFromUTC,
	// 			'DATE_TO_TS_UTC' => $eventTsToUTC,
	// 			'~USER_OFFSET_FROM' => 0,
	// 			'~USER_OFFSET_TO' => 0,
	// 			'ACCESSIBILITY' => 'busy',
	// 			'IMPORTANCE' => 'normal',
	// 			'DT_SKIP_TIME' => false,
	// 		);
	//
	// 		$from += CCalendar::DAY_LENGTH;
	// 	}
	// }

	return $accessibility;
}