From 04736acd442c3d8337ee08b8f1b41e5683860347 Mon Sep 17 00:00:00 2001 From: Jack Phoenix Date: Thu, 17 Nov 2016 04:14:26 +0200 Subject: [PATCH] A few more hooks in DifferenceEngine For mucking with the class member variable mNewContent and optionally allowing the suppression of the "missing revision" message when revision data is not found for a requested revision. Originally implemented as the "GetUserMessagesDiffCurrent" hook (yes, these three separate hooks in three separate places were essentially the same) by Wikia for their SiteWideMessages extension. Change-Id: Ie0c175af2af418d4ed3de28c94df918115312da3 --- docs/hooks.txt | 18 ++++++++++++++++++ includes/diff/DifferenceEngine.php | 8 ++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/hooks.txt b/docs/hooks.txt index 7efd5d2cad..1ecc1f82d8 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -1190,6 +1190,18 @@ $page: SpecialPage object for DeletedContributions $row: the DB row for this line &$classes: the classes to add to the surrounding
  • +'DifferenceEngineAfterLoadNewText': called in DifferenceEngine::loadNewText() +after the new revision's content has been loaded into the class member variable +$differenceEngine->mNewContent but before returning true from this function. +$differenceEngine: DifferenceEngine object + +'DifferenceEngineLoadTextAfterNewContentIsLoaded': called in +DifferenceEngine::loadText() after the new revision's content has been loaded +into the class member variable $differenceEngine->mNewContent but before +checking if the variable's value is null. +This hook can be used to inject content into said class member variable. +$differenceEngine: DifferenceEngine object + 'DifferenceEngineMarkPatrolledLink': Allows extensions to change the "mark as patrolled" link which is shown both on the diff header as well as on the bottom of a page, usually wrapped in a span element which has class="patrollink". @@ -1268,6 +1280,12 @@ $differenceEngine: DifferenceEngine object object into the diff view $out: OutputPage object +'DifferenceEngineShowDiffPageMaybeShowMissingRevision': called in +DifferenceEngine::showDiffPage() when revision data cannot be loaded. +Return false in order to prevent displaying the missing revision message +(i.e. to prevent DifferenceEngine::showMissingRevision() from being called). +$differenceEngine: DifferenceEngine object + 'DiffRevisionTools': Override or extend the revision tools available from the diff view, i.e. undo, etc. $newRev: Revision object of the "new" revision diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index bd65fb42dc..5e40f43b5f 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -247,8 +247,9 @@ class DifferenceEngine extends ContextSource { Hooks::run( 'DifferenceEngineShowDiffPage', [ $out ] ); if ( !$this->loadRevisionData() ) { - $this->showMissingRevision(); - + if ( Hooks::run( 'DifferenceEngineShowDiffPageMaybeShowMissingRevision', [ $this ] ) ) { + $this->showMissingRevision(); + } return; } @@ -1369,6 +1370,7 @@ class DifferenceEngine extends ContextSource { if ( $this->mNewRev ) { $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + Hooks::run( 'DifferenceEngineLoadTextAfterNewContentIsLoaded', [ $this ] ); if ( $this->mNewContent === null ) { return false; } @@ -1395,6 +1397,8 @@ class DifferenceEngine extends ContextSource { $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() ); + Hooks::run( 'DifferenceEngineAfterLoadNewText', [ $this ] ); + return true; } -- 2.20.1