• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session/agent.php
  • Класс: BitrixImOpenLinesSessionAgent
  • Вызов: Agent::dismissedOperator
static function dismissedOperator($nextExec = 0)
{
	Debug::addAgent('start ' . __METHOD__);

	$emptyResultReturn = 'BitrixImOpenLinesSession::dismissedOperatorAgent(0);';

	if (self::isCronCall() && self::isExecModeAgent() || !self::isCronCall() && self::isExecModeCron())
		return $emptyResultReturn;

	$res = SessionCheckTable::getList(Array(
		'select' => Array('SESSION_ID', 'CHAT_ID' => 'SESSION.CHAT_ID', 'OPERATOR_ID' => 'SESSION.OPERATOR_ID', 'SESSION.OPERATOR.ID', 'SESSION.OPERATOR.ACTIVE', 'DATE_LAST_MESSAGE' => 'SESSION.DATE_LAST_MESSAGE'),
		'filter' => Array(
			'=DATE_QUEUE' => null,
			array(
				'LOGIC' => 'OR',
				array('SESSION.OPERATOR_ID' => null),
				array('SESSION.OPERATOR_ID' => 0),
				'SESSION.OPERATOR.ID' => null,
				'SESSION.OPERATOR.ACTIVE' => 'N',
			)
		),
		'limit' => 101
	));

	$count=0;
	while ($row = $res->fetch())
	{
		$count++;
		if($count<101)
		{
			if(empty(SessionCheckTable::getRowById($row['SESSION_ID'])['DATE_QUEUE']))
			{
				$chat = new Chat($row['CHAT_ID']);

				$timeException = new DateTime();
				$timeException->add('-7 DAY');

				if(empty($row['DATE_LAST_MESSAGE']) || $row['DATE_LAST_MESSAGE']->getTimestamp() > $timeException->getTimestamp())
				{
					if(empty($row['OPERATOR_ID']))
						$row['OPERATOR_ID'] = 0;

					$chat->transfer(Array(
						'FROM' => $row['OPERATOR_ID'],
						'TO' => 'queue',
						'MODE' => Chat::TRANSFER_MODE_AUTO,
					));
				}
				else
				{
					$chat->dismissedOperatorFinish();
				}
			}
		}
		else
		{
			if (self::isCronCall() && self::isExecModeCron())
			{
				return self::dismissedOperator(1);
			}
			else
			{
				CAgent::AddAgent('BitrixImOpenLinesSession::dismissedOperatorAgent(1);', "imopenlines", "N", 60, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset()+60, "FULL"));
			}
		}
	}

	if (Loader::includeModule('pull'))
	{
		PullEvent::send();
	}

	ExecLog::setExecFunction(__METHOD__);

	Debug::addAgent('stop ' . __METHOD__);

	if($nextExec == 0)
	{
		return $emptyResultReturn;
	}
}