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