Jdlrobson has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/370876 )
Change subject: Merge footer hooks with Hooks ...................................................................... Merge footer hooks with Hooks per Baha's suggestion we have no need for two Hooks files now so let's merge them Bug: T165991 Change-Id: I12c62aef837f50589297477f46bdf0f0d6b5536a --- M extension.json D includes/FooterHooks.php M includes/Hooks.php 3 files changed, 206 insertions(+), 215 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/RelatedArticles refs/changes/76/370876/1 diff --git a/extension.json b/extension.json index 21f4c85..e2be270 100644 --- a/extension.json +++ b/extension.json @@ -14,7 +14,6 @@ "AutoloadClasses": { "RelatedArticles\\ResourceLoaderMuHoganModule": "includes/ResourceLoaderMuhoganModule.php", "RelatedArticles\\Hooks": "includes/Hooks.php", - "RelatedArticles\\FooterHooks": "includes/FooterHooks.php" }, "ExtensionMessagesFiles": { "RelatedArticlesMagic": "RelatedArticles.i18n.magic.php" @@ -32,19 +31,19 @@ ], "MakeGlobalVariablesScript": [ - "RelatedArticles\\FooterHooks::onMakeGlobalVariablesScript" + "RelatedArticles\\Hooks::onMakeGlobalVariablesScript" ], "BeforePageDisplay": [ - "RelatedArticles\\FooterHooks::onBeforePageDisplay" + "RelatedArticles\\Hooks::onBeforePageDisplay" ], "EventLoggingRegisterSchemas": [ - "RelatedArticles\\FooterHooks::onEventLoggingRegisterSchemas" + "RelatedArticles\\Hooks::onEventLoggingRegisterSchemas" ], "ResourceLoaderGetConfigVars": [ - "RelatedArticles\\FooterHooks::onResourceLoaderGetConfigVars" + "RelatedArticles\\Hooks::onResourceLoaderGetConfigVars" ], "ResourceLoaderRegisterModules": [ - "RelatedArticles\\FooterHooks::onResourceLoaderRegisterModules" + "RelatedArticles\\Hooks::onResourceLoaderRegisterModules" ] }, "MessagesDirs": { diff --git a/includes/FooterHooks.php b/includes/FooterHooks.php deleted file mode 100644 index d6d832b..0000000 --- a/includes/FooterHooks.php +++ /dev/null @@ -1,209 +0,0 @@ -<?php - -namespace RelatedArticles; - -use BetaFeatures; -use MediaWiki\MediaWikiServices; -use OutputPage; -use ResourceLoader; -use Skin; -use User; -use DisambiguatorHooks; -use Title; - -class FooterHooks { - - /** - * Handler for the <code>MakeGlobalVariablesScript</code> hook. - * - * Sets the value of the <code>wgRelatedArticles</code> global variable - * to the list of related articles in the cached parser output. - * - * @param array &$vars variables to be added into the output of OutputPage::headElement. - * @param OutputPage $out OutputPage instance calling the hook - * @return bool Always <code>true</code> - */ - public static function onMakeGlobalVariablesScript( &$vars, OutputPage $out ) { - $config = MediaWikiServices::getInstance()->getConfigFactory() - ->makeConfig( 'RelatedArticles' ); - - $vars['wgRelatedArticles'] = $out->getProperty( 'RelatedArticles' ); - $vars['wgRelatedArticlesUseCirrusSearch'] = $config->get( 'RelatedArticlesUseCirrusSearch' ); - $vars['wgRelatedArticlesOnlyUseCirrusSearch'] = - $config->get( 'RelatedArticlesOnlyUseCirrusSearch' ); - - return true; - } - - /** - * Uses the Disambiguator extension to test whether the page is a disambiguation page. - * - * If the Disambiguator extension isn't installed, then the test always fails, i.e. the page is - * never a disambiguation page. - * - * @return boolean - */ - private static function isDisambiguationPage( Title $title ) { - return \ExtensionRegistry::getInstance()->isLoaded( 'Disambiguator' ) && - DisambiguatorHooks::isDisambiguationPage( $title ); - } - - /** - * Check whether the output page is a diff page - * - * @param OutputPage $out - * @return bool - */ - private static function isDiffPage( OutputPage $out ) { - $request = $out->getRequest(); - $type = $request->getText( 'type' ); - $diff = $request->getText( 'diff' ); - $oldId = $request->getText( 'oldid' ); - $isSpecialMobileDiff = $out->getTitle()->isSpecial( 'MobileDiff' ); - - return $type === 'revision' || $diff || $oldId || $isSpecialMobileDiff; - } - - /** - * Is ReadMore allowed on skin? - * - * The feature is allowed on all skins as long as they are whitelisted - * in the configuration variable `RelatedArticlesFooterWhitelistedSkins`. - * - * @param User $user - * @param Skin $skin - * @return bool - */ - private static function isReadMoreAllowedOnSkin( User $user, Skin $skin ) { - $config = MediaWikiServices::getInstance()->getConfigFactory() - ->makeConfig( 'RelatedArticles' ); - $skins = $config->get( 'RelatedArticlesFooterWhitelistedSkins' ); - $skinName = $skin->getSkinName(); - return in_array( $skinName, $skins ); - } - - /** - * Handler for the <code>BeforePageDisplay</code> hook. - * - * Adds the <code>ext.relatedArticles.readMore.bootstrap</code> module - * to the output when: - * - * <ol> - * <li>On mobile, the output is being rendered with - * <code>SkinMinervaBeta<code></li> - * <li>The page is in mainspace</li> - * <li>The action is 'view'</li> - * <li>The page is not the Main Page</li> - * <li>The page is not a disambiguation page</li> - * <li>The page is not a diff page</li> - * <li>The feature is allowed on the skin (see isReadMoreAllowedOnSkin() above)</li> - * </ol> - * - * @param OutputPage $out The OutputPage object - * @param Skin $skin Skin object that will be used to generate the page - * @return bool Always <code>true</code> - */ - public static function onBeforePageDisplay( OutputPage $out, Skin $skin ) { - $config = MediaWikiServices::getInstance()->getConfigFactory() - ->makeConfig( 'RelatedArticles' ); - - $title = $out->getContext()->getTitle(); - $action = $out->getRequest()->getText( 'action', 'view' ); - - if ( - $title->inNamespace( NS_MAIN ) && - // T120735 - $action === 'view' && - !$title->isMainPage() && - !self::isDisambiguationPage( $title ) && - !self::isDiffPage( $out ) && - self::isReadMoreAllowedOnSkin( $out->getUser(), $skin ) - ) { - $out->addModules( [ 'ext.relatedArticles.readMore.bootstrap' ] ); - } - - return true; - } - - /** - * EventLoggingRegisterSchemas hook handler. - * - * Registers our EventLogging schemas so that they can be converted to - * ResourceLoaderSchemaModules by the EventLogging extension. - * - * If the module has already been registered in - * onResourceLoaderRegisterModules, then it is overwritten. - * - * @param array &$schemas The schemas currently registered with the EventLogging - * extension - * @return bool Always true - */ - public static function onEventLoggingRegisterSchemas( &$schemas ) { - // @see https://meta.wikimedia.org/wiki/Schema:RelatedArticles - $schemas['RelatedArticles'] = 16352530; - - return true; - } - - /** - * ResourceLoaderGetConfigVars hook handler for setting a config variable - * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars - * - * @param array &$vars Array of variables to be added into the output of the startup module. - * @return bool - */ - public static function onResourceLoaderGetConfigVars( &$vars ) { - $config = MediaWikiServices::getInstance()->getConfigFactory() - ->makeConfig( 'RelatedArticles' ); - $vars['wgRelatedArticlesLoggingBucketSize'] = - $config->get( 'RelatedArticlesLoggingBucketSize' ); - $vars['wgRelatedArticlesEnabledBucketSize'] - = $config->get( 'RelatedArticlesEnabledBucketSize' ); - - $limit = $config->get( 'RelatedArticlesCardLimit' ); - $vars['wgRelatedArticlesCardLimit'] = $limit; - if ( $limit < 1 || $limit > 20 ) { - throw new \RuntimeException( - 'The value of wgRelatedArticlesCardLimit is not valid. It should be between 1 and 20.' - ); - } - return true; - } - - /** - * Register the "ext.relatedArticles.readMore.eventLogging" module. - * Optionally update the dependencies and scripts if EventLogging is installed. - * - * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules - * - * @param ResourceLoader &$resourceLoader The ResourceLoader object - * @return bool - */ - public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) { - $dependencies = []; - $scripts = []; - - if ( class_exists( 'EventLogging' ) ) { - $dependencies[] = "mediawiki.user"; - $dependencies[] = "mediawiki.viewport"; - $dependencies[] = "ext.eventLogging.Schema"; - $scripts[] = "resources/ext.relatedArticles.readMore.eventLogging/index.js"; - } - - $resourceLoader->register( - "ext.relatedArticles.readMore.eventLogging", - [ - "dependencies" => $dependencies, - "scripts" => $scripts, - "targets" => [ - "desktop", - "mobile" - ], - "localBasePath" => __DIR__ . "/..", - "remoteExtPath" => "RelatedArticles" - ] - ); - - return true; - } -} diff --git a/includes/Hooks.php b/includes/Hooks.php index 7027581..a05cc83 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -5,10 +5,211 @@ use Parser; use OutputPage; use ParserOutput; +use BetaFeatures; +use MediaWiki\MediaWikiServices; +use ResourceLoader; +use Skin; +use User; +use DisambiguatorHooks; +use Title; class Hooks { /** + * Handler for the <code>MakeGlobalVariablesScript</code> hook. + * + * Sets the value of the <code>wgRelatedArticles</code> global variable + * to the list of related articles in the cached parser output. + * + * @param array &$vars variables to be added into the output of OutputPage::headElement. + * @param OutputPage $out OutputPage instance calling the hook + * @return bool Always <code>true</code> + */ + public static function onMakeGlobalVariablesScript( &$vars, OutputPage $out ) { + $config = MediaWikiServices::getInstance()->getConfigFactory() + ->makeConfig( 'RelatedArticles' ); + + $vars['wgRelatedArticles'] = $out->getProperty( 'RelatedArticles' ); + $vars['wgRelatedArticlesUseCirrusSearch'] = $config->get( 'RelatedArticlesUseCirrusSearch' ); + $vars['wgRelatedArticlesOnlyUseCirrusSearch'] = + $config->get( 'RelatedArticlesOnlyUseCirrusSearch' ); + + return true; + } + + /** + * Uses the Disambiguator extension to test whether the page is a disambiguation page. + * + * If the Disambiguator extension isn't installed, then the test always fails, i.e. the page is + * never a disambiguation page. + * + * @return boolean + */ + private static function isDisambiguationPage( Title $title ) { + return \ExtensionRegistry::getInstance()->isLoaded( 'Disambiguator' ) && + DisambiguatorHooks::isDisambiguationPage( $title ); + } + + /** + * Check whether the output page is a diff page + * + * @param OutputPage $out + * @return bool + */ + private static function isDiffPage( OutputPage $out ) { + $request = $out->getRequest(); + $type = $request->getText( 'type' ); + $diff = $request->getText( 'diff' ); + $oldId = $request->getText( 'oldid' ); + $isSpecialMobileDiff = $out->getTitle()->isSpecial( 'MobileDiff' ); + + return $type === 'revision' || $diff || $oldId || $isSpecialMobileDiff; + } + + /** + * Is ReadMore allowed on skin? + * + * The feature is allowed on all skins as long as they are whitelisted + * in the configuration variable `RelatedArticlesFooterWhitelistedSkins`. + * + * @param User $user + * @param Skin $skin + * @return bool + */ + private static function isReadMoreAllowedOnSkin( User $user, Skin $skin ) { + $config = MediaWikiServices::getInstance()->getConfigFactory() + ->makeConfig( 'RelatedArticles' ); + $skins = $config->get( 'RelatedArticlesFooterWhitelistedSkins' ); + $skinName = $skin->getSkinName(); + return in_array( $skinName, $skins ); + } + + /** + * Handler for the <code>BeforePageDisplay</code> hook. + * + * Adds the <code>ext.relatedArticles.readMore.bootstrap</code> module + * to the output when: + * + * <ol> + * <li>On mobile, the output is being rendered with + * <code>SkinMinervaBeta<code></li> + * <li>The page is in mainspace</li> + * <li>The action is 'view'</li> + * <li>The page is not the Main Page</li> + * <li>The page is not a disambiguation page</li> + * <li>The page is not a diff page</li> + * <li>The feature is allowed on the skin (see isReadMoreAllowedOnSkin() above)</li> + * </ol> + * + * @param OutputPage $out The OutputPage object + * @param Skin $skin Skin object that will be used to generate the page + * @return bool Always <code>true</code> + */ + public static function onBeforePageDisplay( OutputPage $out, Skin $skin ) { + $config = MediaWikiServices::getInstance()->getConfigFactory() + ->makeConfig( 'RelatedArticles' ); + + $title = $out->getContext()->getTitle(); + $action = $out->getRequest()->getText( 'action', 'view' ); + + if ( + $title->inNamespace( NS_MAIN ) && + // T120735 + $action === 'view' && + !$title->isMainPage() && + !self::isDisambiguationPage( $title ) && + !self::isDiffPage( $out ) && + self::isReadMoreAllowedOnSkin( $out->getUser(), $skin ) + ) { + $out->addModules( [ 'ext.relatedArticles.readMore.bootstrap' ] ); + } + + return true; + } + + /** + * EventLoggingRegisterSchemas hook handler. + * + * Registers our EventLogging schemas so that they can be converted to + * ResourceLoaderSchemaModules by the EventLogging extension. + * + * If the module has already been registered in + * onResourceLoaderRegisterModules, then it is overwritten. + * + * @param array &$schemas The schemas currently registered with the EventLogging + * extension + * @return bool Always true + */ + public static function onEventLoggingRegisterSchemas( &$schemas ) { + // @see https://meta.wikimedia.org/wiki/Schema:RelatedArticles + $schemas['RelatedArticles'] = 16352530; + + return true; + } + + /** + * ResourceLoaderGetConfigVars hook handler for setting a config variable + * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars + * + * @param array &$vars Array of variables to be added into the output of the startup module. + * @return bool + */ + public static function onResourceLoaderGetConfigVars( &$vars ) { + $config = MediaWikiServices::getInstance()->getConfigFactory() + ->makeConfig( 'RelatedArticles' ); + $vars['wgRelatedArticlesLoggingBucketSize'] = + $config->get( 'RelatedArticlesLoggingBucketSize' ); + $vars['wgRelatedArticlesEnabledBucketSize'] + = $config->get( 'RelatedArticlesEnabledBucketSize' ); + + $limit = $config->get( 'RelatedArticlesCardLimit' ); + $vars['wgRelatedArticlesCardLimit'] = $limit; + if ( $limit < 1 || $limit > 20 ) { + throw new \RuntimeException( + 'The value of wgRelatedArticlesCardLimit is not valid. It should be between 1 and 20.' + ); + } + return true; + } + + /** + * Register the "ext.relatedArticles.readMore.eventLogging" module. + * Optionally update the dependencies and scripts if EventLogging is installed. + * + * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderRegisterModules + * + * @param ResourceLoader &$resourceLoader The ResourceLoader object + * @return bool + */ + public static function onResourceLoaderRegisterModules( ResourceLoader &$resourceLoader ) { + $dependencies = []; + $scripts = []; + + if ( class_exists( 'EventLogging' ) ) { + $dependencies[] = "mediawiki.user"; + $dependencies[] = "mediawiki.viewport"; + $dependencies[] = "ext.eventLogging.Schema"; + $scripts[] = "resources/ext.relatedArticles.readMore.eventLogging/index.js"; + } + + $resourceLoader->register( + "ext.relatedArticles.readMore.eventLogging", + [ + "dependencies" => $dependencies, + "scripts" => $scripts, + "targets" => [ + "desktop", + "mobile" + ], + "localBasePath" => __DIR__ . "/..", + "remoteExtPath" => "RelatedArticles" + ] + ); + + return true; + } + + /** * Handler for the <code>ParserFirstCallInit</code> hook. * * Registers the <code>related</code> parser function (see -- To view, visit https://gerrit.wikimedia.org/r/370876 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I12c62aef837f50589297477f46bdf0f0d6b5536a Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/RelatedArticles Gerrit-Branch: master Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits