public static function init() { Once::exec(__FILE__, function () { //Список операций выполняющихся при любом запросе со спецсимволом в адресе [-~!] и при запросах без файлов //или при яном вызове в скрипте Router::init(); //Собирается конфиг .infra.json из корня проекта //Теперь при первом обащении к классу расширения будет собираться его конфиг .infra.json из папки расширения Config::init(); //Анализируется папка vendor Находятся все производители поддерживающие конфигурационные файлы .infra.json //Некий производитель angelcharly попадёт в список поиска, если у него есть библиотека с файлом .infra.json //Эту обработку можно убрать если производители прописаны вручную в config.path.search проекта //Без этой обработке, например, переопределения в кореновм .infra.json для расширения weather //не применятся к Weather::$conf и неinfrajs расширения будет работать со значениями по умолчанию //.infra.json в самих неinfrajs расширениях также не будет прочитан, //но значения конфига по умолчанию и так указаны в переменной класса, вроде Weather::$conf по этому не скажется на работе //В общем заполняем config.path.search путями до установленных расширений Search::init(); //Автоматическая установка расширений //Cоздаются папка cache и для расширения mem создаётся папка cache/mem, если их нет //Наличие этих папок, например, обязательно для Search, который кэширует свою работу //Во время обновления запускаются тесты Update::init(); //По дате авторизации админа выход и если браузер прислал информацию что у него есть кэш //Заголовок Cache-control:no-store в расширении Nostore::on() запретит создавать кэш, если станет ясно, что modfeied не нужен Access::modified(); //Заголовки по умолчанию для Cache-Controll Nostore::init(); //Вспомогательные заголовки с информацией о правах пользователя test debug admin Access::headers(); }); }
public static function exec() { if (!Update::$is) { Config::add('update', function ($name, $value, $conf) { if (!Update::$is) { return; } Path::req('-' . $name . '/' . $value); }); } Update::$is = true; //Пр появлении нового Config::get будет проверяться свойство update //Но нужно установить то что уже было установлено $conf = Config::$conf; foreach ($conf as $name => $v) { Update::update($name); } //И вообще всё установить нужно что ещё не установлено Config::get(); }
<?php namespace infrajs\update; use infrajs\ans\Ans; if (!is_file('vendor/autoload.php')) { chdir('../../../'); require_once 'vendor/autoload.php'; } Update::init(); $ans = array(); if (Update::$is) { return Ans::ret($ans, 'Сейчас идёт обновление'); } return Ans::ret($ans, 'Обновление сейчас не идёт');
<?php use infrajs\load\Load; use infrajs\access\Access; use infrajs\event\Event; use infrajs\config\Config; use infrajs\update\Update; $conf = Config::get('tester'); if ($conf['updatetest']) { Update::exec(); //Это отодвинет update testerа в конец очереди $ans = Load::loadJSON('-tester/?type=auto'); if (!$ans || !$ans['result']) { error_log('TESTER: There are errors in the tests /-tester/?type=errors ' . $ans['msg']); //if (Access::debug()) die('TESTER: There are errors in the tests <a href="/-tester/?type=errors">errors</a> <b>'.$ans['msg'].'</b>'); } else { echo '<div class="well">С обновлением выполнено <a href="/-tester/">тестирование</a>, ошибок не обнаружено</div>'; } }