jenkins-bot has submitted this change and it was merged.

Change subject: Article placeholder appear in search
......................................................................


Article placeholder appear in search

Make the article placeholder appear in the search.

Bug: T109438
Change-Id: Icc359c5c5cbaad4fd628f54d3263e01d124e427a
---
M ArticlePlaceholder.php
M i18n/en.json
M i18n/qqq.json
A includes/SearchHookHandler.php
4 files changed, 150 insertions(+), 2 deletions(-)

Approvals:
  Hoo man: Looks good to me, approved
  Siebrand: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/ArticlePlaceholder.php b/ArticlePlaceholder.php
index 2d7e10c..0ea24a8 100644
--- a/ArticlePlaceholder.php
+++ b/ArticlePlaceholder.php
@@ -29,7 +29,9 @@
 
 $wgAutoloadClasses['ArticlePlaceholder\Specials\SpecialFancyUnicorn'] = $dir . 
'/Specials/SpecialFancyUnicorn.php';
 $wgAutoloadClasses['ArticlePlaceholder\Hooks'] = __DIR__ . 
'/includes/Hooks.php';
+$wgAutoloadClasses['ArticlePlaceholder\SearchHookHandler'] = __DIR__ . 
'/includes/SearchHookHandler.php';
 $wgHooks['ScribuntoExternalLibraryPaths'][] = 
'\ArticlePlaceholder\Hooks::registerScribuntoExternalLibraryPaths';
+$wgHooks['SpecialSearchResultsAppend'][] = 
'\ArticlePlaceholder\SearchHookHandler::onSpecialSearchResultsAppend';
 
 $wgMessagesDirs[ 'ArticlePlaceholder' ] = __DIR__ . '/i18n';
 $wgExtensionMessagesFiles['ArticlePlaceholderAliases'] = __DIR__ . 
'/ArticlePlaceholder.alias.php';
diff --git a/i18n/en.json b/i18n/en.json
index 807076c..3ba61a8 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -13,5 +13,6 @@
        "articleplaceholder-fancyunicorn-lua-entity": "Entity",
        "articleplaceholder-fancyunicorn-lua-description": "Description:",
        "articleplaceholder-fancyunicorn-lua-reference": "Reference",
-       "articleplaceholder-fancyunicorn-lua-qualifier": "Qualifier"
+       "articleplaceholder-fancyunicorn-lua-qualifier": "Qualifier",
+       "articleplaceholder-search-header": "Discover data on the topic"
 }
diff --git a/i18n/qqq.json b/i18n/qqq.json
index fd62602..de6a28a 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -13,5 +13,6 @@
        "articleplaceholder-fancyunicorn-lua-entity": "Header of the entity 
section",
        "articleplaceholder-fancyunicorn-lua-description": "Word before the 
description string",
        "articleplaceholder-fancyunicorn-lua-reference": "Header of the 
reference section",
-       "articleplaceholder-fancyunicorn-lua-qualifier": "Header of the 
qualifier section"
+       "articleplaceholder-fancyunicorn-lua-qualifier": "Header of the 
qualifier section",
+       "articleplaceholder-search-header": "Header in the search for the 
results of Special:FancyUnicorn generated pages"
 }
