diff options
author | daniel <dkinzler@wikimedia.org> | 2025-02-01 20:57:59 +0100 |
---|---|---|
committer | daniel <dkinzler@wikimedia.org> | 2025-03-07 19:39:27 +0100 |
commit | a0fe95b826ee6c2e53c1be1271aabe282b7c0312 (patch) | |
tree | a46b7e649412eb02c9dd829e543c2e2729d9dcb1 /includes/page | |
parent | e82db104a4e9e8088467e8d622d50ae831d6dd8c (diff) | |
download | mediawikicore-a0fe95b826ee6c2e53c1be1271aabe282b7c0312.tar.gz mediawikicore-a0fe95b826ee6c2e53c1be1271aabe282b7c0312.zip |
WikiPage: Emit PageUpdatedEvent when protection changes
Why:
- All changes that cause a dummy revision to be created should
trigger a PageUpdatedEvent.
What:
- Make WikiPage::doUpdateRestrictions use PageUpdater
Bug: T198297
Bug: T384691
Change-Id: Ib3196c2d9b964d149d733688bfc7a8d2b5733f4e
Diffstat (limited to 'includes/page')
-rw-r--r-- | includes/page/WikiPage.php | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 558dd58d4974..c323fd3a5327 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -2009,8 +2009,7 @@ class WikiPage implements Stringable, Page, PageRecord { $cascade = false; } - // insert null revision to identify the page protection change as edit summary - $latest = $this->getLatest(); + // insert dummy revision to identify the page protection change as edit summary $nullRevisionRecord = $this->insertNullProtectionRevision( $revCommentMsg, $limit, @@ -2067,9 +2066,6 @@ class WikiPage implements Stringable, Page, PageRecord { ]; } } - - $this->getHookRunner()->onRevisionFromEditComplete( - $this, $nullRevisionRecord, $latest, $user, $tags ); } else { // Protection of non-existing page (also known as "title protection") // Cascade protection is meaningless in this case $cascade = false; @@ -2170,7 +2166,8 @@ class WikiPage implements Stringable, Page, PageRecord { } /** - * Insert a new null revision for this page. + * Insert a new dummy revision (aka null revision) for this page, + * to mark a change in page protection. * * @since 1.35 * @@ -2190,8 +2187,6 @@ class WikiPage implements Stringable, Page, PageRecord { string $reason, UserIdentity $user ): ?RevisionRecord { - $dbw = MediaWikiServices::getInstance()->getConnectionProvider()->getPrimaryDatabase(); - // Prepare a null revision to be added to the history $editComment = wfMessage( $revCommentMsg, @@ -2214,28 +2209,9 @@ class WikiPage implements Stringable, Page, PageRecord { )->inContentLanguage()->text(); } - $revStore = $this->getRevisionStore(); - $comment = CommentStoreComment::newUnsavedComment( $editComment ); - $nullRevRecord = $revStore->newNullRevision( - $dbw, - $this->getTitle(), - $comment, - true, - $user - ); - - if ( $nullRevRecord ) { - $inserted = $revStore->insertRevisionOn( $nullRevRecord, $dbw ); - - // Update page record and touch page - $oldLatest = $inserted->getParentId(); - - $this->updateRevisionOn( $dbw, $inserted, $oldLatest ); - - return $inserted; - } else { - return null; - } + return $this->newPageUpdater( $user ) + ->setCause( PageUpdater::CAUSE_PROTECTION_CHANGE ) + ->saveDummyRevision( $editComment, EDIT_SILENT | EDIT_MINOR ); } /** @@ -2409,7 +2385,7 @@ class WikiPage implements Stringable, Page, PageRecord { * @since 1.27 */ public function lockAndGetLatest() { - $dbw = MediaWikiServices::getInstance()->getConnectionProvider()->getPrimaryDatabase(); + $dbw = $this->getConnectionProvider()->getPrimaryDatabase(); return (int)$dbw->newSelectQueryBuilder() ->select( 'page_latest' ) ->forUpdate() @@ -2664,7 +2640,7 @@ class WikiPage implements Stringable, Page, PageRecord { return []; } - $dbr = MediaWikiServices::getInstance()->getConnectionProvider()->getReplicaDatabase(); + $dbr = $this->getConnectionProvider()->getReplicaDatabase(); $res = $dbr->newSelectQueryBuilder() ->select( [ 'cl_to' ] ) ->from( 'categorylinks' ) @@ -2720,7 +2696,7 @@ class WikiPage implements Stringable, Page, PageRecord { $removeFields["cat_{$type}s"] = new RawSQLValue( "cat_{$type}s - 1" ); } - $dbw = MediaWikiServices::getInstance()->getConnectionProvider()->getPrimaryDatabase(); + $dbw = $this->getConnectionProvider()->getPrimaryDatabase(); $res = $dbw->newSelectQueryBuilder() ->select( [ 'cat_id', 'cat_title' ] ) ->from( 'category' ) @@ -3000,4 +2976,11 @@ class WikiPage implements Stringable, Page, PageRecord { ); } + /** + * @return \Wikimedia\Rdbms\IConnectionProvider + */ + private function getConnectionProvider(): \Wikimedia\Rdbms\IConnectionProvider { + return MediaWikiServices::getInstance()->getConnectionProvider(); + } + } |