• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/queue.php
  • Класс: BitrixImOpenLinesQueue
  • Вызов: Queue::getList
static function getList($params)
{
	$lastActivityDate = self::getTimeLastActivityOperator();
	$timeHelper = Application::getConnection()->getSqlHelper()->addSecondsToDateTime('(-'.$lastActivityDate.')');

	$query = new Query(QueueTable::getEntity());
	if(Loader::includeModule('im'))
	{
		$query->registerRuntimeField('', new ReferenceField(
			'IM_STATUS',
			'BitrixImModelStatusTable',
			['=ref.USER_ID' => 'this.USER_ID'],
			['join_type'=>'left']
		));

		$query->registerRuntimeField('', new ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN %1$s > '.$timeHelper.' && (%2$s IS NULL || %1$s > %2$s) THEN 'Y' ELSE 'N' END', ['USER.LAST_ACTIVITY_DATE', 'IM_STATUS.IDLE']));
	}
	else
	{
		$query->registerRuntimeField('', new ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN %s > '.$timeHelper.' THEN 'Y' ELSE 'N' END', ['USER.LAST_ACTIVITY_DATE']));
	}

	if(isset($params['select']))
	{
		$query->setSelect($params['select']);
	}
	else
	{
		$query->addSelect('ID')->addSelect('IS_ONLINE_CUSTOM');
	}

	if (isset($params['filter']))
	{
		$query->setFilter($params['filter']);
	}

	if (isset($params['order']))
	{
		$query->setOrder($params['order']);
	}

	if(
		!empty($params['cache']) &&
		isset($params['cache']['ttl'])
	)
	{
		$query->setCacheTtl($params['cache']['ttl']);

		if(
			isset($params['cache']['cacheJoins']) &&
			$params['cache']['cacheJoins'] === true
		)
		{
			$query->cacheJoins(true);
		}
	}

	return $query->exec();
}