• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/chat.php
  • Класс: BitrixImChat
  • Вызов: Chat::getListParams
static function getListParams($params)
{
	if (!isset($params['CURRENT_USER']) && is_object($GLOBALS['USER']))
	{
		$params['CURRENT_USER'] = $GLOBALS['USER']->GetID();
	}

	$params['CURRENT_USER'] = intval($params['CURRENT_USER']);

	$userId = $params['CURRENT_USER'];
	if ($userId <= 0)
	{
		return null;
	}

	$filter = [];
	$runtime = [];

	if (isset($params['FILTER']['ID']))
	{
		$filter['=ID'] = $params['FILTER']['ID'];
	}
	else if (isset($params['FILTER']['SEARCH']))
	{
		$find = (string)$params['FILTER']['SEARCH'];

		$helper = Application::getConnection()->getSqlHelper();
		if (ModelChatIndexTable::getEntity()->fullTextIndexEnabled('SEARCH_CONTENT'))
		{
			$find = trim($find);
			$find = BitrixMainSearchContent::prepareStringToken($find);

			if (BitrixMainSearchContent::canUseFulltextSearch($find, BitrixMainSearchContent::TYPE_MIXED))
			{
				$filter['*INDEX.SEARCH_CONTENT'] = $find;
			}
			else
			{
				return null;
			}
		}
		else
		{
			if (mb_strlen($find) < 3)
			{
				return null;
			}

			$filter['%=INDEX.SEARCH_TITLE'] = $helper->forSql($find).'%';
		}
	}

	if ($params['SKIP_ACCESS_CHECK'] === 'Y')
	{
		// do nothing
	}
	else if (
		User::getInstance($params['CURRENT_USER'])->isExtranet()
		|| User::getInstance($params['CURRENT_USER'])->isBot()
	)
	{
		$filter['=TYPE'] = [
			self::TYPE_CHANNEL,
			self::TYPE_GROUP,
			self::TYPE_THREAD,
			self::TYPE_PRIVATE
		];
		if (User::getInstance($params['CURRENT_USER'])->isBot())
		{
			$filter['=TYPE'][] = self::TYPE_OPEN_LINE;
		}
		$filter['=RELATION.USER_ID'] = $params['CURRENT_USER'];
	}
	else
	{
		$filter[] = [
			'LOGIC' => 'OR',
			[
				'=TYPE' => self::TYPE_OPEN,
			],
			[
				'=TYPE' => self::TYPE_GROUP,
				'=RELATION.USER_ID' => $params['CURRENT_USER']
			],
			[
				'=TYPE' => self::TYPE_THREAD,
				'=RELATION.USER_ID' => $params['CURRENT_USER']
			],
			[
				'=TYPE' => self::TYPE_PRIVATE,
				'=RELATION.USER_ID' => $params['CURRENT_USER']
			],
			[
				'=TYPE' => self::TYPE_OPEN_LINE,
				'=RELATION.USER_ID' => $params['CURRENT_USER']
			],
		];
	}

	$runtime[] = new BitrixMainEntityReferenceField(
		'RELATION',
		'BitrixImModelRelationTable',
		array(
			"=ref.CHAT_ID" => "this.ID",
			"=ref.USER_ID" => new BitrixMainDBSqlExpression('?', $params['CURRENT_USER']),
		),
		array("join_type"=>"LEFT")
	);

	return [
		'select' => [
			'*',
			'RELATION_USER_ID' => 'RELATION.USER_ID',
			'RELATION_MANAGER' => 'RELATION.MANAGER',
			'RELATION_NOTIFY_BLOCK' => 'RELATION.NOTIFY_BLOCK',
			//'RELATION_COUNTER' => 'RELATION.COUNTER',
			'RELATION_START_COUNTER' => 'RELATION.START_COUNTER',
			'RELATION_LAST_ID' => 'RELATION.LAST_ID',
			//'RELATION_STATUS' => 'RELATION.STATUS',
			//'RELATION_UNREAD_ID' => 'RELATION.UNREAD_ID',
			'ALIAS_NAME' => 'ALIAS.ALIAS',
		],
		'filter' => $filter,
		'runtime' => $runtime
	];
}