Temporary plug for bug 24939 (interwiki creation during installation fails on SQLite...
[lhc/web/wiklou.git] / includes / db / LBFactory_Multi.php
index 48c2d99..78e58c7 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Advanced generator of database load balancing objects for wiki farms
+ *
  * @file
  * @ingroup Database
  */
@@ -36,6 +38,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 +48,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 +59,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 +74,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 ) {