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

View file

@ -1070,7 +1070,8 @@ return [
$services->getDBLoadBalancer(),
$services->getRevisionStore(),
$services->getSlotRoleRegistry(),
$services->getWikiPageFactory()
$services->getWikiPageFactory(),
$services->getPageUpdaterFactory()
);
},
@ -1912,7 +1913,8 @@ return [
$services->getDBLoadBalancer(),
$services->getRevisionStore(),
$services->getSlotRoleRegistry(),
$services->getWikiPageFactory()
$services->getWikiPageFactory(),
$services->getPageUpdaterFactory()
);
},
@ -1986,7 +1988,8 @@ return [
WikiMap::getCurrentWikiDbDomain()->getId(),
WebRequest::getRequestId(),
$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\RevisionStore;
use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Storage\PageUpdaterFactory;
use Psr\Log\LoggerInterface;
use Wikimedia\Rdbms\ILoadBalancer;
@ -43,6 +44,9 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
*/
private $wikiPageFactory;
/** @var PageUpdaterFactory */
private $pageUpdaterFactory;
/**
* @param bool $doUpdates
* @param LoggerInterface $logger
@ -50,6 +54,7 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
* @param RevisionStore $revisionStore
* @param SlotRoleRegistry $slotRoleRegistry
* @param WikiPageFactory|null $wikiPageFactory
* @param PageUpdaterFactory|null $pageUpdaterFactory
*/
public function __construct(
$doUpdates,
@ -57,15 +62,19 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
ILoadBalancer $loadBalancer,
RevisionStore $revisionStore,
SlotRoleRegistry $slotRoleRegistry,
WikiPageFactory $wikiPageFactory = null
WikiPageFactory $wikiPageFactory = null,
PageUpdaterFactory $pageUpdaterFactory = null
) {
$this->doUpdates = $doUpdates;
$this->logger = $logger;
$this->loadBalancer = $loadBalancer;
$this->revisionStore = $revisionStore;
$this->slotRoleRegistry = $slotRoleRegistry;
$services = MediaWikiServices::getInstance();
// @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 */
@ -219,12 +228,17 @@ class ImportableOldRevisionImporter implements OldRevisionImporter {
if ( $changed !== false && $this->doUpdates ) {
$this->logger->debug( __METHOD__ . ": running updates" );
// countable/oldcountable stuff is handled in WikiImporter::finishImportPage
// @todo replace deprecated function
$page->doEditUpdates(
$inserted,
$user,
[ 'created' => $created, 'oldcountable' => 'no-change' ]
);
$options = [
'created' => $created,
'oldcountable' => 'no-change',
'causeAction' => 'edit-page',
'causeAgent' => $user->getName(),
];
$updater = $this->pageUpdaterFactory->newDerivedPageDataUpdater( $page );
$updater->prepareUpdate( $inserted, $options );
$updater->doUpdates();
}
return true;

View file

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

View file

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

View file

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