http://www.mediawiki.org/wiki/Special:Code/MediaWiki/99381

Revision: 99381
Author:   aaron
Date:     2011-10-09 22:50:36 +0000 (Sun, 09 Oct 2011)
Log Message:
-----------
* Deferred defineSpecialPages() to setup function as it needs to account for 
LocalSettings.php.
* Added FlaggedRevs:ready() function as a sanity check against too early 
initialization of FlaggedRevs config.
* Replaced load() exceptions with die() to avoid exceptions within exception.
* Cut down on FlaggedRevs class calls.

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/FlaggedRevs.php
    trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
    trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.setup.php

Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-10-09 22:47:06 UTC 
(rev 99380)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-10-09 22:50:36 UTC 
(rev 99381)
@@ -189,13 +189,10 @@
 FlaggedRevsUISetup::defineLogBasicDescription( $wgLogNames, $wgLogHeaders, 
$wgFilterLogTypes );
 FlaggedRevsUISetup::defineLogActionHanders( $wgLogActions, 
$wgLogActionsHandlers );
 
-# Actually register special pages
-FlaggedRevsUISetup::defineSpecialPages( $wgSpecialPages, $wgSpecialPageGroups 
);
-
 # JS/CSS modules and message bundles used by JS scripts
 FlaggedRevsUISetup::defineResourceModules( $wgResourceModules );
 
-# ####### EVENT-HANDLER FUNCTIONS #########
+# ####### HOOK CALLBACK FUNCTIONS #########
 
 # ######## API ########
 # Add flagging data to ApiQueryRevisions
@@ -273,13 +270,18 @@
        $wgHooks['UserGetRights'][] = 'FlaggedRevsHooks::onUserGetRights';
 }
 
-# ####### END HOOK TRIGGERED FUNCTIONS #########
+# ####### END HOOK CALLBACK FUNCTIONS #########
 
 // Note: avoid calls to FlaggedRevs class here for performance
 function efLoadFlaggedRevs() {
+       # LocalSettings.php loaded, safe to load config
+       FlaggedRevs::ready();
+
        # Conditional autopromote groups
        efSetFlaggedRevsAutopromoteConfig();
 
+       # Register special pages (some are conditional)
+       efSetFlaggedRevsSpecialPages();
        # Conditional API modules
        efSetFlaggedRevsConditionalAPIModules();
        # Load hooks that aren't always set
@@ -356,6 +358,11 @@
        }
 }
 
