- Модуль: 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;
}
}