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/FileService.php
<?php

namespace Bitrix\Im\V2\Link\File;

use Bitrix\Disk\Driver;
use Bitrix\Disk\File;
use Bitrix\Disk\Security\DiskSecurityContext;
use Bitrix\Im\Model\MessageParamTable;
use Bitrix\Im\V2\Common\ContextCustomer;
use Bitrix\Im\V2\Link\Push;
use Bitrix\Im\V2\Message;
use Bitrix\Im\V2\Result;
use Bitrix\Main\Config\Option;
use Bitrix\Main\ORM\Query\Query;

class FileService
{
	use ContextCustomer;

	protected const ADD_FILE_EVENT = 'fileAdd';
	protected const DELETE_FILE_EVENT = 'fileDelete';

	protected bool $isMigrationFinished;

	public function __construct()
	{
		$this->isMigrationFinished = Option::get('im', 'im_link_file_migration', 'N') === 'Y';
	}

	public function save(Message $message): Result
	{
		$files = $message->getFiles();
		$links = FileCollection::linkEntityToMessage($files, $message);

		return $this->saveInternal($links);
	}

	/**
	 * @param File[] $files
	 * @param Message $message
	 * @return Result
	 */
	public function saveFilesFromMessage(array $files, Message $message): Result
	{
		$result = new Result();

		if (empty($files))
		{
			return $result;
		}

		$entities = new \Bitrix\Im\V2\Entity\File\FileCollection($files, $message->getChatId());
		/** @var FileCollection $links */
		$links = FileCollection::linkEntityToMessage($entities, $message);

		return $this->saveInternal($links);
	}

	protected function saveInternal(FileCollection $links): Result
	{
		$result = new Result();
		$saveResult = $links->save();

		if ($links->count() === 0)
		{
			return $result;
		}

		if (!$saveResult->isSuccess())
		{
			$result->addErrors($saveResult->getErrors());
		}

		if ($saveResult->isSuccess())
		{
			foreach ($links as $link)
			{
				Push::getInstance()
					->setContext($this->context)
					->sendFull($link, self::ADD_FILE_EVENT, ['CHAT_ID' => $link->getChatId()])
				;
			}
		}

		return $result;
	}

	public function deleteFilesByDiskFileId(int $diskFileId): Result
	{
		$result = new Result();

		$links = FileCollection::getByDiskFileId($diskFileId);

		if ($links->count() === 0)
		{
			return $result;
		}

		$deleteResult = $links->delete();

		if (!$deleteResult->isSuccess())
		{
			return $result->addErrors($deleteResult->getErrors());
		}

		if (!$this->isMigrationFinished)
		{
			return $result;
		}

		foreach ($links as $link)
		{
			Push::getInstance()
				->setContext($this->context)
				->sendIdOnly($link, self::DELETE_FILE_EVENT, ['CHAT_ID' => $link->getChatId()])
			;
		}

		return $result;
	}

	public function isMigrationFinished(): bool
	{
		return $this->isMigrationFinished;
	}

	public function getFilesBeforeMigrationFinished(int $chatId, int $limit, ?int $lastId = null, ?string $filename = null): \Bitrix\Im\V2\Entity\File\FileCollection
	{
		$folderModel = \CIMDisk::getFolderModel($chatId, false);
		if ($folderModel === false)
		{
			return new \Bitrix\Im\V2\Entity\File\FileCollection();
		}
		$relation = \CIMChat::GetRelationById($chatId, $this->getContext()->getUserId(), true, false);
		$filter = Query::filter()
			->where('PARENT_ID', $folderModel->getId())
			->where('STORAGE_ID', $folderModel->getStorageId())
			->where('ID', '>', $relation['LAST_FILE_ID'])
		;
		if (isset($lastId))
		{
			$filter->where('ID', '<', $lastId);
		}
		if (isset($filename))
		{
			$clearFileName = str_replace("%", '', $filename);
			$filter->whereLike('NAME', "$clearFileName%");
		}
		$parameters = [
			'filter' => $filter,
			'with' => ['CREATE_USER'],
			'limit' => $limit,
			'order' => ['ID' => 'DESC']
		];
		$securityContext = new DiskSecurityContext($this->getContext()->getUserId());
		$parameters = Driver::getInstance()->getRightsManager()->addRightsCheck($securityContext, $parameters, ['ID', 'CREATED_BY']);
		$diskFiles = File::getModelList($parameters);

		return new \Bitrix\Im\V2\Entity\File\FileCollection($diskFiles, $chatId);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit