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