- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/mail/eventmanager.php
- Класс: BitrixMainMailEventManager
- Вызов: EventManager::executeEvents
static function executeEvents()
{
$manage_cache = MainApplication::getInstance()->getManagedCache();
$bulk = intval(MainConfigOption::get("main", "mail_event_bulk", 5));
if($bulk <= 0)
$bulk = 5;
$rsMails = null;
$connection = MainApplication::getConnection();
$helper = $connection->getSqlHelper();
$strSql= "SELECT 'x' FROM b_event WHERE SUCCESS_EXEC='N' LIMIT 1";
$resultEventDb = $connection->query($strSql);
if($resultEventDb->fetch())
{
if(!$connection->lock('event'))
return "";
}
else
{
if(CACHED_b_event!==false)
$manage_cache->set("events", true);
return "";
}
$strSql = "
SELECT ID, C_FIELDS, EVENT_NAME, MESSAGE_ID, LID,
" . $helper->formatDate('DD.MM.YYYY HH24:MI:SS', 'DATE_INSERT') . " as DATE_INSERT,
DUPLICATE, LANGUAGE_ID
FROM b_event
WHERE SUCCESS_EXEC='N'
ORDER BY ID
LIMIT ".$bulk;
$rsMails = $connection->query($strSql);
if ($rsMails)
{
$arCallableModificator = array();
$cnt = 0;
foreach(InternalEventTable::getFetchModificatorsForFieldsField() as $callableModificator)
{
if(is_callable($callableModificator))
{
$arCallableModificator[] = $callableModificator;
}
}
while($arMail = $rsMails->fetch())
{
foreach($arCallableModificator as $callableModificator)
$arMail['C_FIELDS'] = call_user_func_array($callableModificator, array($arMail['C_FIELDS']));
$arFiles = array();
$fileListDb = InternalEventAttachmentTable::getList(array(
'select' => array('FILE_ID'),
'filter' => array('=EVENT_ID' => $arMail["ID"])
));
while($file = $fileListDb->fetch())
{
$arFiles[] = $file['FILE_ID'];
}
$arMail['FILE'] = $arFiles;
if(!is_array($arMail['C_FIELDS']))
{
$arMail['C_FIELDS'] = array();
}
try
{
$flag = Event::handleEvent($arMail);
InternalEventTable::update($arMail["ID"], array('SUCCESS_EXEC' => $flag, 'DATE_EXEC' => new MainTypeDateTime));
}
catch (Exception $e)
{
InternalEventTable::update($arMail["ID"], array('SUCCESS_EXEC' => "E", 'DATE_EXEC' => new MainTypeDateTime));
$application = MainApplication::getInstance();
$exceptionHandler = $application->getExceptionHandler();
$exceptionHandler->writeToLog($e);
break;
}
$cnt++;
if($cnt >= $bulk)
break;
}
}
$connection->unlock('event');
if($cnt === 0 && CACHED_b_event !== false)
$manage_cache->set("events", true);
return null;
}