- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/eventmanager.php
- Класс: BitrixMainEventManager
- Вызов: EventManager::addEventHandlerInternal
protected function addEventHandlerInternal($fromModuleId, $eventType, $callback, $includeFile, $sort, $version)
{
$arEvent = [
'FROM_MODULE_ID' => $fromModuleId,
'MESSAGE_ID' => $eventType,
'CALLBACK' => $callback,
'SORT' => $sort,
'FULL_PATH' => $includeFile,
'VERSION' => $version,
'TO_NAME' => $this->formatEventName(['CALLBACK' => $callback]),
];
$fromModuleId = strtoupper($fromModuleId);
$eventType = strtoupper($eventType);
if (!isset($this->handlers[$fromModuleId]) || !is_array($this->handlers[$fromModuleId]))
{
$this->handlers[$fromModuleId] = [];
}
$arEvents = &$this->handlers[$fromModuleId];
if (empty($arEvents[$eventType]) || !is_array($arEvents[$eventType]))
{
$arEvents[$eventType] = [$arEvent];
$iEventHandlerKey = 0;
}
else
{
$newEvents = [];
$iEventHandlerKey = max(array_keys($arEvents[$eventType])) + 1;
foreach ($arEvents[$eventType] as $key => $value)
{
if ($value['SORT'] > $arEvent['SORT'])
{
$newEvents[$iEventHandlerKey] = $arEvent;
}
$newEvents[$key] = $value;
}
$newEvents[$iEventHandlerKey] = $arEvent;
$arEvents[$eventType] = $newEvents;
}
return $iEventHandlerKey;
}