+function efSetFlaggedRevsSpecialPages() {
+       global $wgSpecialPages, $wgSpecialPageGroups;
+       FlaggedRevsUISetup::defineSpecialPages( $wgSpecialPages, 
$wgSpecialPageGroups );
+}
+
 function efSetFlaggedRevsConditionalRights() {
        global $wgGroupPermissions, $wgFlaggedRevsProtection;
        if ( $wgFlaggedRevsProtection ) {

Modified: trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php
===================================================================
--- trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php      
2011-10-09 22:47:06 UTC (rev 99380)
+++ trunk/extensions/FlaggedRevs/dataclasses/FlaggedRevs.class.php      
2011-10-09 22:50:36 UTC (rev 99381)
@@ -21,13 +21,24 @@
        # Autoreview config
        protected static $autoReviewConfig = 0;
 
+       protected static $canLoad = false;
        protected static $loaded = false;
 
-       public static function load() {
+       /**
+        * Signal that LocalSettings.php is loaded
+        */
+       public static function ready() {
+               self::$canLoad = true;
+       }
+
+       protected static function load() {
                global $wgFlaggedRevsTags, $wgFlaggedRevTags;
                if ( self::$loaded ) {
                        return true;
                }
+               if ( !self::$canLoad ) { // sanity
+                       wfDebugDieBacktrace( 'FlaggedRevs config loaded too 
soon! Possibly before LocalSettings.php!' );
+               }
                self::$loaded = true;
                $flaggedRevsTags = null;
                if ( isset( $wgFlaggedRevTags ) ) {
@@ -46,7 +57,7 @@
                        # Sanity checks
                        $safeTag = htmlspecialchars( $tag );
                        if ( !preg_match( '/^[a-zA-Z]{1,20}$/', $tag ) || 
$safeTag !== $tag ) {
-                               throw new MWException( 'FlaggedRevs given 
invalid tag name!' );
+                               die( 'FlaggedRevs given invalid tag name!' );
                        }
                        # Define "quality" and "pristine" reqs
                        if ( is_array( $levels ) ) {
@@ -73,7 +84,7 @@
                        }
                        # Sanity checks
                        if ( !is_integer( $minQL ) || !is_integer( $minPL ) ) {
-                               throw new MWException( 'FlaggedRevs given 
invalid tag value!' );
+                               die( 'FlaggedRevs given invalid tag value!' );
                        }
                        if ( $minQL > $ratingLevels ) {
                                self::$qualityVersions = false;
@@ -101,9 +112,9 @@
                global $wgFlaggedRevsNamespaces, $wgFlaggedRevsPatrolNamespaces;
                foreach ( $wgFlaggedRevsNamespaces as $ns ) {
                        if ( MWNamespace::isTalk( $ns ) ) {
-                               throw new MWException( 'FlaggedRevs given talk 
namespace in $wgFlaggedRevsNamespaces!' );
+                               die( 'FlaggedRevs given talk namespace in 
$wgFlaggedRevsNamespaces!' );
                        } elseif ( $ns == NS_MEDIAWIKI ) {
-                               throw new MWException( 'FlaggedRevs given 
NS_MEDIAWIKI in $wgFlaggedRevsNamespaces!' );
+                               die( 'FlaggedRevs given NS_MEDIAWIKI in 
$wgFlaggedRevsNamespaces!' );
                        }
                }
                self::$reviewNamespaces = $wgFlaggedRevsNamespaces;

Modified: trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.setup.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.setup.php   
2011-10-09 22:47:06 UTC (rev 99380)
+++ trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.setup.php   
2011-10-09 22:50:36 UTC (rev 99381)
@@ -1,6 +1,8 @@
 <?php
 /**
- * Class containing hooked functions for a FlaggedRevs environment
+ * Class containing UI setup functions for a FlaggedRevs environment.
+ * This depends on config variables in LocalSettings.php.
+ * Note: avoid  FlaggedRevs class calls here for performance (like load.php).
  */
 class FlaggedRevsUISetup {
        /**
@@ -89,9 +91,10 @@
         * @return void
         */
        public static function defineSpecialPages( array &$pages, array 
&$groups ) {
-               global $wgUseTagFilter;
+               global $wgFlaggedRevsProtection, $wgFlaggedRevsNamespaces, 
$wgUseTagFilter;
+
                // Show special pages only if FlaggedRevs is enabled on some 
namespaces
-               if ( FlaggedRevs::getReviewNamespaces() ) {
+               if ( count( $wgFlaggedRevsNamespaces ) ) {
                        $pages['RevisionReview'] = 'RevisionReview'; // unlisted
                        $pages['ReviewedVersions'] = 'ReviewedVersions'; // 
unlisted
                        $pages['PendingChanges'] = 'PendingChanges';
@@ -101,7 +104,7 @@
                                $pages['ProblemChanges'] = 'ProblemChanges';
                                $groups['ProblemChanges'] = 'quality';
                        }
-                       if ( !FlaggedRevs::useOnlyIfProtected() ) {
+                       if ( !$wgFlaggedRevsProtection ) {
                                $pages['ReviewedPages'] = 'ReviewedPages';
                                $groups['ReviewedPages'] = 'quality';
                                $pages['UnreviewedPages'] = 'UnreviewedPages';
@@ -112,7 +115,7 @@
                        $pages['ValidationStatistics'] = 'ValidationStatistics';
                        $groups['ValidationStatistics'] = 'quality';
                        // Protect levels define allowed stability settings
-                       if ( FlaggedRevs::useProtectionLevels() ) {
+                       if ( $wgFlaggedRevsProtection ) {
                                $pages['StablePages'] = 'StablePages';
                                $groups['StablePages'] = 'quality';
                        } else {


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to