From 77e2dd7169f56627c6c321f6c013a68eed9d38b1 Mon Sep 17 00:00:00 2001 From: DannyS712 Date: Thu, 16 Apr 2020 01:52:24 +0000 Subject: [PATCH] Replace `NewRevisionFromEditComplete` with `RevisionFromEditComplete` Bug: T250338 Change-Id: I4ef249d013d1a9bc33d1d0f380c41963635012ab --- RELEASE-NOTES-1.35 | 6 ++-- docs/hooks.txt | 15 +++++++-- includes/MovePage.php | 17 ++++++++-- includes/Storage/PageUpdater.php | 14 ++++++-- includes/filerepo/file/LocalFile.php | 13 +++++++- .../Hook/NewRevisionFromEditCompleteHook.php | 2 +- .../Hook/RevisionFromEditCompleteHook.php | 33 +++++++++++++++++++ includes/page/WikiPage.php | 9 +++-- includes/specials/helpers/ImportReporter.php | 7 +++- 9 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 includes/page/Hook/RevisionFromEditCompleteHook.php diff --git a/RELEASE-NOTES-1.35 b/RELEASE-NOTES-1.35 index 8e743ea2d23..ebb909ab7e2 100644 --- a/RELEASE-NOTES-1.35 +++ b/RELEASE-NOTES-1.35 @@ -706,8 +706,10 @@ because of Phabricator reports. use the RecentChange_save hook or similar instead. * The ArticleEditUpdates hook has been deprecated. Please use the RevisionDataUpdates hook or similar instead. -* The ArticleRevisionUndeleted has been hard deprecated. Please use the new - RevisionUndeleted hook instead. +* The ArticleRevisionUndeleted hook has been hard deprecated. Please use the + new RevisionUndeleted hook instead. +* The NewRevisionFromEditComplete hook has been soft deprecated. Please use + the new RevisionFromEditComplete hook instead. * LinkHolderArray has been deprecated for public usage and will be internal part of parser. * ResourceLoaderFileModule::compileLessFile() has been deprecated, use diff --git a/docs/hooks.txt b/docs/hooks.txt index a3fec23c1e2..b7539d91e23 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -2369,8 +2369,8 @@ $row: the database row for this page (the recentchanges record and a few extras Currently only data attributes reserved to MediaWiki are allowed (see Sanitizer::isReservedDataAttribute). -'NewRevisionFromEditComplete': Called when a revision was inserted due to an -edit, file upload, import or page move. +'NewRevisionFromEditComplete': DEPRECATED since 1.35! Use RevisionFromEditComplete +Called when a revision was inserted due to an edit, file upload, import or page move. $wikiPage: the WikiPage edited $rev: the new revision $originalRevId: if the edit restores or repeats an earlier revision (such as a @@ -2895,6 +2895,17 @@ $renderedRevision: a RenderedRevision object representing the new revision and p to the RevisionRecord as well as ParserOutput of that revision. &$updates: A list of DeferrableUpdate that can be manipulated by the hook handler. +'RevisionFromEditComplete': Called when a revision was inserted due to an edit, +file upload, import or page move. +$wikiPage: the WikiPage edited +$revRecord: the new RevisionRecord object +$originalRevId: if the edit restores or repeats an earlier revision (such as a + rollback or a null revision), the ID of that earlier revision. False otherwise. + (Used to be called $baseID.) +$user: UserIdentity representing the editing user +&$tags: tags to apply to the edit and recent change. This is empty, and + replacement is ignored, in the case of import or page move. + 'RevisionRecordInserted': Called after a revision is inserted into the database. $revisionRecord: the RevisionRecord that has just been inserted. diff --git a/includes/MovePage.php b/includes/MovePage.php index 7e3b42b3f88..abdd1448f46 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -869,6 +869,11 @@ class MovePage { // TODO cleanup hooks and use of $nullRevisionObj $nullRevisionObj = new Revision( $nullRevision ); $fakeTags = []; + Hooks::run( 'RevisionFromEditComplete', + [ $newpage, $nullRevision, $nullRevision->getParentId(), $user, &$fakeTags ] ); + + // TODO hard deprecate hook + $nullRevisionObj = new Revision( $nullRevision ); Hooks::run( 'NewRevisionFromEditComplete', [ $newpage, $nullRevisionObj, $nullRevision->getParentId(), $user, &$fakeTags ] ); @@ -898,9 +903,17 @@ class MovePage { $redirectRevId = $inserted->getId(); $redirectArticle->updateRevisionOn( $dbw, $inserted, 0 ); - // TODO replace hook with one using RevisionRecord - $redirectRevisionObj = new Revision( $inserted ); $fakeTags = []; + Hooks::run( 'RevisionFromEditComplete', [ + $redirectArticle, + $inserted, + false, + $user, + &$fakeTags + ] ); + + // TODO hard deprecate hook + $redirectRevisionObj = new Revision( $inserted ); Hooks::run( 'NewRevisionFromEditComplete', [ $redirectArticle, $redirectRevisionObj, false, $user, &$fakeTags ] ); diff --git a/includes/Storage/PageUpdater.php b/includes/Storage/PageUpdater.php index ebe528c9bad..6e20ce265b3 100644 --- a/includes/Storage/PageUpdater.php +++ b/includes/Storage/PageUpdater.php @@ -1033,9 +1033,14 @@ class PageUpdater { throw new PageUpdateException( "Failed to update page row to use new revision." ); } + $tags = $this->computeEffectiveTags( $flags ); + Hooks::run( + 'RevisionFromEditComplete', + [ $wikiPage, $newRevisionRecord, $this->getOriginalRevisionId(), $user, &$tags ] + ); + // TODO: replace legacy hook! $newLegacyRevision = new Revision( $newRevisionRecord ); - $tags = $this->computeEffectiveTags( $flags ); Hooks::run( 'NewRevisionFromEditComplete', [ $wikiPage, $newLegacyRevision, $this->getOriginalRevisionId(), $user, &$tags ] @@ -1167,9 +1172,14 @@ class PageUpdater { throw new PageUpdateException( "Failed to update page row to use new revision." ); } + $tags = $this->computeEffectiveTags( $flags ); + Hooks::run( + 'RevisionFromEditComplete', + [ $wikiPage, $newRevisionRecord, false, $user, &$tags ] + ); + // TODO: replace legacy hook! $newLegacyRevision = new Revision( $newRevisionRecord ); - $tags = $this->computeEffectiveTags( $flags ); Hooks::run( 'NewRevisionFromEditComplete', [ $wikiPage, $newLegacyRevision, false, $user, &$tags ] diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index 1e8922c0569..a1b05dad887 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -1646,7 +1646,18 @@ class LocalFile extends File { if ( $nullRevRecord ) { $inserted = $revStore->insertRevisionOn( $nullRevRecord, $dbw ); - // TODO replace hook + Hooks::run( + 'RevisionFromEditComplete', + [ + $wikiPage, + $inserted, + $inserted->getParentId(), + $user, + &$tags + ] + ); + + // TODO hard deprecate $nullRevision = new Revision( $inserted ); Hooks::run( 'NewRevisionFromEditComplete', diff --git a/includes/page/Hook/NewRevisionFromEditCompleteHook.php b/includes/page/Hook/NewRevisionFromEditCompleteHook.php index 024bc65765b..79a067f6a06 100644 --- a/includes/page/Hook/NewRevisionFromEditCompleteHook.php +++ b/includes/page/Hook/NewRevisionFromEditCompleteHook.php @@ -7,7 +7,7 @@ use User; use WikiPage; /** - * @stable for implementation + * @deprecated since 1.35, use the RevisionFromEditComplete hook instead * @ingroup Hooks */ interface NewRevisionFromEditCompleteHook { diff --git a/includes/page/Hook/RevisionFromEditCompleteHook.php b/includes/page/Hook/RevisionFromEditCompleteHook.php new file mode 100644 index 00000000000..5450453e51c --- /dev/null +++ b/includes/page/Hook/RevisionFromEditCompleteHook.php @@ -0,0 +1,33 @@ +updateRevisionOn( $dbw, $inserted ); - // TODO replace hook $fakeTags = []; + Hooks::run( + 'RevisionFromEditComplete', + [ $page, $inserted, $latest, $this->getUser(), &$fakeTags ] + ); + + // TODO hard deprecate old hook $nullRevision = new Revision( $inserted ); Hooks::run( 'NewRevisionFromEditComplete',