Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
PageQueryPage
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 4
42
0.00% covered (danger)
0.00%
0 / 1
 preprocessResults
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setLanguageConverter
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getLanguageConverter
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 formatResult
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2/**
3 * Variant of QueryPage which formats the result as a simple link to the page.
4 *
5 * @license GPL-2.0-or-later
6 * @file
7 * @ingroup SpecialPage
8 */
9
10namespace MediaWiki\SpecialPage;
11
12use MediaWiki\Html\Html;
13use MediaWiki\Language\ILanguageConverter;
14use MediaWiki\Linker\Linker;
15use MediaWiki\MediaWikiServices;
16use MediaWiki\Skin\Skin;
17use MediaWiki\Title\Title;
18use stdClass;
19use Wikimedia\HtmlArmor\HtmlArmor;
20use Wikimedia\Rdbms\IReadableDatabase;
21use Wikimedia\Rdbms\IResultWrapper;
22
23/**
24 * Variant of QueryPage which formats the result as a simple link to the page
25 *
26 * @stable to extend
27 * @ingroup SpecialPage
28 */
29abstract class PageQueryPage extends QueryPage {
30
31    /** @var ILanguageConverter|null */
32    private $languageConverter = null;
33
34    /**
35     * Run a LinkBatch to pre-cache LinkCache information,
36     * like page existence and information for stub color and redirect hints.
37     * This should be done for live data and cached data.
38     *
39     * @stable to override
40     *
41     * @param IReadableDatabase $db
42     * @param IResultWrapper $res
43     */
44    public function preprocessResults( $db, $res ) {
45        $this->executeLBFromResultWrapper( $res );
46    }
47
48    /**
49     * @since 1.36
50     * @param ILanguageConverter $languageConverter
51     */
52    final protected function setLanguageConverter( ILanguageConverter $languageConverter ) {
53        $this->languageConverter = $languageConverter;
54    }
55
56    /**
57     * @note Call self::setLanguageConverter in your constructor when overriding
58     *
59     * @since 1.36
60     * @return ILanguageConverter
61     */
62    final protected function getLanguageConverter(): ILanguageConverter {
63        if ( $this->languageConverter === null ) {
64            // Fallback if not provided
65            // TODO Change to wfWarn in a future release
66            $this->languageConverter = MediaWikiServices::getInstance()->getLanguageConverterFactory()
67                ->getLanguageConverter( $this->getContentLanguage() );
68        }
69        return $this->languageConverter;
70    }
71
72    /**
73     * Format the result as a simple link to the page
74     *
75     * @stable to override
76     *
77     * @param Skin $skin
78     * @param stdClass $row Result row
79     * @return string
80     */
81    public function formatResult( $skin, $row ) {
82        $title = Title::makeTitleSafe( $row->namespace, $row->title );
83        if ( $title instanceof Title ) {
84
85            $text = $this->getLanguageConverter()->convertHtml( $title->getPrefixedText() );
86            return $this->getLinkRenderer()->makeLink( $title, new HtmlArmor( $text ) );
87        } else {
88            return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ],
89                Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
90        }
91    }
92}
93
94/** @deprecated class alias since 1.41 */
95class_alias( PageQueryPage::class, 'PageQueryPage' );