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/classes/general/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/calendar/classes/general/calendar_planner.php
<?php

use Bitrix\Calendar\Core\Managers\Accessibility;
use Bitrix\Calendar\Rooms;
use Bitrix\Calendar\Integration\Bitrix24Manager;
use Bitrix\Calendar\Sharing\SharingUser;
use Bitrix\Calendar\Util;

class CCalendarPlanner
{
	public static function Init($config = [], $initialParams = false)
	{
		self::InitJsCore($config, $initialParams);
	}

	public static function InitJsCore($config = [], $initialParams = [])
	{
		global $APPLICATION;
		\Bitrix\Main\UI\Extension::load(['ajax', 'window', 'popup', 'access', 'date', 'viewer', 'socnetlogdest']);
		\Bitrix\Main\UI\Extension::load(['calendar.planner', 'ui.fonts.opensans']);

		// Config
		if (!$config['id'])
		{
			$config['id'] = (isset($config['id']) && $config['id'] <> '')
				? $config['id']
				: 'bx_calendar_planner'
				. mb_substr(uniqid(mt_rand(), true), 0, 4)
			;
		}

		$APPLICATION->AddHeadScript('/bitrix/js/calendar/planner.js');
		$APPLICATION->SetAdditionalCSS("/bitrix/js/calendar/planner.css");

		$mess_lang = \Bitrix\Main\Localization\Loc::loadLanguageFile(__FILE__);
		?>
		<div id="<?= htmlspecialcharsbx($config['id'])?>" class="calendar-planner-wrapper"></div>
		<script>
			BX.namespace('BX.Calendar');
			if(typeof BX.Calendar.PlannerManager === 'undefined')
			{
				BX.Calendar.PlannerManager = {
					planners: {},
					Get: function(id)
					{
						return BX.Calendar.PlannerManager.planners[id] || false;
					},
					Init: function(id, config, initialParams)
					{
						if (window.CalendarPlanner)
						{
							BX.Calendar.PlannerManager.planners[id] = new window.CalendarPlanner(config, initialParams);
						}
					}
				}
			}

			BX.message(<?=CUtil::PhpToJSObject($mess_lang, false);?>);
			BX.ready(function()
			{
				BX.Calendar.PlannerManager.Init(
					'<?= CUtil::JSEscape($config['id'])?>',
					<?=\Bitrix\Main\Web\Json::encode($config, false);?>,
					<?=\Bitrix\Main\Web\Json::encode($initialParams);?>
				);
			});
		</script>
		<?php
	}

