X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/journal.php?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialSearch.php;h=255e61880632a2b3f679eda0e06b88f3df8bb6ac;hb=6e155624fa4481f0c4fcb70e4228e53cb62ec254;hp=727179af7d845c37a4c1f88bb9769fcf35a5a74d;hpb=8e337da65b111ddbcd63beef6440e9c1cdbe7b69;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php index 727179af7d..255e618806 100644 --- a/includes/specials/SpecialSearch.php +++ b/includes/specials/SpecialSearch.php @@ -740,8 +740,12 @@ class SpecialSearch extends SpecialPage { } $out .= "\n"; @@ -752,181 +756,6 @@ class SpecialSearch extends SpecialPage { return $out; } - /** - * Format a single hit result - * - * @param SearchResult $result - * @param array $terms Terms to highlight - * @param int $position Position within the search results, including offset. - * - * @return string - */ - protected function showHit( SearchResult $result, $terms, $position ) { - if ( $result->isBrokenTitle() ) { - return ''; - } - - $title = $result->getTitle(); - - $titleSnippet = $result->getTitleSnippet(); - - if ( $titleSnippet == '' ) { - $titleSnippet = null; - } - - $link_t = clone $title; - $query = []; - - Hooks::run( 'ShowSearchHitTitle', - [ &$link_t, &$titleSnippet, $result, $terms, $this, &$query ] ); - - $linkRenderer = $this->getLinkRenderer(); - - if ( $titleSnippet !== null ) { - $titleSnippet = new HtmlArmor( $titleSnippet ); - } - - $link = $linkRenderer->makeKnownLink( - $link_t, - $titleSnippet, - [ 'data-serp-pos' => $position ], // HTML attributes - $query - ); - - // If page content is not readable, just return the title. - // This is not quite safe, but better than showing excerpts from non-readable pages - // Note that hiding the entry entirely would screw up paging. - if ( !$title->userCan( 'read', $this->getUser() ) ) { - return "
  • {$link}
  • \n"; - } - - // If the page doesn't *exist*... our search index is out of date. - // The least confusing at this point is to drop the result. - // You may get less results, but... oh well. :P - if ( $result->isMissingRevision() ) { - return ''; - } - - // format redirects / relevant sections - $redirectTitle = $result->getRedirectTitle(); - $redirectText = $result->getRedirectSnippet(); - $sectionTitle = $result->getSectionTitle(); - $sectionText = $result->getSectionSnippet(); - $categorySnippet = $result->getCategorySnippet(); - - $redirect = ''; - if ( !is_null( $redirectTitle ) ) { - if ( $redirectText == '' ) { - $redirectText = null; - } - - if ( $redirectText !== null ) { - $redirectText = new HtmlArmor( $redirectText ); - } - - $redirect = "" . - $this->msg( 'search-redirect' )->rawParams( - $linkRenderer->makeKnownLink( $redirectTitle, $redirectText ) )->text() . - ""; - } - - $section = ''; - if ( !is_null( $sectionTitle ) ) { - if ( $sectionText == '' ) { - $sectionText = null; - } - - if ( $sectionText !== null ) { - $sectionText = new HtmlArmor( $sectionText ); - } - - $section = "" . - $this->msg( 'search-section' )->rawParams( - $linkRenderer->makeKnownLink( $sectionTitle, $sectionText ) )->text() . - ""; - } - - $category = ''; - if ( $categorySnippet ) { - $category = "" . - $this->msg( 'search-category' )->rawParams( $categorySnippet )->text() . - ""; - } - - // format text extract - $extract = "
    " . $result->getTextSnippet( $terms ) . "
    "; - - $lang = $this->getLanguage(); - - // format description - $byteSize = $result->getByteSize(); - $wordCount = $result->getWordCount(); - $timestamp = $result->getTimestamp(); - $size = $this->msg( 'search-result-size', $lang->formatSize( $byteSize ) ) - ->numParams( $wordCount )->escaped(); - - if ( $title->getNamespace() == NS_CATEGORY ) { - $cat = Category::newFromTitle( $title ); - $size = $this->msg( 'search-result-category-size' ) - ->numParams( $cat->getPageCount(), $cat->getSubcatCount(), $cat->getFileCount() ) - ->escaped(); - } - - $date = $lang->userTimeAndDate( $timestamp, $this->getUser() ); - - $fileMatch = ''; - // Include a thumbnail for media files... - if ( $title->getNamespace() == NS_FILE ) { - $img = $result->getFile(); - $img = $img ?: wfFindFile( $title ); - if ( $result->isFileMatch() ) { - $fileMatch = "" . - $this->msg( 'search-file-match' )->escaped() . ""; - } - if ( $img ) { - $thumb = $img->transform( [ 'width' => 120, 'height' => 120 ] ); - if ( $thumb ) { - $desc = $this->msg( 'parentheses' )->rawParams( $img->getShortDesc() )->escaped(); - // Float doesn't seem to interact well with the bullets. - // Table messes up vertical alignment of the bullets. - // Bullets are therefore disabled (didn't look great anyway). - return "
  • " . - '' . - '' . - '' . - '' . - '' . - '
    ' . - $thumb->toHtml( [ 'desc-link' => true ] ) . - '' . - "{$link} {$redirect} {$category} {$section} {$fileMatch}" . - $extract . - "
    {$desc} - {$date}
    " . - '
    ' . - "
  • \n"; - } - } - } - - $html = null; - - $score = ''; - $related = ''; - if ( Hooks::run( 'ShowSearchHit', [ - $this, $result, $terms, - &$link, &$redirect, &$section, &$extract, - &$score, &$size, &$date, &$related, - &$html - ] ) ) { - $html = "
  • " . - "{$link} {$redirect} {$category} {$section} {$fileMatch}
    {$extract}\n" . - "
    {$size} - {$date}
    " . - "
  • \n"; - } - - return $html; - } - /** * Extract custom captions from search-interwiki-custom message */ @@ -948,17 +777,13 @@ class SpecialSearch extends SpecialPage { * Show results from other wikis * * @param SearchResultSet|array $matches - * @param string $query + * @param string $terms * * @return string */ - protected function showInterwiki( $matches, $query ) { + protected function showInterwiki( $matches, $terms ) { global $wgContLang; - $out = "
    " . - $this->msg( 'search-interwiki-caption' )->text() . "
    \n"; - $out .= "
    \n"; + $out = ''; + $widget = new MediaWiki\Widget\Search\SimpleSearchResultWidget( + $this, + $this->getLinkRenderer() + ); + foreach ( $iwResults as $iwPrefix => $results ) { + $out .= $this->iwHeaderHtml( $iwPrefix, $terms ); + $out .= ""; + } - // convert the whole thing to desired language variant - $out = $wgContLang->convert( $out ); + $out = + "
    " . + "
    " . + $this->msg( 'search-interwiki-caption' )->escaped() . + "
    " . + $out . + "
    "; - return $out; + // convert the whole thing to desired language variant + return $wgContLang->convert( $out ); } /** - * Show single interwiki link - * - * @param SearchResult $result - * @param string $lastInterwiki - * @param string $query - * - * @return string + * @param string $iwPrefix The interwiki prefix to render a header for + * @param string $terms The user-provided search terms */ - protected function showInterwikiHit( $result, $lastInterwiki, $query ) { - if ( $result->isBrokenTitle() ) { - return ''; - } - - $linkRenderer = $this->getLinkRenderer(); - - $title = $result->getTitle(); - - $titleSnippet = $result->getTitleSnippet(); - - if ( $titleSnippet == '' ) { - $titleSnippet = null; - } - - if ( $titleSnippet !== null ) { - $titleSnippet = new HtmlArmor( $titleSnippet ); - } - - $link = $linkRenderer->makeKnownLink( - $title, - $titleSnippet + protected function iwHeaderHtml( $iwPrefix, $terms ) { + if ( isset( $this->customCaptions[$iwPrefix] ) ) { + $caption = $this->customCaptions[$iwPrefix]; + } else { + $iwLookup = MediaWiki\MediaWikiServices::getInstance()->getInterwikiLookup(); + $interwiki = $iwLookup->fetch( $iwPrefix ); + $parsed = wfParseUrl( wfExpandUrl( $interwiki ? $interwiki->getURL() : '/' ) ); + $caption = $this->msg( 'search-interwiki-default', $parsed['host'] )->text(); + } + $searchLink = Linker::linkKnown( + Title::newFromText( "$iwPrefix:Special:Search" ), + $this->msg( 'search-interwiki-more' )->text(), + [], + [ + 'search' => $terms, + 'fulltext' => 1, + ] ); - - // format redirect if any - $redirectTitle = $result->getRedirectTitle(); - $redirectText = $result->getRedirectSnippet(); - $redirect = ''; - if ( !is_null( $redirectTitle ) ) { - if ( $redirectText == '' ) { - $redirectText = null; - } - - if ( $redirectText !== null ) { - $redirectText = new HtmlArmor( $redirectText ); - } - - $redirect = "" . - $this->msg( 'search-redirect' )->rawParams( - $linkRenderer->makeKnownLink( $redirectTitle, $redirectText ) )->text() . - ""; - } - - $out = ""; - // display project name - if ( is_null( $lastInterwiki ) || $lastInterwiki != $title->getInterwiki() ) { - if ( array_key_exists( $title->getInterwiki(), $this->customCaptions ) ) { - // captions from 'search-interwiki-custom' - $caption = $this->customCaptions[$title->getInterwiki()]; - } else { - // default is to show the hostname of the other wiki which might suck - // if there are many wikis on one hostname - $parsed = wfParseUrl( $title->getFullURL() ); - $caption = $this->msg( 'search-interwiki-default', $parsed['host'] )->text(); - } - // "more results" link (special page stuff could be localized, but we might not know target lang) - $searchTitle = Title::newFromText( $title->getInterwiki() . ":Special:Search" ); - $searchLink = $linkRenderer->makeKnownLink( - $searchTitle, - $this->msg( 'search-interwiki-more' )->text(), - [], - [ - 'search' => $query, - 'fulltext' => 'Search' - ] - ); - $out .= "
    - {$searchLink}{$caption}
    \n