Cleanup in Wiki.php and index.php:
authorHappy-melon <happy-melon@users.mediawiki.org>
Sun, 3 Apr 2011 15:56:29 +0000 (15:56 +0000)
committerHappy-melon <happy-melon@users.mediawiki.org>
Sun, 3 Apr 2011 15:56:29 +0000 (15:56 +0000)
* Add visibility to MediaWiki::*() methods.
* Refactor out MediaWiki::preliminaryChecks(), was actually just one preliminary check :D
* maxlag is a property of the database, not the wiki, so MediaWiki::checkMaxLag() doesn't belong.  Since it was only called in index.php I just expanded it there, it's only a trivial wrapper anyway.
* Run stylize.php over code.

includes/Wiki.php
index.php

index 4a2cb10..c4e2aca 100644 (file)
@@ -5,7 +5,14 @@
  * @internal documentation reviewed 15 Mar 2010
  */
 class MediaWiki {
-       var $params = array();
+
+       /**
+        * Array of options which may or may not be used
+        * FIXME: this seems currently to be a messy halfway-house between globals
+        *     and a config object.  Pick one and run with it
+        * @var array
+        */
+       private $params = array();
 
        /**
         * Stores key/value pairs to circumvent global variables
@@ -14,7 +21,7 @@ class MediaWiki {
         * @param $key String: key to store
         * @param $value Mixed: value to put for the key
         */
-       function setVal( $key, &$value ) {
+       public function setVal( $key, &$value ) {
                $key = strtolower( $key );
                $this->params[$key] =& $value;
        }
@@ -27,9 +34,9 @@ class MediaWiki {
         * @param $default string default value, defaults to empty string
         * @return $default Mixed: default value if if the key doesn't exist
         */
-       function getVal( $key, $default = '' ) {
+       public function getVal( $key, $default = '' ) {
                $key = strtolower( $key );
-               if( isset( $this->params[$key] ) ) {
+               if ( isset( $this->params[$key] ) ) {
                        return $this->params[$key];
                }
                return $default;
@@ -45,29 +52,36 @@ class MediaWiki {
         * @param $user User
         * @param $request WebRequest
         */
-       function performRequestForTitle( &$title, &$article, &$output, &$user, $request ) {
+       public function performRequestForTitle( &$title, &$article, &$output, &$user, $request ) {
                wfProfileIn( __METHOD__ );
 
                $output->setTitle( $title );
-               if( $request->getVal( 'printable' ) === 'yes' ) {
+               if ( $request->getVal( 'printable' ) === 'yes' ) {
                        $output->setPrintable();
                }
 
                wfRunHooks( 'BeforeInitialize', array( &$title, &$article, &$output, &$user, $request, $this ) );
 
-               if( !$this->preliminaryChecks( $title, $output ) ) {
+               // If the user is not logged in, the Namespace:title of the article must be in
+               // the Read array in order for the user to see it. (We have to check here to
+               // catch special pages etc. We check again in Article::view())
+               if ( !is_null( $title ) && !$title->userCanRead() ) {
+                       $output->loginToUse();
+                       $this->finalCleanup( $output );
+                       $output->disable();
                        wfProfileOut( __METHOD__ );
-                       return;
+                       return false;
                }
+
                // Call handleSpecialCases() to deal with all special requests...
-               if( !$this->handleSpecialCases( $title, $output, $request ) ) {
+               if ( !$this->handleSpecialCases( $title, $output, $request ) ) {
                        // ...otherwise treat it as an article view. The article
                        // may be a redirect to another article or URL.
                        $new_article = $this->initializeArticle( $title, $output, $request );
-                       if( is_object( $new_article ) ) {
+                       if ( is_object( $new_article ) ) {
                                $article = $new_article;
                                $this->performAction( $output, $article, $title, $user, $request );
-                       } elseif( is_string( $new_article ) ) {
+                       } elseif ( is_string( $new_article ) ) {
                                $output->redirect( $new_article );
                        } else {
                                wfProfileOut( __METHOD__ );
@@ -77,60 +91,43 @@ class MediaWiki {
                wfProfileOut( __METHOD__ );
        }
 
-       /**
-        * Check if the maximum lag of database slaves is higher that $maxLag, and
-        * if it's the case, output an error message
-        *
-        * @param $maxLag int: maximum lag allowed for the request, as supplied by
-        *                the client
-        * @return bool true if the request can continue
-        */
-       function checkMaxLag( $maxLag ) {
-               list( $host, $lag ) = wfGetLB()->getMaxLag();
-               if( $lag > $maxLag ) {
-                       wfMaxlagError( $host, $lag, $maxLag );
-                       return false;
-               } else {
-                       return true;
-               }
-       }
-
        /**
         * Checks some initial queries
+        * FIXME: rename to parseTitle() ?
         *
         * @param $request WebRequest
         * @return Title object to be $wgTitle
         */
-       function checkInitialQueries( WebRequest $request ) {
+       /* private */ function checkInitialQueries( WebRequest $request ) {
                global $wgContLang;
 
                $curid = $request->getInt( 'curid' );
                $title = $request->getVal( 'title' );
 
-               if( $request->getCheck( 'search' ) ) {
+               if ( $request->getCheck( 'search' ) ) {
                        // Compatibility with old search URLs which didn't use Special:Search
                        // Just check for presence here, so blank requests still
                        // show the search page when using ugly URLs (bug 8054).
                        $ret = SpecialPage::getTitleFor( 'Search' );
-               } elseif( $curid ) {
+               } elseif ( $curid ) {
                        // URLs like this are generated by RC, because rc_title isn't always accurate
                        $ret = Title::newFromID( $curid );
-               } elseif( $title == '' && $this->getAction( $request ) != 'delete' ) {
+               } elseif ( $title == '' && $this->getAction( $request ) != 'delete' ) {
                        $ret = Title::newMainPage();
                } else {
                        $ret = Title::newFromURL( $title );
                        // check variant links so that interwiki links don't have to worry
                        // about the possible different language variants
-                       if( count( $wgContLang->getVariants() ) > 1 && !is_null( $ret ) && $ret->getArticleID() == 0 )
+                       if ( count( $wgContLang->getVariants() ) > 1 && !is_null( $ret ) && $ret->getArticleID() == 0 )
                                $wgContLang->findVariantLink( $title, $ret );
                }
                // For non-special titles, check for implicit titles
-               if( is_null( $ret ) || $ret->getNamespace() != NS_SPECIAL ) {
+               if ( is_null( $ret ) || $ret->getNamespace() != NS_SPECIAL ) {
                        // We can have urls with just ?diff=,?oldid= or even just ?diff=
                        $oldid = $request->getInt( 'oldid' );
                        $oldid = $oldid ? $oldid : $request->getInt( 'diff' );
                        // Allow oldid to override a changed or missing title
-                       if( $oldid ) {
+                       if ( $oldid ) {
                                $rev = Revision::newFromId( $oldid );
                                $ret = $rev ? $rev->getTitle() : $ret;
                        }
@@ -138,26 +135,6 @@ class MediaWiki {
                return $ret;
        }
 
-       /**
-        * Checks for anon-cannot-read case
-        *
-        * @param $title Title
-        * @param $output OutputPage
-        * @return boolean true if successful
-        */
-       function preliminaryChecks( &$title, &$output ) {
-               // If the user is not logged in, the Namespace:title of the article must be in
-               // the Read array in order for the user to see it. (We have to check here to
-               // catch special pages etc. We check again in Article::view())
-               if( !is_null( $title ) && !$title->userCanRead() ) {
-                       $output->loginToUse();
-                       $this->finalCleanup( $output );
-                       $output->disable();
-                       return false;
-               }
-               return true;
-       }
-
        /**
         * Initialize some special cases:
         * - bad titles
@@ -170,20 +147,20 @@ class MediaWiki {
         * @param $request WebRequest
         * @return bool true if the request is already executed
         */
-       function handleSpecialCases( &$title, &$output, $request ) {
+       private function handleSpecialCases( &$title, &$output, $request ) {
                wfProfileIn( __METHOD__ );
 
                // Invalid titles. Bug 21776: The interwikis must redirect even if the page name is empty.
-               if( is_null($title) || ( ( $title->getDBkey() == '' ) && ( $title->getInterwiki() == '' ) ) ) {
+               if ( is_null( $title ) || ( ( $title->getDBkey() == '' ) && ( $title->getInterwiki() == '' ) ) ) {
                        $title = SpecialPage::getTitleFor( 'Badtitle' );
                        $output->setTitle( $title ); // bug 21456
                        // Die now before we mess up $wgArticle and the skin stops working
                        throw new ErrorPageError( 'badtitle', 'badtitletext' );
 
                // Interwiki redirects
-               } else if( $title->getInterwiki() != '' ) {
+               } else if ( $title->getInterwiki() != '' ) {
                        $rdfrom = $request->getVal( 'rdfrom' );
-                       if( $rdfrom ) {
+                       if ( $rdfrom ) {
                                $url = $title->getFullURL( 'rdfrom=' . urlencode( $rdfrom ) );
                        } else {
                                $query = $request->getValues();
@@ -191,7 +168,7 @@ class MediaWiki {
                                $url = $title->getFullURL( $query );
                        }
                        /* Check for a redirect loop */
-                       if( !preg_match( '/^' . preg_quote( $this->getVal('Server'), '/' ) . '/', $url ) && $title->isLocal() ) {
+                       if ( !preg_match( '/^' . preg_quote( $this->getVal( 'Server' ), '/' ) . '/', $url ) && $title->isLocal() ) {
                                // 301 so google et al report the target as the actual url.
                                $output->redirect( $url, 301 );
                        } else {
@@ -213,13 +190,13 @@ class MediaWiki {
                        }
                        $targetUrl = $title->getFullURL();
                        // Redirect to canonical url, make it a 301 to allow caching
-                       if( $targetUrl == $request->getFullRequestURL() ) {
+                       if ( $targetUrl == $request->getFullRequestURL() ) {
                                $message = "Redirect loop detected!\n\n" .
                                        "This means the wiki got confused about what page was " .
                                        "requested; this sometimes happens when moving a wiki " .
                                        "to a new server or changing the server configuration.\n\n";
 
-                               if( $this->getVal( 'UsePathInfo' ) ) {
+                               if ( $this->getVal( 'UsePathInfo' ) ) {
                                        $message .= "The wiki is trying to interpret the page " .
                                                "title from the URL path portion (PATH_INFO), which " .
                                                "sometimes fails depending on the web server. Try " .
@@ -241,7 +218,7 @@ class MediaWiki {
                                $output->redirect( $targetUrl, '301' );
                        }
                // Special pages
-               } else if( NS_SPECIAL == $title->getNamespace() ) {
+               } else if ( NS_SPECIAL == $title->getNamespace() ) {
                        /* actions that need to be made when we have a special pages */
                        SpecialPage::executePath( $title );
                } else {
@@ -260,15 +237,15 @@ class MediaWiki {
         * @param $title Title
         * @return Article object
         */
-       static function articleFromTitle( &$title ) {
-               if( NS_MEDIA == $title->getNamespace() ) {
+       public static function articleFromTitle( &$title ) {
+               if ( NS_MEDIA == $title->getNamespace() ) {
                        // FIXME: where should this go?
                        $title = Title::makeTitle( NS_FILE, $title->getDBkey() );
                }
 
                $article = null;
                wfRunHooks( 'ArticleFromTitle', array( &$title, &$article ) );
-               if( $article ) {
+               if ( $article ) {
                        return $article;
                }
 
@@ -296,7 +273,7 @@ class MediaWiki {
                $action = $request->getVal( 'action', 'view' );
 
                // Check for disabled actions
-               if( in_array( $action, $wgDisabledActions ) ) {
+               if ( in_array( $action, $wgDisabledActions ) ) {
                        return 'nosuchaction';
                }
 
@@ -326,21 +303,21 @@ class MediaWiki {
         * @param $request WebRequest ($wgRequest)
         * @return mixed an Article, or a string to redirect to another URL
         */
-       function initializeArticle( &$title, &$output, $request ) {
+       private function initializeArticle( &$title, &$output, $request ) {
                wfProfileIn( __METHOD__ );
 
                $action = $request->getVal( 'action', 'view' );
                $article = self::articleFromTitle( $title );
                // NS_MEDIAWIKI has no redirects.
                // It is also used for CSS/JS, so performance matters here...
-               if( $title->getNamespace() == NS_MEDIAWIKI ) {
+               if ( $title->getNamespace() == NS_MEDIAWIKI ) {
                        wfProfileOut( __METHOD__ );
                        return $article;
                }
                // Namespace might change when using redirects
                // Check for redirects ...
-               $file = ($title->getNamespace() == NS_FILE) ? $article->getFile() : null;
-               if( ( $action == 'view' || $action == 'render' )        // ... for actions that show content
+               $file = ( $title->getNamespace() == NS_FILE ) ? $article->getFile() : null;
+               if ( ( $action == 'view' || $action == 'render' )       // ... for actions that show content
                        && !$request->getVal( 'oldid' ) &&    // ... and are not old revisions
                        !$request->getVal( 'diff' ) &&    // ... and not when showing diff
                        $request->getVal( 'redirect' ) != 'no' &&       // ... unless explicitly told not to
@@ -351,25 +328,25 @@ class MediaWiki {
                        $ignoreRedirect = $target = false;
 
                        wfRunHooks( 'InitializeArticleMaybeRedirect',
-                               array(&$title,&$request,&$ignoreRedirect,&$target,&$article) );
+                               array( &$title, &$request, &$ignoreRedirect, &$target, &$article ) );
 
                        // Follow redirects only for... redirects.
                        // If $target is set, then a hook wanted to redirect.
-                       if( !$ignoreRedirect && ($target || $article->isRedirect()) ) {
+                       if ( !$ignoreRedirect && ( $target || $article->isRedirect() ) ) {
                                // Is the target already set by an extension?
                                $target = $target ? $target : $article->followRedirect();
-                               if( is_string( $target ) ) {
-                                       if( !$this->getVal( 'DisableHardRedirects' ) ) {
+                               if ( is_string( $target ) ) {
+                                       if ( !$this->getVal( 'DisableHardRedirects' ) ) {
                                                // we'll need to redirect
                                                wfProfileOut( __METHOD__ );
                                                return $target;
                                        }
                                }
-                               if( is_object($target) ) {
+                               if ( is_object( $target ) ) {
                                        // Rewrite environment to redirected article
                                        $rarticle = self::articleFromTitle( $target );
                                        $rarticle->loadPageData();
-                                       if( $rarticle->exists() || ( is_object( $file ) && !$file->isLocal() ) ) {
+                                       if ( $rarticle->exists() || ( is_object( $file ) && !$file->isLocal() ) ) {
                                                $rarticle->setRedirectedFrom( $title );
                                                $article = $rarticle;
                                                $title = $target;
@@ -385,12 +362,11 @@ class MediaWiki {
        }
 
        /**
-        * Cleaning up request by doing:
-        ** deferred updates, DB transaction, and the output
+        * Cleaning up request by doing deferred updates, DB transaction, and the output
         *
         * @param $output OutputPage
         */
-       function finalCleanup( &$output ) {
+       public function finalCleanup( &$output ) {
                wfProfileIn( __METHOD__ );
                // Now commit any transactions, so that unreported errors after
                // output() don't roll back the whole DB transaction
@@ -409,15 +385,15 @@ class MediaWiki {
        /**
         * Do a job from the job queue
         */
-       function doJobs() {
+       private function doJobs() {
                global $wgJobRunRate;
 
-               if( $wgJobRunRate <= 0 || wfReadOnly() ) {
+               if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
                        return;
                }
-               if( $wgJobRunRate < 1 ) {
+               if ( $wgJobRunRate < 1 ) {
                        $max = mt_getrandmax();
-                       if( mt_rand( 0, $max ) > $max * $wgJobRunRate ) {
+                       if ( mt_rand( 0, $max ) > $max * $wgJobRunRate ) {
                                return;
                        }
                        $n = 1;
@@ -430,8 +406,8 @@ class MediaWiki {
                        $t = -wfTime();
                        $success = $job->run();
                        $t += wfTime();
-                       $t = round( $t*1000 );
-                       if( !$success ) {
+                       $t = round( $t * 1000 );
+                       if ( !$success ) {
                                $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
                        } else {
                                $output .= "Success, Time: $t ms\n";
@@ -443,7 +419,7 @@ class MediaWiki {
        /**
         * Ends this task peacefully
         */
-       function restInPeace() {
+       public function restInPeace() {
                MessageCache::logMessages();
                wfLogProfilingData();
                // Commit and close up!
@@ -462,10 +438,10 @@ class MediaWiki {
         * @param $user User
         * @param $request WebRequest
         */
-       function performAction( &$output, &$article, &$title, &$user, &$request ) {
+       private function performAction( &$output, &$article, &$title, &$user, &$request ) {
                wfProfileIn( __METHOD__ );
 
-               if( !wfRunHooks( 'MediaWikiPerformAction', array( $output, $article, $title, $user, $request, $this ) ) ) {
+               if ( !wfRunHooks( 'MediaWikiPerformAction', array( $output, $article, $title, $user, $request, $this ) ) ) {
                        wfProfileOut( __METHOD__ );
                        return;
                }
@@ -478,10 +454,10 @@ class MediaWiki {
                                $article->view();
                                break;
                        case 'raw': // includes JS/CSS
-                               wfProfileIn( __METHOD__.'-raw' );
+                               wfProfileIn( __METHOD__ . '-raw' );
                                $raw = new RawPage( $article );
                                $raw->view();
-                               wfProfileOut( __METHOD__.'-raw' );
+                               wfProfileOut( __METHOD__ . '-raw' );
                                break;
                        case 'watch':
                        case 'unwatch':
@@ -501,7 +477,7 @@ class MediaWiki {
                                $article->view();
                                break;
                        case 'dublincore':
-                               if( !$this->getVal( 'EnableDublinCoreRdf' ) ) {
+                               if ( !$this->getVal( 'EnableDublinCoreRdf' ) ) {
                                        wfHttpError( 403, 'Forbidden', wfMsg( 'nodublincore' ) );
                                } else {
                                        $rdf = new DublinCoreRdf( $article );
@@ -509,7 +485,7 @@ class MediaWiki {
                                }
                                break;
                        case 'creativecommons':
-                               if( !$this->getVal( 'EnableCreativeCommonsRdf' ) ) {
+                               if ( !$this->getVal( 'EnableCreativeCommonsRdf' ) ) {
                                        wfHttpError( 403, 'Forbidden', wfMsg( 'nocreativecommons' ) );
                                } else {
                                        $rdf = new CreativeCommonsRdf( $article );
@@ -520,22 +496,22 @@ class MediaWiki {
                                Credits::showPage( $article );
                                break;
                        case 'submit':
-                               if( session_id() == '' ) {
+                               if ( session_id() == '' ) {
                                        /* Send a cookie so anons get talk message notifications */
                                        wfSetupSession();
                                }
                                /* Continue... */
                        case 'edit':
-                               if( wfRunHooks( 'CustomEditor', array( $article, $user ) ) ) {
+                               if ( wfRunHooks( 'CustomEditor', array( $article, $user ) ) ) {
                                        $internal = $request->getVal( 'internaledit' );
                                        $external = $request->getVal( 'externaledit' );
                                        $section = $request->getVal( 'section' );
                                        $oldid = $request->getVal( 'oldid' );
-                                       if( !$this->getVal( 'UseExternalEditor' ) || $action=='submit' || $internal ||
+                                       if ( !$this->getVal( 'UseExternalEditor' ) || $action == 'submit' || $internal ||
                                           $section || $oldid || ( !$user->getOption( 'externaleditor' ) && !$external ) ) {
                                                $editor = new EditPage( $article );
                                                $editor->submit();
-                                       } elseif( $this->getVal( 'UseExternalEditor' ) && ( $external || $user->getOption( 'externaleditor' ) ) ) {
+                                       } elseif ( $this->getVal( 'UseExternalEditor' ) && ( $external || $user->getOption( 'externaleditor' ) ) ) {
                                                $mode = $request->getVal( 'mode' );
                                                $extedit = new ExternalEdit( $article, $mode );
                                                $extedit->edit();
@@ -543,7 +519,7 @@ class MediaWiki {
                                }
                                break;
                        case 'history':
-                               if( $request->getFullRequestURL() == $title->getInternalURL( 'action=history' ) ) {
+                               if ( $request->getFullRequestURL() == $title->getInternalURL( 'action=history' ) ) {
                                        $output->setSquidMaxage( $this->getVal( 'SquidMaxage' ) );
                                }
                                $history = new HistoryPage( $article );
@@ -560,12 +536,10 @@ class MediaWiki {
                                $special->execute( '' );
                                break;
                        default:
-                               if( wfRunHooks( 'UnknownAction', array( $action, $article ) ) ) {
+                               if ( wfRunHooks( 'UnknownAction', array( $action, $article ) ) ) {
                                        $output->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
                                }
                }
                wfProfileOut( __METHOD__ );
-
        }
-
 }
index 50c2ef5..89a6bd0 100644 (file)
--- a/index.php
+++ b/index.php
@@ -47,8 +47,12 @@ wfProfileIn( 'index.php-setup' );
 $mediaWiki = new MediaWiki();
 
 $maxLag = $wgRequest->getVal( 'maxlag' );
-if( !is_null( $maxLag ) && !$mediaWiki->checkMaxLag( $maxLag ) ) {
-       exit;
+if ( !is_null( $maxLag ) ) {
+       list( $host, $lag ) = wfGetLB()->getMaxLag();
+       if ( $lag > $maxLag ) {
+               wfMaxlagError( $host, $lag, $maxLag );
+               exit;
+       }
 }
 
 # Set title from request parameters
@@ -58,7 +62,7 @@ $action = $wgRequest->getVal( 'action', 'view' );
 wfProfileOut( 'index.php-setup' );
 
 # Send Ajax requests to the Ajax dispatcher.
-if( $wgUseAjax && $action == 'ajax' ) {
+if ( $wgUseAjax && $action == 'ajax' ) {
        $dispatcher = new AjaxDispatcher();
        $dispatcher->performAction();
        wfProfileOut( 'index.php' );
@@ -66,16 +70,16 @@ if( $wgUseAjax && $action == 'ajax' ) {
        exit;
 }
 
-if( $wgUseFileCache && $wgTitle !== null ) {
+if ( $wgUseFileCache && $wgTitle !== null ) {
        wfProfileIn( 'index.php-filecache' );
        // Raw pages should handle cache control on their own,
        // even when using file cache. This reduces hits from clients.
-       if( $action != 'raw' && HTMLFileCache::useFileCache() ) {
+       if ( $action != 'raw' && HTMLFileCache::useFileCache() ) {
                /* Try low-level file cache hit */
                $cache = new HTMLFileCache( $wgTitle, $action );
-               if( $cache->isFileCacheGood( /* Assume up to date */ ) ) {
+               if ( $cache->isFileCacheGood( /* Assume up to date */ ) ) {
                        /* Check incoming headers to see if client has this cached */
-                       if( !$wgOut->checkLastModified( $cache->fileCacheTime() ) ) {
+                       if ( !$wgOut->checkLastModified( $cache->fileCacheTime() ) ) {
                                $cache->loadFromFileCache();
                        }
                        # Do any stats increment/watchlist stuff