/** * Переопределим конструктор */ protected final function __construct() { check_condition(PsEnvironment::isIncluded(), 'Can use ' . __CLASS__ . ' only when environment is included'); $UQ = __CLASS__ . '-' . PsEnvironment::env(); $this->LOGGER = PsLogger::inst($UQ); $this->PROFILER = PsProfiler::inst($UQ); $this->_construct(); }
/* * Установим специальный провайдер безопасности для консольного процесса */ PsSecurity::set(new PsSecurityProviderCmd()); } else { /* * Автоматически подключаемся к БД */ PsConnectionPool::configure(PsConnectionParams::production()); } /* * Инициализируем окружение, если мы работаем под ним. * Подключаемое окружение может установить свой провайдер безопасности. * Важно! Вызов не перемещать в if, так как метод init должен быть вызван обязательно. */ PsEnvironment::init(); /* * Инициализируем подсистему безопасности */ PsSecurity::init(); //Зарегистрируем функцию, подключающую админские ресурсы function ps_admin_on($force = false) { if ($force || AuthManager::isAuthorizedAsAdmin()) { Autoload::inst()->registerAdminBaseDir(); } } //Ну и сразу попытаемся подключить админские ресурсы ps_admin_on(); //Подключаем файл глобальных настроек, если он существует и мы работаем в рамках проекта PsGlobals::init();
/** * Метод вызывается для инициализации окружения: * 1. Директория ресурсов окружения будет подключена в Autoload * 2. Файл, включающий окружение, будет выполнен */ public static function init() { if (self::$inited) { return; //--- } self::$inited = true; //--- /* * Проверим, нужно ли подключать окружение */ if (self::isSkipInclude()) { return; //--- } $env = self::env(); if (!$env) { return; //--- } $envDir = array_get_value($env, ConfigIni::environments()); if (!$envDir) { return PsUtil::raise('Environment [{}] not found', $env); } if (!is_dir($envDir)) { return PsUtil::raise('Environment dir for [{}] not found', $env); } $envSrcDir = next_level_dir($envDir, DirManager::DIR_SRC); $envIncFile = file_path($envDir, $env, PsConst::EXT_PHP); if (!is_file($envIncFile)) { return PsUtil::raise('Environment include file for [{}] not found', $env); } $LOGGER = PsLogger::inst(__CLASS__); if ($LOGGER->isEnabled()) { $LOGGER->info('Including \'{}\' environment for context \'{}\'', $env, PsContext::describe()); $LOGGER->info('Env dir: {}', $envDir); $LOGGER->info('Src dir: {}', $envSrcDir); $LOGGER->info('Inc file: {}', $envIncFile); } //Проинициализировано окружение self::$included = true; //Регистрируем директорию с классами, специфичными только для данного окружения Autoload::inst()->registerBaseDir($envSrcDir, false); //Выполним необходимое действие $PROFILER = PsProfiler::inst(__CLASS__); try { $LOGGER->info('{'); $PROFILER->start($env); self::initImpl($LOGGER, $envIncFile); $secundomer = $PROFILER->stop(); $LOGGER->info('}'); $LOGGER->info('Inc file included for {} sec', $secundomer->getTime()); } catch (Exception $ex) { $PROFILER->stop(false); $LOGGER->info('Inc file execution error: [{}]', $ex->getMessage()); throw $ex; //--- } }
/** * Метод запускается после регистрации всех страниц */ private final function init() { $this->curpage = $this->searchPage(ServerArrayAdapter::PHP_SELF()); //Если страница не определена, то, возможно, это страница рабочего окружения (другой CMS). if (!$this->curpage && PsEnvironment::isIncluded()) { $this->curpage = $this->getPage(PAGE_ENV); } $this->LOGGER->info('CURRENT: {}', $this->curpage); }