diff --git a/includes/SearchHookHandler.php b/includes/SearchHookHandler.php
new file mode 100644
index 0000000..0f557b2
--- /dev/null
+++ b/includes/SearchHookHandler.php
@@ -0,0 +1,144 @@
+<?php
+
+namespace ArticlePlaceholder;
+
+use OutputPage;
+use SpecialSearch;
+use Wikibase\TermIndex;
+use Wikibase\TermIndexEntry;
+use Wikibase\Client\WikibaseClient;
+use Wikibase\Lib\Interactors\TermIndexSearchInteractor;
+use Wikibase\Lib\Interactors\TermSearchResult;
+
+/**
+ * Adding results from ArticlePlaceholder to search
+ *
+ * @author Lucie-Aimée Kaffee
+ * @license GNU General Public Licence 2.0 or later
+ */
+class SearchHookHandler {
+
+       /**
+        * @var TermIndex
+        */
+       private $termIndex;
+
+       /**
+        * @var TermIndexSearchInteractor
+        */
+       private $termSearchInteractor;
+
+       /**
+        * @var string
+        */
+       private $languageCode;
+
+       /**
+        * @param string $language user language
+        * @return self
+        */
+       private static function newFromGlobalState( $language ) {
+               global $wgLanguageCode;
+               $wikibaseClient = WikibaseClient::getDefaultInstance();
+               return new self(
+                       $wikibaseClient->getStore()->getTermIndex(),
+                       $wikibaseClient->newTermSearchInteractor( $language ),
+                       $wgLanguageCode
+               );
+       }
+
+       /**
+        * @param TermIndex $termIndex
+        * @param TermIndexSearchInteractor $termSearchInteractor
+        * @param string $languageCode content language
+        */
+       public function __construct( TermIndex $termIndex, 
TermIndexSearchInteractor $termSearchInteractor, $languageCode ) {
+               $this->termIndex = $termIndex;
+               $this->termSearchInteractor = $termSearchInteractor;
+               $this->languageCode = $languageCode;
+       }
+
+       /**
+        * @param SpecialSearch $specialSearch
+        * @param OutputPage $output
+        * @param string|null $term
+        * @return bool
+        */
+       public static function onSpecialSearchResultsAppend( SpecialSearch 
$specialSearch, OutputPage $output, $term ) {
+               if ( $term === null || $term === '' ) {
+                       return;
+               }
+               // user language, not content language
+               $instance = self::newFromGlobalState( 
$specialSearch->getLanguage()->getCode() );
+               $instance->addToSearch( $specialSearch, $output, $term );
+               return true;
+       }
+
+       /**
+        * @param SpecialSearch $specialSearch
+        * @param OutputPage $output
+        * @param string $term
+        */
+       public function addToSearch( SpecialSearch $specialSearch, OutputPage 
$output, $term ) {
+               $searchResult = $this->getSearchResults( $term );
+               if ( $searchResult !== null ) {
+                       $output->addWikiText( $this->getSearchHeader() );
+
+                       $output->addWikiText( $searchResult );
+               }
+       }
+
+       /**
+        * @return string
+        */
+       private function getSearchHeader() {
+               $header = '==' . wfMessage( 'articleplaceholder-search-header' 
)->text() . '==';
+               return $header;
+       }
+
+       /**
+        * @param string $term
+        * @return string
+        */
+       private function getSearchResults( $term ) {
+               $searchResults = $this->searchEntities( $term );
+               $link = 'Special:FancyUnicorn/';
+               $wikitext = null;
+               foreach ( $searchResults as $searchResult ) {
+                       $wikitext .= '<div 
class="article-placeholder-searchResult">'
+                                               . $this->createResult( 
$searchResult, $link )
+                                               . '</div>';
+               }
+               return $wikitext;
+       }
+
+       /**
+        * @param TermSearchResult $searchResult
+        * @param string $link
+        * @return string
+        */
+       private function createResult( TermSearchResult $searchResult, $link ) {
+               $entityId = $searchResult->getEntityId();
+               $label = $searchResult->getDisplayLabel()->getText();
+               $description = 
$searchResult->getDisplayDescription()->getText();
+
+               $wikitextResult = '[[' . $link . wfEscapeWikiText( $entityId ) 
. '|' . wfEscapeWikiText( $label ) .']]';
+               $wikitextResult .= ': ' . wfEscapeWikiText( $description );
+               return $wikitextResult;
+       }
+
+       /**
+        * @param string $term
+        * @return TermSearchResult[]
+        */
+       private function searchEntities( $term ) {
+               $searchResults = $this->termSearchInteractor->searchForEntities(
+                       $term,
+                       $this->languageCode,
+                       'item',
+                       array( TermIndexEntry::TYPE_LABEL, 
TermIndexEntry::TYPE_ALIAS )
+               );
+               return $searchResults;
+       }
+
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/243715
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Icc359c5c5cbaad4fd628f54d3263e01d124e427a
Gerrit-PatchSet: 16
Gerrit-Project: mediawiki/extensions/ArticlePlaceholder
Gerrit-Branch: master
Gerrit-Owner: Lucie Kaffee <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Lucie Kaffee <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to