Add readOnlyBySection setting, to replace live hack.
authorTim Starling <tstarling@users.mediawiki.org>
Sun, 12 Oct 2008 14:29:55 +0000 (14:29 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Sun, 12 Oct 2008 14:29:55 +0000 (14:29 +0000)
includes/db/LBFactory_Multi.php

index 48c2d99..820aa2e 100644 (file)
@@ -36,6 +36,8 @@
  *
  *     masterTemplateOverrides     An override array for all master servers.
  *
+ *     readOnlyBySection           A map of section name to read-only message. Missing or false for read/write.
+ *
  * @ingroup Database
  */
 class LBFactory_Multi extends LBFactory {
@@ -44,7 +46,7 @@ class LBFactory_Multi extends LBFactory {
        // Optional settings
        var $groupLoadsBySection = array(), $groupLoadsByDB = array(), $hostsByName = array();
        var $externalLoads = array(), $externalTemplateOverrides, $templateOverridesByServer;
-       var $templateOverridesByCluster, $masterTemplateOverrides;
+       var $templateOverridesByCluster, $masterTemplateOverrides, $readOnlyBySection = array();
        // Other stuff
        var $conf, $mainLBs = array(), $extLBs = array();
        var $lastWiki, $lastSection;
@@ -55,7 +57,8 @@ class LBFactory_Multi extends LBFactory {
                $required = array( 'sectionsByDB', 'sectionLoads', 'serverTemplate' );
                $optional = array( 'groupLoadsBySection', 'groupLoadsByDB', 'hostsByName',
                        'externalLoads', 'externalTemplateOverrides', 'templateOverridesByServer',
-                       'templateOverridesByCluster', 'masterTemplateOverrides' );
+                       'templateOverridesByCluster', 'masterTemplateOverrides', 
+                       'readOnlyBySection' );
 
                foreach ( $required as $key ) {
                        if ( !isset( $conf[$key] ) ) {
@@ -69,6 +72,13 @@ class LBFactory_Multi extends LBFactory {
                                $this->$key = $conf[$key];
                        }
                }
+
+               // Check for read-only mode
+               $section = $this->getSectionForWiki();
+               if ( !empty( $this->readOnlyBySection[$section] ) ) {
+                       global $wgReadOnly;
+                       $wgReadOnly = $this->readOnlyBySection[$section];
+               }
        }
 
        function getSectionForWiki( $wiki = false ) {