aboutsummaryrefslogtreecommitdiffstats
path: root/includes/page
diff options
context:
space:
mode:
authordaniel <dkinzler@wikimedia.org>2025-02-01 20:57:59 +0100
committerdaniel <dkinzler@wikimedia.org>2025-03-07 19:39:27 +0100
commita0fe95b826ee6c2e53c1be1271aabe282b7c0312 (patch)
treea46b7e649412eb02c9dd829e543c2e2729d9dcb1 /includes/page
parente82db104a4e9e8088467e8d622d50ae831d6dd8c (diff)
downloadmediawikicore-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.php49
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();
+ }
+
}