Index: admin_templates/login.tpl
===================================================================
--- admin_templates/login.tpl (revision 14858)
+++ admin_templates/login.tpl (working copy)
@@ -123,6 +123,14 @@
+
+
+
+
+
+
+
+
@@ -171,6 +179,7 @@
401 Authentication Required
+
Index: install/english.lang
===================================================================
--- install/english.lang (revision 14858)
+++ install/english.lang (working copy)
@@ -168,6 +168,10 @@
TWFpbCBGdW5jdGlvbiBIZWFkZXIgU2VwYXJhdG9y
TWFpbGluZyBMaXN0IFF1ZXVlIFBlciBTdGVw
TWFpbGluZyBMaXN0IFNlbmQgUGVyIFN0ZXA=
+ RW5hYmxlIE1haW50ZW5hbmNlIE1vZGU=
+ RXhjZXB0aW9ucw==
+ U3lzdGVtIE1lc3NhZ2U=
+ VGVtcGxhdGU=
TWF4aW11bSBudW1iZXIgb2YgaW1hZ2Vz
RGVmYXVsdCBVUkwgRW5kaW5nIGluIFNFTy1mcmllbmRseSBtb2Rl
VGVtcGxhdGUgZm9yICJJbnN1ZmZpY2llbnQgUGVybWlzc2lvbnMiIEVycm9y
@@ -656,6 +660,9 @@
U2luZ2xlIFBocmFzZSBMYWJlbCBwZXIgbGluZSAoZm9ybWF0czogbGFfU2FtcGxlTGFiZWwsIGx1X0Zyb250RW5kTGFiZWwp
VXNlciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RlZCB0byB0aGUgc2VsZWN0ZWQgVXJsIEVuZGluZyBpbiBjYXNlIHdoZW4gY3VycmVudCBwYWdlIHVybCBoYXMgYSBkaWZmZXJlbnQgZW5kaW5n
SW1hZ2UgRmlsZXM=
+ SVBzIHNlcGFyYXRlZCB3aXRoIHNlbWktY29sdW1uIDs=
+ dG8gYmUgZGlzcGxheWVkIG9uIEFkbWluIExvZ2luIHNjcmVlbg==
+ dG8gYmUgc2hvd24gb24gRnJvbnQgRW5kLCBpZS4gbm9fcGVybWlzc2lvbg==
SG93IHNvb24gKGluIHNlY29uZHMpIHRoZSBzZWN0aW9uIGNhY2hlIHNob3VsZCBhdXRvLWV4cGlyZSBhZnRlciBpdCdzIGNyZWF0aW9uLiBCeSBkZWZhdWx0IHN5c3RlbSB0ZW5kcyB0byByZWJ1aWxkIHRoZSBjYWNoZSBvbmx5IHdoZW4gaXQncyBwcm9wZXJ0aWVzIG9yIGVsZW1lbnRzIGhhdmUgY2hhbmdlZC4=
U2VhcmNoIGZvciBhbGwgZW50ZXJlZCBrZXl3b3JkcywgaW5zdGVhZCBvZiBhbnkgb25lIG9mIHRoZW0=
UE9QMyBTZXJ2ZXIgUG9ydC4gRm9yIGV4LiAiMTEwIiBmb3IgcmVndWxhciBjb25uZWN0aW9uLCAiOTk1IiBmb3Igc2VjdXJlIGNvbm5lY3Rpb24u
@@ -1082,6 +1089,7 @@
U3luY2hyb25pemU=
Vmlldw==
U2hvdw==
+ U2l0ZSBpcyBpbiAiTWFpbnRlbmFuY2UgTW9kZSI=
QWZmZWN0ZWQgcm93cw==
RXhlY3V0ZWQgaW46
U3RlcA==
Index: install/install_data.sql
===================================================================
--- install/install_data.sql (revision 14858)
+++ install/install_data.sql (working copy)
@@ -137,6 +137,12 @@
INSERT INTO ConfigurationValues VALUES(DEFAULT, 'CategoriesRebuildSerial', '0', 'In-Portal', '', '', '', '', NULL, NULL, 0, 0, 0, NULL);
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeEnabled', '0', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeEnabled', 'checkbox', NULL, NULL, 80.01, 0, 1, NULL);
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeExceptions', '', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeExceptions', 'textarea', NULL, 'COLS=40 ROWS=5', 80.02, 0, 1, 'la_hint_MaintenanceModeExceptions');
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeTemplate', 'maintenance_template', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeTemplate', 'text', '', '', 80.03, 0, 1, 'la_hint_MaintenanceModeTemplate');
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeSystemMessage', '', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeSystemMessage', 'textarea', NULL, 'COLS=40 ROWS=5', 80.04, 0, 1, 'la_hint_MaintenanceModeSystemMessage');
+
+
INSERT INTO ItemTypes VALUES (1, 'In-Portal', 'c', 'Category', 'Name', 'CreatedById', NULL, NULL, 'la_ItemTab_Categories', 1, 'admin/category/addcategory.php', 'clsCategory', 'Category');
INSERT INTO ItemTypes VALUES (6, 'In-Portal', 'u', 'PortalUser', 'Username', 'PortalUserId', NULL, NULL, '', 0, '', 'clsPortalUser', 'User');
Index: install/upgrades.sql
===================================================================
--- install/upgrades.sql (revision 14858)
+++ install/upgrades.sql (working copy)
@@ -2377,4 +2377,9 @@
INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.ADD', 11, 1, 0, 1);
INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.HISTORY.VIEW', 11, 1, 0, 1);
-INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.HISTORY.RESTORE', 11, 1, 0, 1);
\ No newline at end of file
+INSERT INTO Permissions VALUES(DEFAULT, 'CATEGORY.REVISION.HISTORY.RESTORE', 11, 1, 0, 1);
+
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeEnabled', '0', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeEnabled', 'checkbox', NULL, NULL, 80.01, 0, 1, NULL);
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeExceptions', '', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeExceptions', 'textarea', NULL, 'COLS=40 ROWS=5', 80.02, 0, 1, 'la_hint_MaintenanceModeExceptions');
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeTemplate', 'maintenance_template', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeTemplate', 'text', '', '', 80.03, 0, 1, 'la_hint_MaintenanceModeTemplate');
+INSERT INTO ConfigurationValues VALUES(DEFAULT, 'MaintenanceModeSystemMessage', '', 'In-Portal', 'in-portal:configure_advanced', 'la_section_MaintenanceMode', 'la_config_MaintenanceModeSystemMessage', 'textarea', NULL, 'COLS=40 ROWS=5', 80.04, 0, 1, 'la_hint_MaintenanceModeSystemMessage');
Index: kernel/application.php
===================================================================
--- kernel/application.php (revision 14858)
+++ kernel/application.php (working copy)
@@ -970,8 +970,16 @@
$this->EventManager->ProcessRequest();
$this->InitParser();
+
$t = $this->GetVar('render_template', $this->GetVar('t'));
+ if ( $this->IsMaintenanceActual() ) {
+ $maintenance_mode_template = $this->isAdmin ? 'login' : $this->ConfigValue('MaintenanceModeTemplate');
+ if ( $t != $maintenance_mode_template ) {
+ $this->Redirect($maintenance_mode_template);
+ }
+ }
+
if ( !$this->TemplatesCache->TemplateExists($t) && !$this->isAdmin ) {
$cms_handler =& $this->recallObject('st_EventHandler');
/* @var $cms_handler CategoriesEventHandler */
@@ -997,6 +1005,22 @@
}
}
+ /**
+ * Checks if Maintenance Mode is Enabled and is Actual for current IP
+ *
+ * @return bool
+ * @access public
+ */
+
+ public function IsMaintenanceActual()
+ {
+ if ( !$this->ConfigValue('MaintenanceModeEnabled') ) {
+ return 0;
+ }
+
+ return kUtil::ipMatch( $this->ConfigValue('MaintenanceModeExceptions') ) ? 0 : 1;
+ }
+
function InitParser($theme_name = false)
{
if( !is_object($this->Parser) ) {
Index: kernel/processors/main_processor.php
===================================================================
--- kernel/processors/main_processor.php (revision 14858)
+++ kernel/processors/main_processor.php (working copy)
@@ -1248,4 +1248,17 @@
return $_SERVER['REQUEST_URI'];
}
+
+ /**
+ * Checks if Maintenance Mode is Enabled and is Actual for current IP
+ *
+ * @param Array $params
+ * @return bool
+ * @access protected
+ */
+ protected function IsMaintenanceActual($params)
+ {
+ return $this->Application->IsMaintenanceActual();
+ }
+
}
Index: units/configuration/configuration_event_handler.php
===================================================================
--- units/configuration/configuration_event_handler.php (revision 14858)
+++ units/configuration/configuration_event_handler.php (working copy)
@@ -172,6 +172,12 @@
if ( $object->GetDBField('VariableValue') != $object->GetOriginalField('VariableValue') ) {
$changed[] = $variable_name;
$this->Application->SetVar($event->getPrefixSpecial() . '_changed', $changed);
+
+ if ( ($object->GetDBField('VariableValue') == 1) && $object->GetDBField('VariableName') == 'MaintenanceModeEnabled' ) {
+ // destroy all sessions, except current (current will be restored in Application::Done)
+ $sql = 'UPDATE '.TABLE_PREFIX.'UserSession SET LastAccessed = 0';
+ $this->Conn->Query($sql);
+ }
}
if ( $variable_name == 'Require_AdminSSL' || $variable_name == 'AdminSSL_URL' ) {