- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/automaticaction/messages.php
- Класс: BitrixImOpenLinesAutomaticActionMessages
- Вызов: Messages::sendMessages
static function sendMessages($limitTime = 60, $limit = 0): void
{
$time = new ToolsTime;
$configs = [];
$configsAutomaticMessage = [];
$chats = [];
$configManager = new Config();
$count = 0;
$countIterationPull = 0;
while (
($time->getElapsedTime() <= $limitTime)
&& (
empty($limit)
|| ($count < $limit)
)
)
{
if ($countIterationPull > 10 && Loader::includeModule('pull'))
{
$countIterationPull = 0;
PullEvent::send();
}
$select = SessionTable::getSelectFieldsPerformance('SESSION');
$select['ID'] = 'ID';
$select['CONFIG_AUTOMATIC_MESSAGE_ID'] = 'CONFIG_AUTOMATIC_MESSAGE_ID';
$tasks = SessionAutomaticTasksTable::getList([
'select' => $select,
'filter' => [
'<=DATE_TASK' => new DateTime()
],
'order' => [
'DATE_TASK'
],
'limit' => 1
]);
if ($task = $tasks->fetch())
{
SessionAutomaticTasksTable::update($task['ID'], ['DATE_TASK' => (new DateTime())->add('120 SECONDS')]);
$sessionFields = [];
foreach ($task as $key => $value)
{
$newKey = str_replace('IMOPENLINES_MODEL_SESSION_AUTOMATIC_TASKS_SESSION_', '', $key);
if ($newKey !== $key)
{
$sessionFields[$newKey] = $value;
}
}
if (!isset($configs[$sessionFields['CONFIG_ID']]))
{
$configs[$sessionFields['CONFIG_ID']] = $configManager->get($sessionFields['CONFIG_ID']);
if (empty($configsAutomaticMessage[$task['CONFIG_AUTOMATIC_MESSAGE_ID']]))
{
$automaticMessagesThisConfig = $configManager->getAutomaticMessage($sessionFields['CONFIG_ID']);
foreach ($automaticMessagesThisConfig as $automaticMessage)
{
$configsAutomaticMessage[$automaticMessage['ID']] = $automaticMessage;
}
}
}
if (!isset($chats[$sessionFields['CHAT_ID']]))
{
$chats[$sessionFields['CHAT_ID']] = new Chat($sessionFields['CHAT_ID']);
}
$session = new Session();
$session->loadByArray($sessionFields, $configs[$sessionFields['CONFIG_ID']], $chats[$sessionFields['CHAT_ID']]);
$resultSendAutomaticMessage = $session->sendAutomaticMessage($task['ID'], $task['CONFIG_AUTOMATIC_MESSAGE_ID'], $configsAutomaticMessage[$task['CONFIG_AUTOMATIC_MESSAGE_ID']]);
if ($resultSendAutomaticMessage->isSuccess())
{
$countIterationPull++;
}
$count++;
}
else
{
break;
}
}
if (
$countIterationPull > 0 &&
Loader::includeModule('pull')
)
{
PullEvent::send();
}
}