Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/iblock/lib/url/adminpage/ |
Upload File : |
<?php namespace Bitrix\Iblock\Url\AdminPage; use Bitrix\Main; class BuilderManager { public const EVENT_ID = 'onGetUrlBuilders'; private static self $instance; /** @var BaseBuilder[] */ protected array $builders; /** @var array */ protected array $map; protected function __construct() { $this->builders = []; $this->map = []; $counter = 0; $item = new IblockBuilder(); $id = $item->getId(); $this->builders[$id] = $item; $this->map[] = [ 'ID' => $id, 'WEIGHT' => (int)$item->getWeight(), 'COUNTER' => $counter, ]; $counter++; unset($item); $event = new Main\Event('iblock', self::EVENT_ID, []); $event->send(); $resultList = $event->getResults(); if (empty($resultList) || !is_array($resultList)) { return; } foreach ($resultList as $eventResult) { if ($eventResult->getType() !== Main\EventResult::SUCCESS) { continue; } $row = $eventResult->getParameters(); if (empty($row) || !is_array($row)) { continue; } foreach ($row as $className) { if (!is_string($className) || $className === '') { continue; } if (!class_exists($className)) { continue; } /** @var BaseBuilder $item */ $item = new $className(); if ($item instanceof BaseBuilder) { $id = $item->getId(); if (!isset($this->builders[$id])) { $this->builders[$id] = $item; $this->map[] = [ 'ID' => $id, 'WEIGHT' => (int)$item->getWeight(), 'COUNTER' => $counter, ]; $counter++; } } unset($item); } } unset($eventResult, $resultList); if (!empty($this->map)) { Main\Type\Collection::sortByColumn( $this->map, [ 'WEIGHT' => SORT_DESC, 'COUNTER' => SORT_ASC, ] ); } } public static function getInstance(): BuilderManager { if (!isset(self::$instance)) { self::$instance = new BuilderManager(); } return self::$instance; } public function getBuilder(string $builder = BaseBuilder::TYPE_AUTODETECT): ?BaseBuilder { $result = null; if ($builder === BaseBuilder::TYPE_AUTODETECT) { if (defined('URL_BUILDER_TYPE') && is_string(URL_BUILDER_TYPE)) { if (isset($this->builders[URL_BUILDER_TYPE])) { $result = $this->builders[URL_BUILDER_TYPE]; } } if ($result === null) { foreach ($this->map as $row) { if ($this->builders[$row['ID']]->use()) { $result = $this->builders[$row['ID']]; break; } } unset($row); } } else { if (isset($this->builders[$builder])) { $result = $this->builders[$builder]; } } return $result; } }