Classes derived from SpecialPage can now specify a run() method, which will be execut...
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Thu, 2 Oct 2008 17:30:04 +0000 (17:30 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Thu, 2 Oct 2008 17:30:04 +0000 (17:30 +0000)
Just because copying code to subclasses is annoying.

RELEASE-NOTES
includes/SpecialPage.php

index d78a192..59d6345 100644 (file)
@@ -145,6 +145,8 @@ The following extensions are migrated into MediaWiki 1.14:
   $wgExternalLinkTarget
 * api.php now sends "Retry-After" and "X-Database-Lag" HTTP headers if the maxlag
   check fails, just like index.php does
+* Classes derived from SpecialPage can now specify a run() method, which will
+  be executed after all magic performed by SpecialPage::execute()
 
 
 === Bug fixes in 1.14 ===
index fec6c0a..b96ab67 100644 (file)
@@ -740,8 +740,13 @@ class SpecialPage
                if ( $this->userCanExecute( $wgUser ) ) {
                        $func = $this->mFunction;
                        // only load file if the function does not exist
-                       if(!is_callable($func) and $this->mFile) {
-                               require_once( $this->mFile );
+                       if ( !is_callable( $func ) ) {
+                               // Check whether a run method has been defined
+                               if ( is_callable( array( $this, 'run' ) ) )
+                                       $func = array( $this, 'run' );
+                               // Else load from file if it has been specified
+                               elseif ( $this->mFile )
+                                       require_once( $this->mFile );
                        }
                        # FIXME: these hooks are broken for extensions and anything else that subclasses SpecialPage.
                        if ( wfRunHooks( 'SpecialPageExecuteBeforeHeader', array( &$this, &$par, &$func ) ) )
@@ -756,6 +761,7 @@ class SpecialPage
                }
        }
 
+
        function outputHeader() {
                global $wgOut, $wgContLang;