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/im/lib/V2/Rest/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/im/lib/V2/Rest/RestAdapter.php
<?php

namespace Bitrix\Im\V2\Rest;

use Bitrix\Im\V2\TariffLimit\DateFilterable;
use Bitrix\Im\V2\TariffLimit\Limit;
use Bitrix\Im\V2\TariffLimit\TariffLimitPopupItem;

class RestAdapter implements RestConvertible
{
	/**
	 * @var array<RestConvertible>
	 */
	protected array $entities = [];
	protected ?PopupData $additionalPopupData = null;

	public function __construct(RestConvertible ...$entities)
	{
		$this->entities = $entities ?? [];
	}

	public function toRestFormat(array $options = []): array
	{
		$this->processTariffLimit();
		$popupData = new PopupData([]);

		foreach ($this->entities as $entity)
		{
			if ($entity instanceof PopupDataAggregatable)
			{
				$popupData->merge($entity->getPopupData($options['POPUP_DATA_EXCLUDE'] ?? []));
			}
		}

		if (isset($this->additionalPopupData))
		{
			$popupData->merge($this->additionalPopupData);
		}

		$rest = $popupData->toRestFormat($options);

		if (empty($rest))
		{
			if (count($this->entities) === 1)
			{
				return $this->entities[0]->toRestFormat($options);
			}
		}

		foreach ($this->entities as $entity)
		{
			$rest[$entity::getRestEntityName()] = $entity->toRestFormat($options);
		}

		return $rest;
	}

	public function setAdditionalPopupData(PopupData $popupData): self
	{
		$this->additionalPopupData = $popupData;

		return $this;
	}

	public function addAdditionalPopupData(PopupData $popupData): self
	{
		if (!isset($this->additionalPopupData))
		{
			$this->additionalPopupData = $popupData;
		}
		else
		{
			$this->additionalPopupData->merge($popupData);
		}

		return $this;
	}

	public function addEntities(RestConvertible ...$entities): self
	{
		foreach ($entities as $entity)
		{
			$this->entities[] = $entity;
		}

		return $this;
	}

	protected function processTariffLimit(): void
	{
		$limit = Limit::getInstance();
		$hasTariffLimit = false;
		$isLimitExceeded = false;

		foreach ($this->entities as $key => $entity)
		{
			if (!$entity instanceof DateFilterable)
			{
				continue;
			}

			$hasTariffLimit = true;

			if (!$limit->hasRestrictions())
			{
				break;
			}

			if (!$limit->shouldFilterByDate($entity))
			{
				continue;
			}

			$result = $entity->filterByDate($limit->getLimitDate());

			if ($result->wasFiltered())
			{
				$isLimitExceeded = true;
				$this->entities[$key] = $result->getResult();
			}
		}

		if ($hasTariffLimit)
		{
			$popupData = new PopupData([new TariffLimitPopupItem($isLimitExceeded)]);
			$this->addAdditionalPopupData($popupData);
		}
	}

	public static function getRestEntityName(): string
	{
		return 'result';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit