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/Link/File/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

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

namespace Bitrix\Im\V2\Link\File;

use Bitrix\Im\V2\Entity\File\FileError;
use Bitrix\Im\V2\Entity\File\FilePopupItem;
use Bitrix\Im\V2\Entity\User\UserPopupItem;
use Bitrix\Im\V2\Rest\PopupData;
use Bitrix\Main\ORM\Query\Query;
use Bitrix\Main\ORM\Fields;
use Bitrix\Im\Model\LinkFileTable;
use Bitrix\Im\V2\Common\MigrationStatusCheckerTrait;
use Bitrix\Im\V2\Common\SidebarFilterProcessorTrait;
use Bitrix\Im\V2\Result;
use Bitrix\Im\V2\Service\Context;
use Bitrix\Im\V2\Service\Locator;
use Bitrix\Im\V2\Link\BaseLinkCollection;

/**
 * @implements \IteratorAggregate<int,FileItem>
 * @method FileItem offsetGet($key)
 */
class FileCollection extends BaseLinkCollection
{
	use SidebarFilterProcessorTrait;
	use MigrationStatusCheckerTrait;

	protected static string $migrationOptionName = 'im_link_file_migration';

	public static function getCollectionElementClass(): string
	{
		return FileItem::class;
	}

	public static function find(
		array $filter = [],
		array $order = ['ID' => 'DESC'],
		?int $limit = null,
		?Context $context = null
	): self
	{
		$context = $context ?? Locator::getContext();

		$fileOrder = ['ID' => 'DESC'];

		if (isset($order['ID']))
		{
			$fileOrder['ID'] = $order['ID'];
		}

		$query = LinkFileTable::query();
		static::addRightsCheckToQuery($query, $context->getUserId(), ['FILE.ID', 'FILE.CREATED_BY']);
		$query
			->setSelect(['ID', 'DISK_FILE_ID', 'SUBTYPE', 'AUTHOR_ID', 'MESSAGE_ID', 'CHAT_ID', 'DATE_CREATE'])
			->setOrder($fileOrder)
		;
		if (isset($limit))
		{
			$query->setLimit($limit);
		}
		static::processFilters($query, $filter, $fileOrder);
		$collection = new static($query->fetchCollection());
		$collection->fillFiles();

		return $collection;
	}

	public static function getByDiskFileId(int $diskFileId): self
	{
		$entity = LinkFileTable::query()
			->setSelect(['ID', 'MESSAGE_ID', 'CHAT_ID', 'SUBTYPE', 'DISK_FILE_ID', 'DATE_CREATE', 'AUTHOR_ID'])
			->where('DISK_FILE_ID', $diskFileId)
			->fetchCollection()
		;

		return (new static($entity))->fillFiles();
	}

	public function fillFiles(): FileCollection
	{
		$diskFilesIds = $this->getEntityIds();

		$entities = \Bitrix\Im\V2\Entity\File\FileCollection::initByDiskFilesIds($diskFilesIds);

		foreach ($this as $file)
		{
			if ($entities->getById($file->getEntityId()) !== null)
			{
				$file->setEntity($entities->getById($file->getEntityId()));
			}
		}

		return $this;
	}

	public function getPopupData(array $excludedList = []): PopupData
	{
		$data = new PopupData([new UserPopupItem(), new FilePopupItem()], $excludedList);

		return parent::getPopupData($excludedList)->merge($data);
	}

	public function save(bool $isGroupSave = false): Result
	{
		if (!static::isMigrationFinished())
		{
			return (new Result())->addError(new FileError(FileError::SAVE_BEFORE_MIGRATION_ERROR));
		}

		return parent::save($isGroupSave);
	}

	protected static function processFilters(Query $query, array $filter, array $order): void
	{
		static::processSidebarFilters($query, $filter, $order);

		if (isset($filter['SEARCH_FILE_NAME']))
		{
			$query->whereLike('FILE.NAME', "{$filter['SEARCH_FILE_NAME']}%");
		}

		$subtypes = [];

		if (isset($filter['SUBTYPE']))
		{
			$subtypes = Subtype::getSubtypeFilter($filter['SUBTYPE']);
		}
		elseif (isset($filter['GROUP']))
		{
			$subtypes = SubtypeGroup::getSubtypeFilter($filter['GROUP']);
		}

		if (count($subtypes) > 1)
		{
			$query->whereIn('SUBTYPE', $subtypes);
		}
		elseif (count($subtypes) === 1)
		{
			$query->where('SUBTYPE', array_values($subtypes)[0]);
		}
	}

	protected static function addRightsCheckToQuery(Query $query, int $userId, array $specificColumns): Query
	{
		$securityContext = new \Bitrix\Disk\Security\DiskSecurityContext($userId);
		$parameters = [];
		$parameters = \Bitrix\Disk\Driver::getInstance()
			->getRightsManager()
			->addRightsCheck($securityContext, $parameters, $specificColumns)
		;

		/** @var Fields\ExpressionField $field */
		$field = $parameters['runtime'][0];
		$field->configureValueType(Fields\IntegerField::class);
		$query
			->registerRuntimeField($field)
			->where('RIGHTS_CHECK', 1);

		return $query;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit