%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.224.57.231 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.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 $instance; protected $mode; /** @var BaseBuilder[] */ protected $builders; /** @var array */ protected $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) { /** @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 (self::$instance === null) { 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; } }