Skip to content

Commit

Permalink
Рефакторинг и phpdoc везде для cmsCore,
Browse files Browse the repository at this point in the history
Работа с мультиязычностью в cmsCore,
При определении языка браузера редирект вместо подмены языка,
index.php упрощён, логика в cmsCore,
mime типы, таймзоны в общем каталоге конфигураций,
Базовый класс для работы с конфигурациями,
Правки раздела дополнений с учётом переноса их на офсайт,
При множественных категориях записи и переносе записей из категории, удаляется из переносимой,
Поддержка SEO паттернов в SEO параметрах категорий,
Убран slick в меню,
jquery.inputmask текущей версии.
  • Loading branch information
fuzegit committed Apr 2, 2023
1 parent 9d53848 commit fbeebde
Show file tree
Hide file tree
Showing 54 changed files with 2,206 additions and 1,798 deletions.
84 changes: 26 additions & 58 deletions bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
mb_internal_encoding('UTF-8');

// Подключаем автозагрузчик пакетов Composer
if (file_exists(PATH . '/vendor/autoload.php')) {
require_once PATH.'/vendor/autoload.php';
if (is_readable(PATH . '/vendor/autoload.php')) {
require_once PATH . '/vendor/autoload.php';
}

// Подключаем автозагрузчик классов
// Подключаем автозагрузчик классов CMS
require_once PATH . '/system/config/autoload.php';

// Устанавливаем обработчик автозагрузки классов
Expand All @@ -30,67 +30,41 @@
// Инициализируем конфиг
$config = cmsConfig::getInstance();

// дебаг отключен - скрываем все сообщения об ошибках
if(!$config->debug){

error_reporting(0);

} else {
// Проверяем, что система установлена
if (!$config->isReady()) {

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Отправляем на установку
if (PHP_SAPI !== 'cli') {

// включаем отладку
cmsDebugging::enable();
$root = str_replace(str_replace(DIRECTORY_SEPARATOR, '/', realpath($_SERVER['DOCUMENT_ROOT'])), '', str_replace(DIRECTORY_SEPARATOR, '/', PATH));
header('location:' . $root . '/install/');
die;
}

die('no config');
}

// Проверяем, что система установлена
if (!$config->isReady()){
$root = str_replace(str_replace(DIRECTORY_SEPARATOR, '/', realpath($_SERVER['DOCUMENT_ROOT'])), '', str_replace(DIRECTORY_SEPARATOR, '/', PATH));
header('location:'.$root.'/install/');
die();
// включаем отладку CMS
if ($config->debug) {

cmsDebugging::enable();
}

// Стартуем сессию если константа SESSION_START объявлена
if(defined('SESSION_START')){

// Устанавливаем директорию сессий
cmsUser::setSessionSavePath($config->session_save_handler, $config->session_save_path);

cmsUser::sessionStart($config->cookie_domain, $config->session_name);

// таймзона сессии
$session_time_zone = cmsUser::sessionGet('user:time_zone');
if (defined('SESSION_START')) {

// если таймзона в сессии отличается от дефолтной
if($session_time_zone && $session_time_zone != $config->time_zone){
$config->set('time_zone', $session_time_zone);
}

}

// Язык браузера
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) &&
!empty($config->is_user_change_lang) &&
!empty($config->is_browser_auto_lang)){
$user_lang = strtolower(substr((string)$_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
if($user_lang !== $config->getConfig('language') &&
preg_match('/^[a-z]{2}$/i', $user_lang) &&
is_dir($config->root_path.'system/languages/'.$user_lang.'/')){
$config->set('language', $user_lang);
}
cmsUser::sessionStart($config);
}

// Устанавливаем часовую зону
// Могла быть изменена в cmsUser::sessionStart
date_default_timezone_set($config->time_zone);

// Подключаем все необходимые классы и библиотеки
cmsCore::loadLib('html.helper');
cmsCore::loadLib('strings.helper');
cmsCore::loadLib('files.helper');
if(!$config->native_yaml){
if (!$config->native_yaml) {
cmsCore::loadLib('spyc.class');
}

Expand All @@ -101,26 +75,20 @@
$core->connectDB();

// соединение не установлено? Показываем ошибку
if(!$core->db->ready()){
if (!$core->db->ready()) {

cmsCore::loadLanguage();

return cmsCore::error($core->db->connectError());

}

// Запускаем кеш
cmsCache::getInstance()->start();

cmsEventsManager::hook('core_start');
// Регистрируем остановку кэша
register_shutdown_function(function () {

// Загружаем локализацию
cmsCore::loadLanguage();
cmsCache::getInstance()->stop();
});

// устанавливаем локаль языка
if(function_exists('lang_setlocale')){
lang_setlocale();
}

// устанавливаем локаль MySQL
$core->db->setLcMessages();
cmsEventsManager::hook('core_start');
40 changes: 24 additions & 16 deletions cron.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,19 @@
* Задача для CRON выглядит примерно так: /usr/bin/php -f /path_to_site/cron.php
*
*/
if (PHP_SAPI !== 'cli') {

// Если всё же планируете запускать задачи CRON через curl или иные http запросы, закомментируйте строку ниже
if(PHP_SAPI != 'cli') { die('Access denied'); }
http_response_code(404);

die('404');
}

// Инициализация
require_once 'bootstrap.php';

// Локализация по умолчанию
$core->initLanguage();

// Подключаем шаблонизатор, чтобы был подключен хелпер с функциями
cmsTemplate::getInstance();

Expand All @@ -25,40 +31,43 @@
$task_id = isset($argv[2]) ? intval($argv[2]) : 0;

// если id задачи передано, запускаем только её
if($task_id){
if ($task_id) {

$task = $model->getSchedulerTask($task_id);

if($task){
if ($task) {
$tasks = [$task['id'] => $task];
}

} else {

// Иначе получаем весь список задач для выполнения
$tasks = $model->getPendingSchedulerTasks();

}

// Если задач нет, выходим
if (empty($tasks)) { exit; }
if (empty($tasks)) {
exit;
}

// Коллекция контроллеров
$controllers = [];

//
// Выполняем задачи по списку
//
foreach($tasks as $task){
foreach ($tasks as $task) {

// Проверяем существование контроллера
if (!cmsCore::isControllerExists($task['controller'])){ continue; }
if (!cmsCore::isControllerExists($task['controller'])) {
continue;
}

// если включено последовательное выполнение,
// параллельные запуски запретить
if(!empty($task['consistent_run'])){
if (!empty($task['consistent_run'])) {

$lock_file = $config->cache_path.'cron_lock_'.$task['id'];
$lock_file = $config->cache_path . 'cron_lock_' . $task['id'];
$lockfp = fopen($lock_file, 'w');

// Если блокировку получить не удалось, значит скрипт еще работает
Expand All @@ -68,29 +77,28 @@
}

// По окончании работы необходимо снять блокировку и удалить файл
register_shutdown_function(function($lockfp, $lock_file) {
register_shutdown_function(function ($lockfp, $lock_file) {
flock($lockfp, LOCK_UN);
@unlink($lock_file);
}, $lockfp, $lock_file);

}

// Получаем контроллер из коллекции либо загружаем
// и сохраняем в коллекцию
if (isset($controllers[$task['controller']])){
if (isset($controllers[$task['controller']])) {

$controller = $controllers[$task['controller']];

} else {

$controller = cmsCore::getController($task['controller']);

if(!$controller->isEnabled()){
unset($controller); continue;
if (!$controller->isEnabled()) {
unset($controller);
continue;
}

$controllers[$task['controller']] = $controller;

}

try {
Expand Down
38 changes: 3 additions & 35 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

/**
* @file
* Файл, который обслуживает все запросы страниц InstantCMS.
* Файл, который обслуживает все HTTP запросы страниц InstantCMS.
*
* Весь код InstantCMS выпущен в соответствии с лицензией GNU General Public License v2.
* Смотрите файлы license.en.txt и license.ru.txt в корне вашей установки копии InstantCMS.
Expand All @@ -21,40 +21,8 @@
*/
define('SESSION_START', true);

header('Content-type:text/html; charset=utf-8');
header('X-Powered-By: InstantCMS');

// Подключаем файл первоначальной инициализации окружения InstantCMS
require_once 'bootstrap.php';

if ($config->emulate_lag) { usleep(350000); }

//Запускаем роутинг
$core->route($_SERVER['REQUEST_URI']);

// Инициализируем шаблонизатор
$template = cmsTemplate::getInstance();

cmsEventsManager::hook('engine_start');

// загружаем и устанавливаем страницы для текущего URI
$core->loadMatchedPages();

// Проверяем доступ
if(cmsEventsManager::hook('page_is_allowed', true)){

//Запускаем контроллер
$core->runController();

}

// формируем виджеты
$core->runWidgets();

//Выводим готовую страницу
$template->renderPage();

cmsEventsManager::hook('engine_stop');

// Останавливаем кеш
cmsCache::getInstance()->stop();
// Запускаем
$core->runHttp($_SERVER['REQUEST_URI']);
3 changes: 2 additions & 1 deletion install/languages/en/sql/base.sql
Original file line number Diff line number Diff line change
Expand Up @@ -952,7 +952,8 @@ INSERT INTO `{#}events` (`id`, `event`, `listener`, `ordering`, `is_enabled`) VA
(228, 'grid_activity_types', 'languages', 228, 1),
(229, 'content_form_field', 'languages', 229, 1),
(230, 'ctype_field_after_add', 'languages', 230, 1),
(231, 'ctype_field_after_update', 'languages', 231, 1);
(231, 'ctype_field_after_update', 'languages', 231, 1),
(232, 'engine_start', 'languages', 232, 1);

DROP TABLE IF EXISTS `{#}groups`;
CREATE TABLE `{#}groups` (
Expand Down
3 changes: 2 additions & 1 deletion install/languages/ru/sql/base.sql
Original file line number Diff line number Diff line change
Expand Up @@ -952,7 +952,8 @@ INSERT INTO `{#}events` (`id`, `event`, `listener`, `ordering`, `is_enabled`) VA
(228, 'grid_activity_types', 'languages', 228, 1),
(229, 'content_form_field', 'languages', 229, 1),
(230, 'ctype_field_after_add', 'languages', 230, 1),
(231, 'ctype_field_after_update', 'languages', 231, 1);
(231, 'ctype_field_after_update', 'languages', 231, 1),
(232, 'engine_start', 'languages', 232, 1);

DROP TABLE IF EXISTS `{#}groups`;
CREATE TABLE `{#}groups` (
Expand Down
Loading

0 comments on commit fbeebde

Please sign in to comment.