From 4ac9fa081a7c045f6a9f1cfc529d82423f485b2e Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sun, 8 Dec 2013 09:55:49 +0100 Subject: Update to MediaWiki 1.22.0 --- extensions/Gadgets/Gadgets_body.php | 264 +++++------------------------------- 1 file changed, 32 insertions(+), 232 deletions(-) (limited to 'extensions/Gadgets/Gadgets_body.php') diff --git a/extensions/Gadgets/Gadgets_body.php b/extensions/Gadgets/Gadgets_body.php index e787062a..1e043a82 100644 --- a/extensions/Gadgets/Gadgets_body.php +++ b/extensions/Gadgets/Gadgets_body.php @@ -11,235 +11,6 @@ * @license GNU General Public Licence 2.0 or later */ -class GadgetHooks { - /** - * ArticleSaveComplete hook handler. - * - * @param $article Article - * @param $user User - * @param $text String: New page text - * @return bool - */ - public static function articleSaveComplete( $article, $user, $text ) { - // update cache if MediaWiki:Gadgets-definition was edited - $title = $article->getTitle(); - if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getText() == 'Gadgets-definition' ) { - Gadget::loadStructuredList( $text ); - } - return true; - } - - /** - * UserGetDefaultOptions hook handler - * @param $defaultOptions Array of default preference keys and values - * @return bool - */ - public static function userGetDefaultOptions( &$defaultOptions ) { - $gadgets = Gadget::loadStructuredList(); - if ( !$gadgets ) { - return true; - } - - /** - * @var $gadget Gadget - */ - foreach ( $gadgets as $thisSection ) { - foreach ( $thisSection as $gadgetId => $gadget ) { - if ( $gadget->isOnByDefault() ) { - $defaultOptions['gadget-' . $gadgetId] = 1; - } - } - } - - return true; - } - - /** - * GetPreferences hook handler. - * @param $user User - * @param $preferences Array: Preference descriptions - * @return bool - */ - public static function getPreferences( $user, &$preferences ) { - $gadgets = Gadget::loadStructuredList(); - if ( !$gadgets ) { - return true; - } - - $options = array(); - $default = array(); - foreach ( $gadgets as $section => $thisSection ) { - $available = array(); - - /** - * @var $gadget Gadget - */ - foreach ( $thisSection as $gadget ) { - if ( $gadget->isAllowed( $user ) ) { - $gname = $gadget->getName(); - # bug 30182: dir="auto" because it's often not translated - $desc = '' . $gadget->getDescription() . ''; - $available[$desc] = $gname; - if ( $gadget->isEnabled( $user ) ) { - $default[] = $gname; - } - } - } - - if ( $section !== '' ) { - $section = wfMessage( "gadget-section-$section" )->parse(); - - if ( count ( $available ) ) { - $options[$section] = $available; - } - } else { - $options = array_merge( $options, $available ); - } - } - - $preferences['gadgets-intro'] = - array( - 'type' => 'info', - 'label' => ' ', - 'default' => Xml::tags( 'tr', array(), - Xml::tags( 'td', array( 'colspan' => 2 ), - wfMessage( 'gadgets-prefstext' )->parseAsBlock() ) ), - 'section' => 'gadgets', - 'raw' => 1, - 'rawrow' => 1, - ); - - $preferences['gadgets'] = - array( - 'type' => 'multiselect', - 'options' => $options, - 'section' => 'gadgets', - 'label' => ' ', - 'prefix' => 'gadget-', - 'default' => $default, - ); - - return true; - } - - /** - * ResourceLoaderRegisterModules hook handler. - * @param $resourceLoader ResourceLoader - * @return bool - */ - public static function registerModules( &$resourceLoader ) { - $gadgets = Gadget::loadList(); - if ( !$gadgets ) { - return true; - } - - /** - * @var $g Gadget - */ - foreach ( $gadgets as $g ) { - $module = $g->getModule(); - if ( $module ) { - $resourceLoader->register( $g->getModuleName(), $module ); - } - } - return true; - - } - - /** - * BeforePageDisplay hook handler. - * @param $out OutputPage - * @return bool - */ - public static function beforePageDisplay( $out ) { - wfProfileIn( __METHOD__ ); - - $gadgets = Gadget::loadList(); - if ( !$gadgets ) { - wfProfileOut( __METHOD__ ); - return true; - } - - $lb = new LinkBatch(); - $lb->setCaller( __METHOD__ ); - $pages = array(); - - /** - * @var $gadget Gadget - */ - $user = $out->getUser(); - foreach ( $gadgets as $gadget ) { - if ( $gadget->isEnabled( $user ) && $gadget->isAllowed( $user ) ) { - if ( $gadget->hasModule() ) { - $out->addModuleStyles( $gadget->getModuleName() ); - $out->addModules( $gadget->getModuleName() ); - } - - foreach ( $gadget->getLegacyScripts() as $page ) { - $lb->add( NS_MEDIAWIKI, $page ); - $pages[] = $page; - } - } - } - - - // Allow other extensions, e.g. MobileFrontend, to disallow legacy gadgets - if ( wfRunHooks( 'Gadgets::allowLegacy', array( $out->getContext() ) ) ) { - $lb->execute( __METHOD__ ); - - $done = array(); - - foreach ( $pages as $page ) { - if ( isset( $done[$page] ) ) { - continue; - } - - $done[$page] = true; - self::applyScript( $page, $out ); - } - } - wfProfileOut( __METHOD__ ); - - return true; - } - - /** - * Adds one legacy script to output. - * - * @param string $page Unprefixed page title - * @param OutputPage $out - */ - private static function applyScript( $page, $out ) { - global $wgJsMimeType; - - # bug 22929: disable gadgets on sensitive pages. Scripts loaded through the - # ResourceLoader handle this in OutputPage::getModules() - # TODO: make this extension load everything via RL, then we don't need to worry - # about any of this. - if ( $out->getAllowedModules( ResourceLoaderModule::TYPE_SCRIPTS ) < ResourceLoaderModule::ORIGIN_USER_SITEWIDE ) { - return; - } - - $t = Title::makeTitleSafe( NS_MEDIAWIKI, $page ); - if ( !$t ) { - return; - } - - $u = $t->getLocalURL( 'action=raw&ctype=' . $wgJsMimeType ); - $out->addScriptFile( $u, $t->getLatestRevID() ); - } - - /** - * UnitTestsList hook handler - * @param array $files - * @return bool - */ - public static function onUnitTestsList( array &$files ) { - $testDir = __DIR__ . '/tests/'; - $files = array_merge( $files, glob( "$testDir/*Test.php" ) ); - return true; - } -} /** * Wrapper for one gadget. @@ -248,7 +19,7 @@ class Gadget { /** * Increment this when changing class structure */ - const GADGET_CLASS_VERSION = 6; + const GADGET_CLASS_VERSION = 7; private $version = self::GADGET_CLASS_VERSION, $scripts = array(), @@ -261,6 +32,7 @@ class Gadget { $requiredSkins = array(), $targets = array( 'desktop' ), $onByDefault = false, + $position = 'bottom', $category; /** @@ -310,6 +82,9 @@ class Gadget { case 'targets': $gadget->targets = $params; break; + case 'top': + $gadget->position = 'top'; + break; } } @@ -463,7 +238,7 @@ class Gadget { return null; } - return new GadgetResourceLoaderModule( $pages, $this->dependencies, $this->targets ); + return new GadgetResourceLoaderModule( $pages, $this->dependencies, $this->targets, $this->position ); } /** @@ -501,6 +276,14 @@ class Gadget { return $this->requiredSkins; } + /** + * Returns the position of this Gadget's ResourceLoader module + * @return String: 'bottom' or 'top' + */ + public function getPosition() { + return $this->position; + } + /** * Loads and returns a list of all gadgets * @return Mixed: Array of gadgets or false @@ -614,6 +397,13 @@ class Gadget { } } + if ( !count( $gadgets ) ) { + // Don't cache in case we couldn't find any gadgets. Bug 37228 + $gadgets = false; + wfProfileOut( __METHOD__ ); + return $gadgets; + } + // cache for a while. gets purged automatically when MediaWiki:Gadgets-definition is edited $wgMemc->set( $key, $gadgets, 60 * 60 * 24 ); $source = $forceNewText !== null ? 'input text' : 'MediaWiki:Gadgets-definition'; @@ -641,11 +431,13 @@ class GadgetResourceLoaderModule extends ResourceLoaderWikiModule { * ) * @param $dependencies Array: Names of resources this module depends on * @param $targets Array: List of targets this module support + * @param $position String: 'bottom' or 'top' */ - public function __construct( $pages, $dependencies, $targets ) { + public function __construct( $pages, $dependencies, $targets, $position ) { $this->pages = $pages; $this->dependencies = $dependencies; $this->targets = $targets; + $this->position = $position; } /** @@ -664,4 +456,12 @@ class GadgetResourceLoaderModule extends ResourceLoaderWikiModule { public function getDependencies() { return $this->dependencies; } + + /** + * Overrides ResourceLoaderModule::getPosition() + * @return String: 'bottom' or 'top' + */ + public function getPosition() { + return $this->position; + } } -- cgit v1.2.3-54-g00ecf