From 0e915c0b638cc5c99714f45f19867a1c8e249f73 Mon Sep 17 00:00:00 2001 From: DannyS712 Date: Mon, 1 Jun 2020 01:31:00 +0000 Subject: [PATCH] Add `PageSaveComplete` hook to replace `PageContent(Insert|Save)Complete` Bug: T250566 Change-Id: I8e515ad9d344cb31e59bcfc87a717ca2b93feee2 --- RELEASE-NOTES-1.35 | 2 + docs/hooks.txt | 6 ++- includes/HookContainer/DeprecatedHooks.php | 2 + includes/HookContainer/HookRunner.php | 11 +++++ .../Hook/PageContentInsertCompleteHook.php | 2 +- .../Hook/PageContentSaveCompleteHook.php | 2 +- .../Storage/Hook/PageSaveCompleteHook.php | 40 +++++++++++++++++++ includes/Storage/PageUpdater.php | 19 +++++++-- 8 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 includes/Storage/Hook/PageSaveCompleteHook.php diff --git a/RELEASE-NOTES-1.35 b/RELEASE-NOTES-1.35 index 70242167fb7..8cb36dcdc47 100644 --- a/RELEASE-NOTES-1.35 +++ b/RELEASE-NOTES-1.35 @@ -1022,6 +1022,8 @@ because of Phabricator reports. * WikiPage::$mLastRevision was changed from protected to private. * The RevisionInsertComplete hook, soft deprecated in 1.31, now emits deprecation warnings. +* The PageContentInsertComplete and PageContentSaveComplete hooks were + deprecated in favor of the new PageSaveComplete hook. * RecentChange::markPatrolled was deprecated. Use ::doMarkPatrolled instead. * The JobRunner class has been converted to a service class. Direct construction is deprecated, use MediaWikiServices::getJobRunner. diff --git a/docs/hooks.txt b/docs/hooks.txt index 861bcf7a084..f8c97c2f89e 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -2450,7 +2450,8 @@ $categories: associative array, keys are category names, values are category [&]$out: OutputPage instance (object) $parserOutput: parserOutput instance being added in $out -'PageContentInsertComplete': After a new article is created. +'PageContentInsertComplete': DEPRECATED since 1.35, use PageSaveComplete instead. +After a new article is created. [&]$wikiPage: WikiPage created [&]$user: User creating the article $content: New content as a Content object @@ -2483,7 +2484,8 @@ $section: Previously the section number being edited. Currently unused, always n [&]$status: StatusValue object for the hook handlers resulting status. Either set $status->fatal() or return false to abort the save action. -'PageContentSaveComplete': After an article has been updated. +'PageContentSaveComplete': DEPRECATED since 1.35, use PageSaveComplete instead. +After an article has been updated. [&]$wikiPage: WikiPage modified [&]$user: User performing the modification $content: New content, as a Content object diff --git a/includes/HookContainer/DeprecatedHooks.php b/includes/HookContainer/DeprecatedHooks.php index 95aab0778d6..e3e264dd6ba 100644 --- a/includes/HookContainer/DeprecatedHooks.php +++ b/includes/HookContainer/DeprecatedHooks.php @@ -50,7 +50,9 @@ class DeprecatedHooks { 'LinkBegin' => [ 'deprecatedVersion' => '1.28' ], 'LinkEnd' => [ 'deprecatedVersion' => '1.28' ], 'NewRevisionFromEditComplete' => [ 'deprecatedVersion' => '1.35' ], + 'PageContentInsertComplete' => [ 'deprecatedVersion' => '1.35', 'silent' => true ], 'PageContentSave' => [ 'deprecatedVersion' => '1.35', 'silent' => true ], + 'PageContentSaveComplete' => [ 'deprecatedVersion' => '1.35', 'silent' => true ], 'ParserBeforeTidy' => [ 'deprecatedVersion' => '1.35' ], 'ParserFetchTemplate' => [ 'deprecatedVersion' => '1.35' ], 'ParserGetVariableValueVarCache' => [ 'deprecatedVersion' => '1.35' ], diff --git a/includes/HookContainer/HookRunner.php b/includes/HookContainer/HookRunner.php index 6ed86cc9133..d1c3cb61309 100644 --- a/includes/HookContainer/HookRunner.php +++ b/includes/HookContainer/HookRunner.php @@ -525,6 +525,7 @@ class HookRunner implements \MediaWiki\Storage\Hook\PageContentInsertCompleteHook, \MediaWiki\Storage\Hook\PageContentSaveCompleteHook, \MediaWiki\Storage\Hook\PageContentSaveHook, + \MediaWiki\Storage\Hook\PageSaveCompleteHook, \MediaWiki\Storage\Hook\ParserOutputStashForEditHook, \MediaWiki\Storage\Hook\RevisionDataUpdatesHook, \MediaWiki\User\Hook\ConfirmEmailCompleteHook, @@ -2808,6 +2809,16 @@ class HookRunner implements ); } + public function onPageSaveComplete( $wikiPage, $user, $summary, $flags, + $revisionRecord, $originalRevId, $undidRevId + ) { + return $this->container->run( + 'PageSaveComplete', + [ $wikiPage, $user, $summary, $flags, $revisionRecord, + $originalRevId, $undidRevId ] + ); + } + public function onPageViewUpdates( $wikipage, $user ) { return $this->container->run( 'PageViewUpdates', diff --git a/includes/Storage/Hook/PageContentInsertCompleteHook.php b/includes/Storage/Hook/PageContentInsertCompleteHook.php index c6cab15c938..80b3fbc069f 100644 --- a/includes/Storage/Hook/PageContentInsertCompleteHook.php +++ b/includes/Storage/Hook/PageContentInsertCompleteHook.php @@ -8,7 +8,7 @@ use User; use WikiPage; /** - * @stable for implementation + * @deprecated since 1.35, use PageSaveComplete * @ingroup Hooks */ interface PageContentInsertCompleteHook { diff --git a/includes/Storage/Hook/PageContentSaveCompleteHook.php b/includes/Storage/Hook/PageContentSaveCompleteHook.php index e1c74fb24bf..2f81a6d2b5b 100644 --- a/includes/Storage/Hook/PageContentSaveCompleteHook.php +++ b/includes/Storage/Hook/PageContentSaveCompleteHook.php @@ -9,7 +9,7 @@ use User; use WikiPage; /** - * @stable for implementation + * @deprecated since 1.35, use PageSaveComplete * @ingroup Hooks */ interface PageContentSaveCompleteHook { diff --git a/includes/Storage/Hook/PageSaveCompleteHook.php b/includes/Storage/Hook/PageSaveCompleteHook.php new file mode 100644 index 00000000000..4535a656d94 --- /dev/null +++ b/includes/Storage/Hook/PageSaveCompleteHook.php @@ -0,0 +1,40 @@ +getName(); - $newLegacyRevision = new Revision( $newRevisionRecord ); $mainContent = $newRevisionRecord->getContent( SlotRecord::MAIN, RevisionRecord::RAW ); // Update links tables, site stats, etc. $this->derivedDataUpdater->prepareUpdate( $newRevisionRecord, $hints ); $this->derivedDataUpdater->doUpdates(); - // TODO: replace legacy hook! + $created = $hints['created'] ?? false; + $flags |= ( $created ? EDIT_NEW : EDIT_UPDATE ); - if ( $hints['created'] ?? false ) { + // PageSaveComplete replaces the other two since 1.35 + $this->hookRunner->onPageSaveComplete( + $wikiPage, + $user, + $summary->text, + $flags, + $newRevisionRecord, + $this->getOriginalRevisionId(), + $this->undidRevId + ); + + // Deprecated since 1.35 + $newLegacyRevision = new Revision( $newRevisionRecord ); + if ( $created ) { // Trigger post-create hook $this->hookRunner->onPageContentInsertComplete( $wikiPage, $user, $mainContent, $summary->text, $flags & EDIT_MINOR,