Kaynağa Gözat

#5007 Maintenance mode

Alex Trofimov 1 yıl önce
ebeveyn
işleme
ba6248fd63

+ 2 - 0
inc/params.inc.php

@@ -128,6 +128,8 @@ BxDolDb::getInstance()->cacheParams();
 
 
 require_once(BX_DIRECTORY_PATH_INC . 'profiles.inc.php');
 require_once(BX_DIRECTORY_PATH_INC . 'profiles.inc.php');
 
 
+bx_check_maintenance_mode_soft();
+
 $o = new BxDolAlerts('system', 'begin', 0);
 $o = new BxDolAlerts('system', 'begin', 0);
 $o->alert();
 $o->alert();
 
 

+ 25 - 0
inc/utils.inc.php

@@ -2012,6 +2012,31 @@ function bx_check_maintenance_mode ($bShowHttpError = false)
     return $bMaintetance;
     return $bMaintetance;
 }
 }
 
 
+/**
+ * Check if site maintetance mode is enabled.
+ * Maintetance mode is enabled when '.bx_maintenance' file exists in the script root folder, 
+ * please note that this is hidden file and some file managers don't show it.
+ * @param $bShowHttpError show 503 HTTP error if site is in mainenance mode
+ * @return true if site is in maintenance mode, or false otherwise
+ */
+function bx_check_maintenance_mode_soft ()
+{
+    $sUrl = bx_proto() . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
+    if (0 === strpos($sUrl, BX_DOL_URL_STUDIO)) // allow to view studio
+        return;
+    if (0 === strpos($sUrl, BX_DOL_URL_ROOT . 'member.php') && $_SERVER['REQUEST_METHOD'] === 'POST') // make studio login form to always work
+        return;
+    if (defined('BX_DOL_UPGRADING')) // allow upgrade
+        return;
+    if (!getParam('sys_maintenance_mode')) // check mainenance mode switcher
+        return;
+    if (isAdmin()) // always allow studio operators
+        return;
+
+    $sHtml = getParam('sys_maintenance_mode_html');
+    bx_show_service_unavailable_error_and_exit (trim($sHtml) ? $sHtml : 'Site is temporarily unavailable due to scheduled maintenance, please try again in a minute.', 600);
+}
+
 /**
 /**
  * Check for minimal requirements.
  * Check for minimal requirements.
  * if BX_DISABLE_REQUIREMENTS_CHECK is defined then this requirements checking is skipped.
  * if BX_DISABLE_REQUIREMENTS_CHECK is defined then this requirements checking is skipped.

+ 4 - 1
install/sql/system.sql

@@ -441,7 +441,10 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex
 (@iCategoryId, 'sys_std_show_header_right_site', '_adm_stg_cpt_option_sys_std_show_header_right_site', '', 'checkbox', '', '', '', '', 282),
 (@iCategoryId, 'sys_std_show_header_right_site', '_adm_stg_cpt_option_sys_std_show_header_right_site', '', 'checkbox', '', '', '', '', 282),
 (@iCategoryId, 'sys_std_show_launcher_left', '_adm_stg_cpt_option_sys_std_show_launcher_left', '', 'checkbox', '', '', '', '', 285),
 (@iCategoryId, 'sys_std_show_launcher_left', '_adm_stg_cpt_option_sys_std_show_launcher_left', '', 'checkbox', '', '', '', '', 285),
 
 
-(@iCategoryId, 'sys_embed_microlink_key', '_adm_stg_cpt_option_sys_embed_microlink_key', '', 'digit', '', '', '', '', 300);
+(@iCategoryId, 'sys_embed_microlink_key', '_adm_stg_cpt_option_sys_embed_microlink_key', '', 'digit', '', '', '', '', 300),
+
+(@iCategoryId, 'sys_maintenance_mode', '_adm_stg_cpt_option_sys_maintenance_mode', '', 'checkbox', '', '', '', '', 400),
+(@iCategoryId, 'sys_maintenance_mode_html', '_adm_stg_cpt_option_sys_maintenance_mode_html', '', 'code', '', '', '', '', 402);
 
 
 --
 --
 -- CATEGORY (HIDDEN): System
 -- CATEGORY (HIDDEN): System

+ 3 - 1
modules/boonex/english/data/langs/system/en.xml

@@ -1845,7 +1845,9 @@
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_search"><![CDATA[Studio: Show search in header right]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_search"><![CDATA[Studio: Show search in header right]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_site"><![CDATA[Studio: Show 'site' link in header]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_site"><![CDATA[Studio: Show 'site' link in header]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_launcher_left"><![CDATA[Studio: Show left area with menu in Launcher]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_launcher_left"><![CDATA[Studio: Show left area with menu in Launcher]]></string>
-    <string name="_adm_stg_cpt_option_sys_embed_microlink_key"><![CDATA[Studio: Microlink API key for embeds processing]]></string>      
+    <string name="_adm_stg_cpt_option_sys_embed_microlink_key"><![CDATA[Studio: Microlink API key for embeds processing]]></string>
+    <string name="_adm_stg_cpt_option_sys_maintenance_mode"><![CDATA[Maintenance mode]]></string>
+    <string name="_adm_stg_cpt_option_sys_maintenance_mode_html"><![CDATA[Maintenance mode custom HTML code]]></string>
 
 
 	<string name="_adm_stg_cpt_type_system"><![CDATA[Global]]></string>
 	<string name="_adm_stg_cpt_type_system"><![CDATA[Global]]></string>
 	<string name="_adm_stg_scs_save"><![CDATA[Settings were successfully saved]]></string>
 	<string name="_adm_stg_scs_save"><![CDATA[Settings were successfully saved]]></string>

+ 3 - 1
modules/boonex/russian/data/langs/system/ru.xml

@@ -1821,7 +1821,9 @@
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_search"><![CDATA[Студия: Показать поиск в заголовке справа]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_search"><![CDATA[Студия: Показать поиск в заголовке справа]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_site"><![CDATA[Студия: Показывать ссылку 'сайт' в заголовке]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_header_right_site"><![CDATA[Студия: Показывать ссылку 'сайт' в заголовке]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_launcher_left"><![CDATA[Студия: Показать левую область с меню в лаунчере]]></string>
     <string name="_adm_stg_cpt_option_sys_std_show_launcher_left"><![CDATA[Студия: Показать левую область с меню в лаунчере]]></string>
-    <string name="_adm_stg_cpt_option_sys_embed_microlink_key"><![CDATA[Studio: Microlink API ключДля обработки вложений]]></string>  
+    <string name="_adm_stg_cpt_option_sys_embed_microlink_key"><![CDATA[Studio: Microlink API ключДля обработки вложений]]></string>
+    <string name="_adm_stg_cpt_option_sys_maintenance_mode"><![CDATA[Режим технического обслуживания]]></string>
+    <string name="_adm_stg_cpt_option_sys_maintenance_mode_html"><![CDATA[Пользовательский HTML-код для режима обслуживания]]></string>
     
     
     <string name="_adm_stg_cpt_type_system"><![CDATA[Глобальные]]></string>
     <string name="_adm_stg_cpt_type_system"><![CDATA[Глобальные]]></string>
     <string name="_adm_stg_scs_save"><![CDATA[Настройки удачно сохранены]]></string>
     <string name="_adm_stg_scs_save"><![CDATA[Настройки удачно сохранены]]></string>