	public static function prepareData($params = []): array
	{
		$parentId = (int)($params['parent_id'] ?? null);
		$entryId = (int)($params['entry_id'] ?? null);

		$skipEntryId = $parentId !== 0 ? $parentId : $entryId;
		$curUserId = (int)($params['user_id'] ?? null);
		$hostUserId = (int)($params['host_id'] ?? null);
		$skipFeatureCheck = $params['skipFeatureCheck'] ?? false;

		$isPlannerFeatureEnabled = $skipFeatureCheck || Bitrix24Manager::isPlannerFeatureEnabled();

		$skipEntryList = (isset($params['skipEntryList']) && is_array($params['skipEntryList']))
			? $params['skipEntryList']
			: [];

		$resourceIdList = [];
		$userIds = [];
		$users = [];
		$result = [
			'users' => [],
			'entries' => [],
			'accessibility' => []
		];

		if (isset($params['codes']) && is_array($params['codes']))
		{
			$params['codes'] = array_unique($params['codes']);
			$users = CCalendar::GetDestinationUsers($params['codes'], true);
		}

		$prevUsersId = (isset($params['prevUserList']) && is_array($params['prevUserList']))
			? array_unique(array_map('intval', $params['prevUserList']))
			: [];

		if (!empty($users))
		{
			foreach($users as $user)
			{
				if (!in_array((int)$user['USER_ID'], $prevUsersId, true))
				{
					$userIds[] = (int)$user['USER_ID'];
				}

				$status = (($hostUserId && $hostUserId === (int)$user['USER_ID'])
					|| (!$hostUserId && $curUserId === (int)$user['USER_ID']))
					? 'h'
					: '';

				$userSettings = \Bitrix\Calendar\UserSettings::get($user['USER_ID']);
				$result['entries'][] = [
					'type' => 'user',
					'id' => $user['USER_ID'],
					'name' => CCalendar::GetUserName($user),
					'status' => $status,
					'url' => CCalendar::GetUserUrl($user['USER_ID']),
					'avatar' => CCalendar::GetUserAvatarSrc($user),
					'strictStatus' => $userSettings['denyBusyInvitation'],
					'emailUser' => isset($user['EXTERNAL_AUTH_ID']) && ($user['EXTERNAL_AUTH_ID'] === 'email'),
					'sharingUser' => isset($user['EXTERNAL_AUTH_ID']) && ($user['EXTERNAL_AUTH_ID'] === SharingUser::EXTERNAL_AUTH_ID),
					'timezoneName' => CCalendar::GetUserTimezoneName((int)$user['USER_ID']),
					'isCollabUser' => Util::isCollabUser((int)$user['USER_ID']),
				];
			}
		}
		elseif(isset($params['entries']) && is_array($params['entries']))
		{
			foreach($params['entries'] as $userId)
			{
				$userIds[] = (int)$userId;
			}
		}

		if (isset($params['resources']) && is_array($params['resources']))
		{
			foreach($params['resources'] as $resource)
			{
				$resourceId = (int)$resource['id'];
				$resourceIdList[] = $resourceId;
				$resource['type'] = preg_replace("/[^a-zA-Z0-9_]/i", "", $resource['type']);
				$result['entries'][] = array(
					'type' => $resource['type'],
					'id' => $resourceId,
					'name' => $resource['name']
				);
				$result['accessibility'][$resourceId] = [];
			}
		}

		$from = $params['date_from'] ?? null;
		$to = $params['date_to'] ?? null;

		if (empty($from) || empty($to))
		{
			return $result;
		}

		$maxPlannerUsers = \CCalendar::GetMaxPlannerUsers();
		$dontLoadAccessibility = $maxPlannerUsers > 0 && count($userIds) > $maxPlannerUsers;
		if ($isPlannerFeatureEnabled && !$dontLoadAccessibility)
		{
			$accessibility = (new Accessibility())
				->setSkipEventId($skipEntryId)
				->getAccessibility($userIds, CCalendar::TimestampUTC($from), CCalendar::TimestampUTC($to))
			;

			$timezoneName = \CCalendar::GetUserTimezoneName(\CCalendar::GetUserId());
			foreach ($accessibility as $userId => $entries)
			{
				$result['accessibility'][$userId] = [];
				foreach ($entries as $entry)
				{
					if (isset($entry['id']) && in_array($entry['id'], $skipEntryList))
					{
						continue;
					}

					if ($entry['isFullDay'])
					{
						$dateFrom = $entry['from'];
						$dateTo = $entry['to'];
					}
					else
					{
						$dateFrom = Util::formatDateTimeTimestamp(CCalendar::TimestampUTC($entry['from']), $timezoneName);
						$dateTo = Util::formatDateTimeTimestamp(CCalendar::TimestampUTC($entry['to']), $timezoneName);
					}

					$result['accessibility'][$userId][] = [
						'name' => $entry['name'],
						'dateFrom' => $dateFrom,
						'dateTo' => $dateTo,
						'isFullDay' => $entry['isFullDay'],
						'isVacation' => $entry['isVacation'] ?? false,
					];
				}
			}
		}

		if (isset($params['location']))
		{
			$location = \Bitrix\Calendar\Rooms\Util::parseLocation($params['location']);
			$entryLocation = \Bitrix\Calendar\Rooms\Util::parseLocation($params['entryLocation'] ?? null);
			$roomEventId = $entryLocation['room_event_id'] ?? null;

			if ($roomEventId && !in_array($roomEventId, $skipEntryList))
			{
				$skipEntryList[] = $roomEventId;
			}

			if ($location['mrid'] ?? null)
			{
				$mrid = 'MR_' . $location['mrid'];
				$entry = [
					'type' => 'room',
					'id' => $mrid,
					'name' => 'meeting room'
				];

				$roomList = Rooms\IBlockMeetingRoom::getMeetingRoomList();
				foreach ($roomList as $room)
				{
					if ((int)$room['ID'] === (int)$location['mrid'])
					{
						$entry['name'] = $room['NAME'];
						$entry['url'] = $room['URL'];
						break;
					}
				}

				$result['entries'][] = $entry;
				$result['accessibility'][$mrid] = [];

				if ($isPlannerFeatureEnabled)
				{
					$meetingRoomRes = Rooms\IBlockMeetingRoom::getAccessibilityForMeetingRoom([
						'allowReserveMeeting' => true,
						'id' => $location['mrid'],
						'from' => $from,
						'to' => $to,
						'curEventId' => $roomEventId
					]);

					foreach ($meetingRoomRes as $entry)
					{
						if (!in_array($entry['ID'], $skipEntryList))
						{
							$result['accessibility'][$mrid][] = [
								'id' => $entry['ID'],
								'dateFrom' => $entry['DT_FROM'],
								'dateTo' => $entry['DT_TO']
							];
						}
					}
				}
			}
			elseif ($location['room_id'])
			{
				$roomId = 'room_' . $location['room_id'];
				$entry = [
					'type' => 'room',
					'id' => $roomId,
					'roomId' => $location['room_id'],
					'name' => 'meeting room'
				];

				$sectionList = Rooms\Manager::getRoomsList();
				foreach($sectionList as $room)
				{
					if ((int)$room['ID'] === (int)$location['room_id'])
					{
						$entry['name'] = $room['NAME'];
						break;
					}
				}

				$result['entries'][] = $entry;
				$result['accessibility'][$roomId] = [];

				if ($isPlannerFeatureEnabled)
				{
					$meetingRoomRes = Rooms\AccessibilityManager::getRoomAccessibility(
						[$location['room_id']],
						$from,
						$to
					);

					foreach ($meetingRoomRes as $entry)
					{
						if ((int)$entry['PARENT_ID'] === $skipEntryId || in_array((int)$entry['ID'], $skipEntryList))
						{
							continue;
						}

						$dateFrom = $entry['DATE_FROM'];
						if ($entry['DT_SKIP_TIME'] !== "Y")
						{
							$dateFrom = CCalendar::Date(
								CCalendar::Timestamp($entry['DATE_FROM']) - $entry['~USER_OFFSET_FROM']
							);
							$dateTo = CCalendar::Date(
								CCalendar::Timestamp($entry['DATE_TO']) - $entry['~USER_OFFSET_TO']
							);
						}
						else
						{
							$dateTo = CCalendar::Date(
								CCalendar::Timestamp($entry['DATE_TO']) + CCalendar::GetDayLen()
							);
						}

						$result['accessibility'][$roomId][] = [
							'id' => $entry['ID'],
							'name' => $entry['NAME'],
							'dateFrom' => $dateFrom,
							'dateTo' => $dateTo
						];
					}
				}
			}
		}

		if (!empty($resourceIdList) && $isPlannerFeatureEnabled)
		{
			$resEntries = CCalendarEvent::GetList(
				array(
					'arFilter' => array(
						"FROM_LIMIT" => $from,
						"TO_LIMIT" => $to,
						"CAL_TYPE" => 'resource',
						"ACTIVE_SECTION" => "Y",
						"SECTION" => $resourceIdList
					),
					'parseRecursion' => true,
					'setDefaultLimit' => false
				)
			);

			foreach($resEntries as $entry)
			{
				if (in_array($entry['ID'], $skipEntryList))
				{
					continue;
				}

				$dateFrom = $entry['DATE_FROM'];
				$dateTo = $entry['DATE_TO'];

				if ($entry['DT_SKIP_TIME'] !== "Y")
				{
					$dateFrom = CCalendar::Date(
						CCalendar::Timestamp($entry['DATE_FROM'])
						- $entry['~USER_OFFSET_FROM']
					);
					$dateTo = CCalendar::Date(
						CCalendar::Timestamp($entry['DATE_TO'])
						- $entry['~USER_OFFSET_TO']
					);
				}

				$result['accessibility'][$entry['SECT_ID']][] = array(
					'id' => $entry["ID"],
					'name' => $entry["NAME"],
					'dateFrom' => $dateFrom,
					'dateTo' => $dateTo
				);
			}
		}

		if (($params['initPullWatches'] ?? null) === true)
		{
			Util::initPlannerPullWatches(
				$curUserId,
				$userIds
			);
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit