(Bug 41580) Hook for custom search hit rendering.
authordaniel <daniel.kinzler@wikimedia.de>
Tue, 6 Nov 2012 13:01:16 +0000 (14:01 +0100)
committerdaniel <daniel.kinzler@wikimedia.de>
Tue, 6 Nov 2012 13:01:16 +0000 (14:01 +0100)
Introducing ShowSearchHit hook into SpecialSearch, so extensions
can control of how search results are displayed. This does not
fix bug 41580, but it's a precondition to fixing it in Wikibase.

Change-Id: I9158684b92e320a486266c45dc3f7cf466ec5a24

docs/hooks.txt
includes/specials/SpecialSearch.php

index 998523f..f93203f 100644 (file)
@@ -1831,6 +1831,21 @@ $result: The search result
 $terms: The search terms entered
 $page: The SpecialSearch object.
 
+'ShowSearchHit': Customize display of search hit.
+$searchPage: The SpecialSearch instance.
+$result: The SearchResult to show
+$terms: Search terms, for highlighting
+&$link: HTML of link to the matching page. May be modified.
+&$redirect: HTML of redirect info. May be modified.
+&$section: HTML of matching section. May be modified.
+&$extract: HTML of content extract. May be modified.
+&$score: HTML of score. May be modified.
+&$size: HTML of page size. May be modified.
+&$date: HTML of of page modification date. May be modified.
+&$related: HTML of additional info for the matching page. May be modified.
+&$html: May be set to the full HTML that should be used to represent the search hit. Must include
+the <li> ... </li> tags. Will only be used if the hook function returned false.
+
 'SiteNoticeBefore': Before the sitenotice/anonnotice is composed
 &$siteNotice: HTML returned as the sitenotice
 $skin: Skin object
index 6c33bb8..7c8ff84 100644 (file)
@@ -684,11 +684,21 @@ class SpecialSearch extends SpecialPage {
                        }
                }
 
-               wfProfileOut( __METHOD__ );
-               return "<li><div class='mw-search-result-heading'>{$link} {$redirect} {$section}</div> {$extract}\n" .
-                       "<div class='mw-search-result-data'>{$score}{$size} - {$date}{$related}</div>" .
-                       "</li>\n";
+               $html = null;
+
+               if ( wfRunHooks( 'ShowSearchHit', array (
+                       $this, $result, $terms,
+                       &$link, &$redirect, &$section, &$extract,
+                       &$score, &$size, &$date, &$related,
+                       &$html
+               ) ) ) {
+                       $html = "<li><div class='mw-search-result-heading'>{$link} {$redirect} {$section}</div> {$extract}\n" .
+                               "<div class='mw-search-result-data'>{$score}{$size} - {$date}{$related}</div>" .
+                               "</li>\n";
+               }
 
+               wfProfileOut( __METHOD__ );
+               return $html;
        }
 
        /**