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