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' ) {