Use HookHandlers for MobileFrontend hook

Bug: T271021
Change-Id: I9293e1fee102b9a4274ef460b9c7556e0c7c6f6a
This commit is contained in:
Umherirrender 2023-08-15 10:03:09 +02:00
parent d96e200072
commit 7f3a11f327
4 changed files with 68 additions and 33 deletions

View file

@ -2,4 +2,18 @@
$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php'; $cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
$cfg['directory_list'] = array_merge(
$cfg['directory_list'],
[
'../../extensions/MobileFrontend',
]
);
$cfg['exclude_analysis_directory_list'] = array_merge(
$cfg['exclude_analysis_directory_list'],
[
'../../extensions/MobileFrontend',
]
);
return $cfg; return $cfg;

View file

@ -31,7 +31,7 @@
"ParserModifyImageHTML": "parser", "ParserModifyImageHTML": "parser",
"ParserTestGlobals": "parser", "ParserTestGlobals": "parser",
"SearchResultProvideThumbnail": "search", "SearchResultProvideThumbnail": "search",
"SpecialMobileEditWatchlist::images": "PageImages\\PageImages::onSpecialMobileEditWatchlistImages" "SpecialMobileEditWatchlist::images": "mobile"
}, },
"HookHandlers": { "HookHandlers": {
"main": { "main": {
@ -45,6 +45,9 @@
"search": { "search": {
"class": "PageImages\\Hooks\\SearchResultProvideThumbnailHookHandler", "class": "PageImages\\Hooks\\SearchResultProvideThumbnailHookHandler",
"services": [ "SearchResultThumbnailProvider", "PageProps", "RepoGroup" ] "services": [ "SearchResultThumbnailProvider", "PageProps", "RepoGroup" ]
},
"mobile": {
"class": "PageImages\\Hooks\\MobileFrontendHookHandlers"
} }
}, },
"JobClasses": { "JobClasses": {

View file

@ -0,0 +1,49 @@
<?php
// phpcs:disable MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName
namespace PageImages\Hooks;
use IContextSource;
use MediaWiki\Title\Title;
use MobileFrontend\Hooks\SpecialMobileEditWatchlistImagesHook;
use PageImages\PageImages;
/**
* Hooks from MobileFrontend extension,
* which is optional to use with this extension.
*/
class MobileFrontendHookHandlers implements SpecialMobileEditWatchlistImagesHook {
/**
* SpecialMobileEditWatchlist::images hook handler, adds images to mobile watchlist A-Z view
*
* @param IContextSource $context Context object. Ignored
* @param array[] &$watchlist Array of relevant pages on the watchlist, sorted by namespace
* @param array[] &$images Array of images to populate
*/
public function onSpecialMobileEditWatchlist__images(
IContextSource $context, array &$watchlist, array &$images
) {
$ids = [];
foreach ( $watchlist as $ns => $pages ) {
foreach ( array_keys( $pages ) as $dbKey ) {
$title = Title::makeTitle( $ns, $dbKey );
// Getting page ID here is safe because SpecialEditWatchlist::getWatchlistInfo()
// uses LinkBatch
$id = $title->getArticleID();
if ( $id ) {
$ids[$id] = $dbKey;
}
}
}
$data = PageImages::getImages( array_keys( $ids ) );
foreach ( $data as $id => $page ) {
if ( isset( $page['pageimage'] ) ) {
$images[ $page['ns'] ][ $ids[$id] ] = $page['pageimage'];
}
}
}
}

View file

@ -218,37 +218,6 @@ class PageImages implements
} }
} }
/**
* SpecialMobileEditWatchlist::images hook handler, adds images to mobile watchlist A-Z view
*
* @param IContextSource $context Context object. Ignored
* @param array[] $watchlist Array of relevant pages on the watchlist, sorted by namespace
* @param array[] &$images Array of images to populate
*/
public static function onSpecialMobileEditWatchlistImages(
IContextSource $context, array $watchlist, array &$images
) {
$ids = [];
foreach ( $watchlist as $ns => $pages ) {
foreach ( array_keys( $pages ) as $dbKey ) {
$title = Title::makeTitle( $ns, $dbKey );
// Getting page ID here is safe because SpecialEditWatchlist::getWatchlistInfo()
// uses LinkBatch
$id = $title->getArticleID();
if ( $id ) {
$ids[$id] = $dbKey;
}
}
}
$data = self::getImages( array_keys( $ids ) );
foreach ( $data as $id => $page ) {
if ( isset( $page['pageimage'] ) ) {
$images[ $page['ns'] ][ $ids[$id] ] = $page['pageimage'];
}
}
}
/** /**
* Returns image information for pages with given ids * Returns image information for pages with given ids
* *
@ -257,7 +226,7 @@ class PageImages implements
* *
* @return array[] * @return array[]
*/ */
private static function getImages( array $pageIds, $size = 0 ) { public static function getImages( array $pageIds, $size = 0 ) {
$ret = []; $ret = [];
foreach ( array_chunk( $pageIds, ApiBase::LIMIT_SML1 ) as $chunk ) { foreach ( array_chunk( $pageIds, ApiBase::LIMIT_SML1 ) as $chunk ) {
$request = [ $request = [