Migrate WikiPage::doEditUpdates() to using PageUpdaterFactory

WikiPage::doEditUpdates() has been deprecated. Using the PageUpdaterFactory's
newDerivedPageDataUpdater() is the new way forward. Also, I made sure to have
the `$options` array with the `causeAction` and `causeAgent` key/value pairs.

Change-Id: I9f2c212d7c83a46799f9f947dc372dc364289680
This commit is contained in:
Derick Alangi 2021-10-06 23:07:55 +01:00
parent b83f718f59
commit 6407361b46
6 changed files with 81 additions and 29 deletions

View file

@ -34,6 +34,7 @@ use MediaWiki\Permissions\PermissionStatus;
use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Revision\RevisionStore; use MediaWiki\Revision\RevisionStore;
use MediaWiki\Revision\SlotRecord; use MediaWiki\Revision\SlotRecord;
use MediaWiki\Storage\PageUpdaterFactory;
use MediaWiki\User\UserEditTracker; use MediaWiki\User\UserEditTracker;
use MediaWiki\User\UserFactory; use MediaWiki\User\UserFactory;
use MediaWiki\User\UserIdentity; use MediaWiki\User\UserIdentity;
@ -130,7 +131,12 @@ class MovePage {
'MaximumMovedPages', 'MaximumMovedPages',
]; ];
/** @var PageUpdaterFactory */
private $pageUpdaterFactory;
/** /**
* @internal Extensions should use the MovePageFactory.
*
* @param Title $oldTitle * @param Title $oldTitle
* @param Title $newTitle * @param Title $newTitle
* @param ServiceOptions|null $options * @param ServiceOptions|null $options
@ -147,6 +153,7 @@ class MovePage {
* @param UserEditTracker|null $userEditTracker * @param UserEditTracker|null $userEditTracker
* @param MovePageFactory|null $movePageFactory * @param MovePageFactory|null $movePageFactory
* @param CollationFactory|null $collationFactory * @param CollationFactory|null $collationFactory
* @param PageUpdaterFactory|null $pageUpdaterFactory
* @deprecated since 1.34, hard deprecated since 1.37. Use MovePageFactory instead. * @deprecated since 1.34, hard deprecated since 1.37. Use MovePageFactory instead.
*/ */
public function __construct( public function __construct(
@ -165,7 +172,8 @@ class MovePage {
UserFactory $userFactory = null, UserFactory $userFactory = null,
UserEditTracker $userEditTracker = null, UserEditTracker $userEditTracker = null,
MovePageFactory $movePageFactory = null, MovePageFactory $movePageFactory = null,
CollationFactory $collationFactory = null CollationFactory $collationFactory = null,
PageUpdaterFactory $pageUpdaterFactory = null
) { ) {
if ( !$options ) { if ( !$options ) {
wfDeprecatedMsg( wfDeprecatedMsg(
@ -201,6 +209,7 @@ class MovePage {
$this->userEditTracker = $userEditTracker ?? $services()->getUserEditTracker(); $this->userEditTracker = $userEditTracker ?? $services()->getUserEditTracker();
$this->movePageFactory = $movePageFactory ?? $services()->getMovePageFactory(); $this->movePageFactory = $movePageFactory ?? $services()->getMovePageFactory();
$this->collationFactory = $collationFactory ?? $services()->getCollationFactory(); $this->collationFactory = $collationFactory ?? $services()->getCollationFactory();
$this->pageUpdaterFactory = $pageUpdaterFactory ?? $services()->getPageUpdaterFactory();
} }
/** /**
@ -1017,8 +1026,17 @@ class MovePage {
$this->hookRunner->onRevisionFromEditComplete( $this->hookRunner->onRevisionFromEditComplete(
$newpage, $nullRevision, $nullRevision->getParentId(), $user, $fakeTags ); $newpage, $nullRevision, $nullRevision->getParentId(), $user, $fakeTags );
$newpage->doEditUpdates( $nullRevision, $user, $options = [
[ 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ] ); 'changed' => false,
'moved' => true,
'oldcountable' => $oldcountable,
'causeAction' => 'edit-page',
'causeAgent' => $user->getName(),
];
$updater = $this->pageUpdaterFactory->newDerivedPageDataUpdater( $newpage );
$updater->prepareUpdate( $nullRevision, $options );
$updater->doUpdates();
WikiPage::onArticleCreate( $nt ); WikiPage::onArticleCreate( $nt );

View file

@ -1070,7 +1070,8 @@ return [
$services->getDBLoadBalancer(), $services->getDBLoadBalancer(),
$services->getRevisionStore(), $services->getRevisionStore(),
$services->getSlotRoleRegistry(), $services->getSlotRoleRegistry(),
$services->getWikiPageFactory() $services->getWikiPageFactory(),
$services->getPageUpdaterFactory()
); );
}, },
@ -1912,7 +1913,8 @@ return [
$services->getDBLoadBalancer(), $services->getDBLoadBalancer(),
$services->getRevisionStore(), $services->getRevisionStore(),
$services->getSlotRoleRegistry(), $services->getSlotRoleRegistry(),
$services->getWikiPageFactory() $services->getWikiPageFactory(),
$services->getPageUpdaterFactory()
); );
}, },
@ -1986,7 +1988,8 @@ return [
WikiMap::getCurrentWikiDbDomain()->getId(), WikiMap::getCurrentWikiDbDomain()->getId(),
WebRequest::getRequestId(), WebRequest::getRequestId(),
$services->getBacklinkCacheFactory(), $services->getBacklinkCacheFactory(),
LoggerFactory::getInstance( 'UndeletePage' ) LoggerFactory::getInstance( 'UndeletePage' ),
$services->getPageUpdaterFactory()
); );
}, },

View file

@ -5,6 +5,7 @@ use MediaWiki\Page\WikiPageFactory;
use MediaWiki\Revision\MutableRevisionRecord; use MediaWiki\Revision\MutableRevisionRecord;
use MediaWiki\Revision\RevisionStore; use MediaWiki\Revision\RevisionStore;
use MediaWiki\Revision\SlotRoleRegistry; use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Storage\PageUpdaterFactory;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\ILoadBalancer;
@ -43,6 +44,9 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
*/ */
private $wikiPageFactory; private $wikiPageFactory;
/** @var PageUpdaterFactory */
private $pageUpdaterFactory;
/** /**
* @param bool $doUpdates * @param bool $doUpdates
* @param LoggerInterface $logger * @param LoggerInterface $logger
@ -50,6 +54,7 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
* @param RevisionStore $revisionStore * @param RevisionStore $revisionStore
* @param SlotRoleRegistry $slotRoleRegistry * @param SlotRoleRegistry $slotRoleRegistry
* @param WikiPageFactory|null $wikiPageFactory * @param WikiPageFactory|null $wikiPageFactory
* @param PageUpdaterFactory|null $pageUpdaterFactory
*/ */
public function __construct( public function __construct(
$doUpdates, $doUpdates,
@ -57,15 +62,19 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
ILoadBalancer $loadBalancer, ILoadBalancer $loadBalancer,
RevisionStore $revisionStore, RevisionStore $revisionStore,
SlotRoleRegistry $slotRoleRegistry, SlotRoleRegistry $slotRoleRegistry,
WikiPageFactory $wikiPageFactory = null WikiPageFactory $wikiPageFactory = null,
PageUpdaterFactory $pageUpdaterFactory = null
) { ) {
$this->doUpdates = $doUpdates; $this->doUpdates = $doUpdates;
$this->logger = $logger; $this->logger = $logger;
$this->loadBalancer = $loadBalancer; $this->loadBalancer = $loadBalancer;
$this->revisionStore = $revisionStore; $this->revisionStore = $revisionStore;
$this->slotRoleRegistry = $slotRoleRegistry; $this->slotRoleRegistry = $slotRoleRegistry;
$services = MediaWikiServices::getInstance();
// @todo: temporary - remove when FileImporter extension is updated // @todo: temporary - remove when FileImporter extension is updated
$this->wikiPageFactory = $wikiPageFactory ?? MediaWikiServices::getInstance()->getWikiPageFactory(); $this->wikiPageFactory = $wikiPageFactory ?? $services->getWikiPageFactory();
$this->pageUpdaterFactory = $pageUpdaterFactory ?? $services->getPageUpdaterFactory();
} }
/** @inheritDoc */ /** @inheritDoc */
@ -219,12 +228,17 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
if ( $changed !== false && $this->doUpdates ) { if ( $changed !== false && $this->doUpdates ) {
$this->logger->debug( __METHOD__ . ": running updates" ); $this->logger->debug( __METHOD__ . ": running updates" );
// countable/oldcountable stuff is handled in WikiImporter::finishImportPage // countable/oldcountable stuff is handled in WikiImporter::finishImportPage
// @todo replace deprecated function
$page->doEditUpdates( $options = [
$inserted, 'created' => $created,
$user, 'oldcountable' => 'no-change',
[ 'created' => $created, 'oldcountable' => 'no-change' ] 'causeAction' => 'edit-page',
); 'causeAgent' => $user->getName(),
];
$updater = $this->pageUpdaterFactory->newDerivedPageDataUpdater( $page );
$updater->prepareUpdate( $inserted, $options );
$updater->doUpdates();
} }
return true; return true;

View file

@ -36,6 +36,7 @@ use MediaWiki\EditPage\SpamChecker;
use MediaWiki\HookContainer\HookContainer; use MediaWiki\HookContainer\HookContainer;
use MediaWiki\Permissions\Authority; use MediaWiki\Permissions\Authority;
use MediaWiki\Revision\RevisionStore; use MediaWiki\Revision\RevisionStore;
use MediaWiki\Storage\PageUpdaterFactory;
use MediaWiki\User\ActorNormalization; use MediaWiki\User\ActorNormalization;
use MediaWiki\User\UserEditTracker; use MediaWiki\User\UserEditTracker;
use MediaWiki\User\UserFactory; use MediaWiki\User\UserFactory;
@ -142,6 +143,9 @@ class PageCommandFactory implements
/** @var LoggerInterface */ /** @var LoggerInterface */
private $undeletePageLogger; private $undeletePageLogger;
/** @var PageUpdaterFactory */
private $pageUpdaterFactory;
public function __construct( public function __construct(
Config $config, Config $config,
LBFactory $lbFactory, LBFactory $lbFactory,
@ -167,7 +171,8 @@ class PageCommandFactory implements
string $localWikiID, string $localWikiID,
string $webRequestID, string $webRequestID,
BacklinkCacheFactory $backlinkCacheFactory, BacklinkCacheFactory $backlinkCacheFactory,
LoggerInterface $undeletePageLogger LoggerInterface $undeletePageLogger,
PageUpdaterFactory $pageUpdaterFactory
) { ) {
$this->config = $config; $this->config = $config;
$this->lbFactory = $lbFactory; $this->lbFactory = $lbFactory;
@ -194,6 +199,7 @@ class PageCommandFactory implements
$this->webRequestID = $webRequestID; $this->webRequestID = $webRequestID;
$this->backlinkCacheFactory = $backlinkCacheFactory; $this->backlinkCacheFactory = $backlinkCacheFactory;
$this->undeletePageLogger = $undeletePageLogger; $this->undeletePageLogger = $undeletePageLogger;
$this->pageUpdaterFactory = $pageUpdaterFactory;
} }
/** /**
@ -289,7 +295,8 @@ class PageCommandFactory implements
$this->userFactory, $this->userFactory,
$this->userEditTracker, $this->userEditTracker,
$this, $this,
$this->collationFactory $this->collationFactory,
$this->pageUpdaterFactory
); );
} }
@ -338,7 +345,8 @@ class PageCommandFactory implements
$this->userFactory, $this->userFactory,
$this->wikiPageFactory, $this->wikiPageFactory,
$page, $page,
$authority $authority,
$this->pageUpdaterFactory
); );
} }
} }

View file

@ -32,6 +32,7 @@ use MediaWiki\Permissions\Authority;
use MediaWiki\Permissions\PermissionStatus; use MediaWiki\Permissions\PermissionStatus;
use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Revision\RevisionStore; use MediaWiki\Revision\RevisionStore;
use MediaWiki\Storage\PageUpdaterFactory;
use MediaWiki\User\UserFactory; use MediaWiki\User\UserFactory;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use ReadOnlyError; use ReadOnlyError;
@ -88,6 +89,8 @@ class UndeletePage {
private $unsuppress = false; private $unsuppress = false;
/** @var string[] */ /** @var string[] */
private $tags = []; private $tags = [];
/** @var PageUpdaterFactory */
private $pageUpdaterFactory;
/** /**
* @param HookContainer $hookContainer * @param HookContainer $hookContainer
@ -101,6 +104,7 @@ class UndeletePage {
* @param WikiPageFactory $wikiPageFactory * @param WikiPageFactory $wikiPageFactory
* @param ProperPageIdentity $page * @param ProperPageIdentity $page
* @param Authority $performer * @param Authority $performer
* @param PageUpdaterFactory $pageUpdaterFactory
*/ */
public function __construct( public function __construct(
HookContainer $hookContainer, HookContainer $hookContainer,
@ -113,7 +117,8 @@ class UndeletePage {
UserFactory $userFactory, UserFactory $userFactory,
WikiPageFactory $wikiPageFactory, WikiPageFactory $wikiPageFactory,
ProperPageIdentity $page, ProperPageIdentity $page,
Authority $performer Authority $performer,
PageUpdaterFactory $pageUpdaterFactory
) { ) {
$this->hookRunner = new HookRunner( $hookContainer ); $this->hookRunner = new HookRunner( $hookContainer );
$this->jobQueueGroup = $jobQueueGroup; $this->jobQueueGroup = $jobQueueGroup;
@ -127,6 +132,7 @@ class UndeletePage {
$this->page = $page; $this->page = $page;
$this->performer = $performer; $this->performer = $performer;
$this->pageUpdaterFactory = $pageUpdaterFactory;
} }
/** /**
@ -536,16 +542,18 @@ class UndeletePage {
if ( $created || $wasnew ) { if ( $created || $wasnew ) {
// Update site stats, link tables, etc // Update site stats, link tables, etc
// TODO: use DerivedPageDataUpdater from If610c68f4912e! $user = $revision->getUser( RevisionRecord::RAW );
$wikiPage->doEditUpdates( $options = [
$revision, 'created' => $created,
$revision->getUser( RevisionRecord::RAW ), 'oldcountable' => $oldcountable,
[ 'restored' => true,
'created' => $created, 'causeAction' => 'edit-page',
'oldcountable' => $oldcountable, 'causeAgent' => $user->getName(),
'restored' => true ];
]
); $updater = $this->pageUpdaterFactory->newDerivedPageDataUpdater( $wikiPage );
$updater->prepareUpdate( $revision, $options );
$updater->doUpdates();
} }
$this->hookRunner->onArticleUndelete( $this->hookRunner->onArticleUndelete(

View file

@ -44,7 +44,8 @@ class ImportableOldRevisionImporterTest extends MediaWikiIntegrationTestCase {
$services->getDBLoadBalancer(), $services->getDBLoadBalancer(),
$services->getRevisionStore(), $services->getRevisionStore(),
$services->getSlotRoleRegistry(), $services->getSlotRoleRegistry(),
$services->getWikiPageFactory() $services->getWikiPageFactory(),
$services->getPageUpdaterFactory()
); );
$result = $importer->import( $revision ); $result = $importer->import( $revision );
$this->assertTrue( $result ); $this->assertTrue( $result );