diff --git a/.github/workflows/php-pr-checks.yml b/.github/workflows/php-pr-checks.yml index 6cf4ceb0..10c017b5 100644 --- a/.github/workflows/php-pr-checks.yml +++ b/.github/workflows/php-pr-checks.yml @@ -4,14 +4,14 @@ on: branches: '**' push: - branches: [ master, MW_1_37, REL1_39 ] + branches: [ REL1_43 ] jobs: build: strategy: matrix: php_version: ['8.0'] - mw: ['REL1_39'] + mw: ['REL1_43'] runs-on: ubuntu-latest steps: @@ -76,7 +76,3 @@ jobs: - name: Run PHPCS working-directory: ./mediawiki/extensions/Thanks run: composer phpcs - - - name: Run Phan static analysis - working-directory: ./mediawiki/extensions/Thanks - run: composer phan diff --git a/extension.json b/extension.json index 33c6fb8b..2b841e2a 100644 --- a/extension.json +++ b/extension.json @@ -161,11 +161,11 @@ "PageHistoryBeforeList": "main", "PageHistoryPager::doBatchLookups": "main", "ChangesListInitRows": "main", - "EnhancedChangesListModifyLineData": "MediaWiki\\Extension\\Thanks\\Hooks::onEnhancedChangesListModifyLineData", + "EnhancedChangesListModifyLineData": "main", "EnhancedChangesListModifyBlockLineData": "MediaWiki\\Extension\\Thanks\\Hooks::onEnhancedChangesListModifyBlockLineData", - "OldChangesListRecentChangesLine": "MediaWiki\\Extension\\Thanks\\Hooks::onOldChangesListRecentChangesLine", - "ContributionsLineEnding": "MediaWiki\\Extension\\Thanks\\Hooks::onContributionsLineEnding" - }, + "OldChangesListRecentChangesLine": "main", + "ContributionsLineEnding": "main" + }, "HookHandlers": { "main": { "class": "MediaWiki\\Extension\\Thanks\\Hooks", diff --git a/includes/Api/ApiCoreThank.php b/includes/Api/ApiCoreThank.php index 98120d8d..7a6e2a5c 100644 --- a/includes/Api/ApiCoreThank.php +++ b/includes/Api/ApiCoreThank.php @@ -7,7 +7,11 @@ use MediaWiki\Api\ApiBase; use MediaWiki\Api\ApiMain; use MediaWiki\Extension\Notifications\DiscussionParser; -use MediaWiki\Extension\Notifications\Model\Event; +use MediaWiki\Extension\Thanks\Storage\Exceptions\InvalidLogType; +use MediaWiki\Extension\Thanks\Storage\Exceptions\LogDeleted; +use MediaWiki\Extension\Thanks\Storage\LogStore; +use MediaWiki\Extension\Thanks\ThanksCache; +use MediaWiki\MediaWikiServices; use MediaWiki\Permissions\PermissionManager; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\RevisionStore; @@ -16,8 +20,6 @@ use MediaWiki\User\UserFactory; use MediaWiki\User\UserIdentity; use RequestContext; -use Title; -use User; use Wikimedia\ParamValidator\ParamValidator; use Wikimedia\ParamValidator\TypeDef\IntegerDef; diff --git a/includes/Hooks.php b/includes/Hooks.php index 2d432d0a..1b79b1e6 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -5,16 +5,10 @@ namespace MediaWiki\Extension\Thanks; use Article; -use CategoryPage; -use ConfigException; use ContribsPager; use DatabaseLogEntry; use DifferenceEngine; -use EchoEvent; use EnhancedChangesList; -use ExtensionRegistry; -use Html; -use ImagePage; use LogEventsList; use LogPage; use MediaWiki\Api\ApiModuleManager; @@ -30,23 +24,24 @@ use MediaWiki\Diff\Hook\DiffToolsHook; use MediaWiki\Extension\Thanks\Api\ApiFlowThank; use MediaWiki\Hook\ChangesListInitRowsHook; +use MediaWiki\Hook\ContributionsLineEndingHook; +use MediaWiki\Hook\EnhancedChangesListModifyLineDataHook; use MediaWiki\Hook\GetLogTypesOnUserHook; use MediaWiki\Hook\HistoryToolsHook; use MediaWiki\Hook\LogEventsListLineEndingHook; +use MediaWiki\Hook\OldChangesListRecentChangesLineHook; use MediaWiki\Hook\PageHistoryBeforeListHook; use MediaWiki\Hook\PageHistoryPager__doBatchLookupsHook; use MediaWiki\Html\Html; use MediaWiki\Linker\LinkTarget; use MediaWiki\MediaWikiServices; -use MediaWiki\Page\PageIdentityValue; -use MediaWiki\Revision\MutableRevisionRecord; use MediaWiki\Output\Hook\BeforePageDisplayHook; use MediaWiki\Output\OutputPage; +use MediaWiki\Page\PageIdentityValue; use MediaWiki\Permissions\PermissionManager; use MediaWiki\Registration\ExtensionRegistry; -use MediaWiki\Revision\RevisionLookup; -use MediaWiki\Page\PageIdentityValue; use MediaWiki\Revision\MutableRevisionRecord; +use MediaWiki\Revision\RevisionLookup; use MediaWiki\Revision\RevisionRecord; use MediaWiki\SpecialPage\SpecialPage; use MediaWiki\Title\Title; @@ -56,16 +51,9 @@ use MediaWiki\User\UserIdentity; use MediaWiki\User\UserIdentityValue; use MobileContext; -use OldChangesList; -use OutputPage; use RecentChange; -use RequestContext; use Skin; -use SpecialPage; use stdClass; -use Title; -use User; -use WikiPage; /** * Hooks for Thanks extension @@ -73,11 +61,12 @@ * @file * @ingroup Extensions */ -class Hooks implements +abstract class Hooks implements ApiMain__moduleManagerHook, BeforePageDisplayHook, DiffToolsHook, DifferenceEngineViewHeaderHook, + EnhancedChangesListModifyLineDataHook, GetAllBlockActionsHook, GetLogTypesOnUserHook, HistoryToolsHook, @@ -85,7 +74,9 @@ class Hooks implements LogEventsListLineEndingHook, PageHistoryBeforeListHook, PageHistoryPager__doBatchLookupsHook, - ChangesListInitRowsHook + ChangesListInitRowsHook, + OldChangesListRecentChangesLineHook, + ContributionsLineEndingHook { private Config $config; private GenderCache $genderCache; @@ -125,6 +116,7 @@ public function onHistoryTools( $userIdentity ) { $this->insertThankLink( $revisionRecord, + $links, $userIdentity ); // [UGC-4257] Don't show thank links if user doesn't have specific permission if ( !ThanksPermissions::checkUserPermissionsForThanks( RequestContext::getMain()->getOutput() ) ) { return; @@ -297,15 +289,6 @@ protected function generateThankElement( if ( $sender->getRequest()->getSessionData( "thanks-thanked-$sessionKey" ) ) { $class .= ' mw-thanks-thanked'; } - /** - * Fandom change - start - UGC-4533 - Cache thanks data in session in a better way - * @author Mkostrzewski - */ - if ( ( new ThanksCache( - MediaWikiServices::getInstance()->getDBLoadBalancer(), - MediaWikiServices::getInstance()->getMainConfig() - ) )->haveThanked( RequestContext::getMain(), $sender->getActorId(), $id, $type ) ) { - // Fandom change - end /** * Fandom change - start - UGC-4533 - Cache thanks data in session in a better way * @author Mkostrzewski @@ -426,13 +409,14 @@ public function onLocalUserCreated( $user, $autocreated ) { */ public static function onBeforeSpecialMobileDiffDisplay( &$output, $ctx, $revisions ) { $rev = $revisions[1]; + $services = MediaWikiServices::getInstance(); // If the MobileFrontend extension is installed and the user is // logged in or recipient is not a bot if bots cannot receive thanks, show a 'Thank' link. if ( $rev && ExtensionRegistry::getInstance()->isLoaded( 'MobileFrontend' ) && $rev->getUser() - && self::canReceiveThanks( $rev->getUser() ) + && self::canReceiveThanks( $services->getMainConfig(), $services->getUserFactory(), $rev->getUser() ) && $output->getUser()->isRegistered() ) { $output->addModules( [ 'ext.thanks.mobilediff' ] ); @@ -582,14 +566,7 @@ public function onLogEventsListLineEnding( * @param string[] &$attribs * @return void */ - public static function onEnhancedChangesListModifyLineData( - EnhancedChangesList $changesList, - array &$data, - array $block, - RecentChange $rc, - array &$classes, - array &$attribs - ): void { + public function onEnhancedChangesListModifyLineData( $changesList, &$data, $block, $rc, &$classes, &$attribs ) { if ( !in_array( 'ext.thanks.corethank', $changesList->getOutput()->getModules() ) ) { self::addThanksModule( $changesList->getOutput() ); } @@ -604,13 +581,9 @@ public static function onEnhancedChangesListModifyLineData( } } - public static function onOldChangesListRecentChangesLine( - OldChangesList $changesList, - &$s, - $rc, - ) { - if ( !in_array( 'ext.thanks.corethank', $changesList->getOutput()->getModules() ) ) { - self::addThanksModule( $changesList->getOutput() ); + public function onOldChangesListRecentChangesLine( $changeslist, &$s, $rc, &$classes, &$attribs ) { + if ( !in_array( 'ext.thanks.corethank', $changeslist->getOutput()->getModules() ) ) { + self::addThanksModule( $changeslist->getOutput() ); } $revision = self::getRevisionForRecentChange( $rc ); @@ -619,7 +592,7 @@ public static function onOldChangesListRecentChangesLine( self::insertThankLink( $revision, $holder, - $changesList->getUser() + $changeslist->getUser() ); if ( count( $holder ) ) { @@ -628,57 +601,6 @@ public static function onOldChangesListRecentChangesLine( } } - public static function onOldChangesListRecentChangesLine( - OldChangesList $changesList, - &$s, - $rc, - ) { - if ( !in_array( 'ext.thanks.corethank', $changesList->getOutput()->getModules() ) ) { - self::addThanksModule( $changesList->getOutput() ); - } - - $revision = self::getRevisionForRecentChange( $rc ); - if ( $revision ) { - $holder = []; - self::insertThankLink( - $revision, - $holder, - $changesList->getUser() - ); - - if ( count( $holder ) ) { - $s .= ' ' . $holder[0]; - } - } - } - - /** - * Fandom change UGC-4012 - Add thank link to the recent changes list - * - * @link https://www.mediawiki.org/wiki/Manual:EnhancedChangesListModifyBlockLineDataHook.php - * @param EnhancedChangesList $changesList - * @param array &$data - * @param RecentChange $rc - * @return void - */ - public static function onEnhancedChangesListModifyBlockLineData( - EnhancedChangesList $changesList, - array &$data, - RecentChange $rc - ): void { - if ( !in_array( 'ext.thanks.corethank', $changesList->getOutput()->getModules() ) ) { - self::addThanksModule( $changesList->getOutput() ); - } - $revision = self::getRevisionForRecentChange( $rc ); - if ( $revision ) { - self::insertThankLink( - $revision, - $data, - $changesList->getUser() - ); - } - } - /** * Convenience function to get the {@link RevisionRecord} corresponding to a RecentChanges entry. * This is an optimization to avoid triggering a query to fetch revision data for each RecentChanges entry. @@ -725,19 +647,13 @@ private static function getRevisionForRecentChange( RecentChange $recentChange ) /** * Fandom change UGC-4012 - Add thank link to Special:Contributions page * @param ContribsPager $pager - * @param string &$line + * @param string &$ret * @param stdClass $row * @param array &$classes * @param array &$attribs * @return void */ - public static function onContributionsLineEnding( - ContribsPager $pager, - string &$line, - stdClass $row, - array &$classes, - array &$attribs - ): void { + public function onContributionsLineEnding( $pager, &$ret, $row, &$classes, &$attribs ): void { $out = RequestContext::getMain()->getOutput(); // [UGC-4257] Don't show thank links if user doesn't have specific permission @@ -758,7 +674,7 @@ public static function onContributionsLineEnding( if ( isset( $links[0] ) ) { // [UGC-4257] Wrap the thank link in a span so that it can be styled $linkWithSpanParent = "$links[0]"; - $line .= $linkWithSpanParent; + $ret .= $linkWithSpanParent; } } } diff --git a/includes/ThanksPermissions.php b/includes/ThanksPermissions.php index cbffb807..53b93b7f 100644 --- a/includes/ThanksPermissions.php +++ b/includes/ThanksPermissions.php @@ -7,17 +7,6 @@ class ThanksPermissions { - private static function isMobile() { - if ( class_exists( 'MobileContext' ) ) { - /** @var MobileContext $mobileContext */ - $mobileContext = MediaWikiServices::getInstance()->getService( 'MobileFrontend.Context' ); - - return $mobileContext->shouldDisplayMobileView(); - } - - return false; - } - private const REQUIRE_USER_GROUPS = [ 'sysop', 'content-moderator', 'threadmoderator', 'rollback', 'staff', 'soap', 'wiki-representative', 'wiki-specialist' ]; @@ -32,9 +21,6 @@ private static function isMobile() { return false; } - private const REQUIRE_USER_GROUPS = [ 'sysop', 'content-moderator', 'threadmoderator', 'rollback', 'staff', - 'soap', 'wiki-representative', 'wiki-specialist' ]; - /** * Check if the user is allowed to send thanks on pages: * - Desktop Special:Contributions