From: cacycle@gerrit.wikimedia.org Date: Fri, 10 Oct 2014 21:14:56 +0000 (+0200) Subject: Add hook for custom difference engine (WikEdDiff) X-Git-Tag: 1.31.0-rc.0~12299^2 X-Git-Url: http://git.cyclocoop.org/%24href?a=commitdiff_plain;h=ef55b2c7b5e58d7f000623cfe1d4043ad59ae090;p=lhc%2Fweb%2Fwiklou.git Add hook for custom difference engine (WikEdDiff) The new Extension:WikEdDiff is a custom inline difference engine. There is currently no hook to integrate custom difference engines. This patch adds a new hook called 'GetDifferenceEngine' in /includes/content/ContentHandler.php in function 'createDifferenceEngine()'. Passed variables: $context: IContextSource context to be used for diff $old: Revision ID to show and diff with $new: Either a revision ID or one of the strings 'cur', 'prev' or 'next' $refreshCache: If set, refreshes the diff cache $unhide: If set, allow viewing deleted revs &$differenceEngine: output parameter, difference engine object to be used for diff If the hook handler returns false, a valid difference engine object is returned in the passed-by-reference variable $differenceEngine. If the handler returns true, the default engine is used as fallback. The specified diff engine class will typically be an extension of the class DifferenceEngine (includes/diff/DifferenceEngine.php) with modifications, e.g. of function generateTextDiffBody() and __construct() (without deprecated parameter $rcid). Also fixes a missing declaration in DifferenceEngine that is required for extending this class. Bug: 71916 Change-Id: I9da63c1ceb339bfeba7beddc712be51977b95f65 --- diff --git a/docs/hooks.txt b/docs/hooks.txt index 7ec6ff5c7b..5bf9ef2909 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -989,6 +989,15 @@ $title: the diff page title (nullable) $old: the ?old= param value from the url $new: the ?new= param value from the url +'GetDifferenceEngine': Called when getting a new difference engine interface object +Return false for valid object in $differenceEngine or true for the default difference engine +$context: IContextSource context to be used for diff +$old: Revision ID to show and diff with +$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next' +$refreshCache: If set, refreshes the diff cache +$unhide: If set, allow viewing deleted revs +&$differenceEngine: output parameter, difference engine object to be used for diff + '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/content/ContentHandler.php b/includes/content/ContentHandler.php index ac41722307..bcecefab92 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -626,8 +626,15 @@ abstract class ContentHandler { public function createDifferenceEngine( IContextSource $context, $old = 0, $new = 0, $rcid = 0, //FIXME: Deprecated, no longer used $refreshCache = false, $unhide = false ) { - $diffEngineClass = $this->getDiffEngineClass(); + // hook: get difference engine + $differenceEngine = null; + if ( !wfRunHooks( 'GetDifferenceEngine', + array( $context, $old, $new, $refreshCache, $unhide, &$differenceEngine ) + ) ) { + return $differenceEngine; + } + $diffEngineClass = $this->getDiffEngineClass(); return new $diffEngineClass( $context, $old, $new, $rcid, $refreshCache, $unhide ); } diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index dd5f3c7b2c..ba9878f7ff 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -94,6 +94,10 @@ class DifferenceEngine extends ContextSource { /** @var bool Show rev_deleted content if allowed */ protected $unhide = false; + + /** @var bool Refresh the diff cache */ + protected $mRefreshCache = false; + /**#@-*/ /**