- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/eventmanager.php
- Класс: BitrixMainEventManager
- Вызов: EventManager::loadEventHandlers
protected function loadEventHandlers()
{
$cache = Application::getInstance()->getManagedCache();
if ($cache->read(3600, self::CACHE_ID, self::CACHE_ID))
{
$rawEvents = $cache->get(self::CACHE_ID);
if (!is_array($rawEvents))
{
$rawEvents = [];
}
}
else
{
$con = Application::getConnection();
$rs = $con->query("
SELECT FROM_MODULE_ID, MESSAGE_ID, SORT, TO_MODULE_ID, TO_PATH,
TO_CLASS, TO_METHOD, TO_METHOD_ARG, VERSION
FROM b_module_to_module m2m
INNER JOIN b_module m ON (m2m.TO_MODULE_ID = m.ID)
ORDER BY SORT
");
$rawEvents = $rs->fetchAll();
$cache->set(self::CACHE_ID, $rawEvents);
}
$handlers = $this->handlers;
$hasHandlers = !empty($this->handlers);
foreach ($rawEvents as $ar)
{
$ar['TO_NAME'] = $this->formatEventName([
'TO_MODULE_ID' => $ar['TO_MODULE_ID'],
'TO_CLASS' => $ar['TO_CLASS'],
'TO_METHOD' => $ar['TO_METHOD'],
]);
$ar['FROM_MODULE_ID'] = strtoupper($ar['FROM_MODULE_ID']);
$ar['MESSAGE_ID'] = strtoupper($ar['MESSAGE_ID']);
if ($ar['TO_METHOD_ARG'] != '')
{
$ar['TO_METHOD_ARG'] = unserialize($ar['TO_METHOD_ARG'], ['allowed_classes' => false]);
}
else
{
$ar['TO_METHOD_ARG'] = [];
}
$this->handlers[$ar['FROM_MODULE_ID']][$ar['MESSAGE_ID']][] = [
'SORT' => $ar['SORT'],
'TO_MODULE_ID' => $ar['TO_MODULE_ID'],
'TO_PATH' => $ar['TO_PATH'],
'TO_CLASS' => $ar['TO_CLASS'],
'TO_METHOD' => $ar['TO_METHOD'],
'TO_METHOD_ARG' => $ar['TO_METHOD_ARG'],
'VERSION' => $ar['VERSION'],
'TO_NAME' => $ar['TO_NAME'],
'FROM_DB' => true,
];
}
if ($hasHandlers)
{
// need to re-sort because of AddEventHandler() calls (before loadEventHandlers)
foreach (array_keys($handlers) as $moduleId)
{
foreach (array_keys($handlers[$moduleId]) as $event)
{
Collection::sortByColumn(
$this->handlers[$moduleId][$event],
['SORT' => SORT_ASC],
'',
null,
true
);
}
}
}
$this->isHandlersLoaded = true;
}