Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
ListUsersTestWiki
0.00% covered (danger)
0.00%
0 / 36
0.00% covered (danger)
0.00%
0 / 4
210
0.00% covered (danger)
0.00%
0 / 1
 getProjectInput
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 onSpecialListusersHeaderForm
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 onSpecialListusersHeader
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
 onSpecialListusersQueryInfo
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3namespace MediaWiki\Extension\WikimediaIncubator;
4
5use MediaWiki\Hook\SpecialListusersHeaderFormHook;
6use MediaWiki\Hook\SpecialListusersHeaderHook;
7use MediaWiki\Hook\SpecialListusersQueryInfoHook;
8use MediaWiki\MediaWikiServices;
9use MediaWiki\Pager\Pager;
10use MediaWiki\Title\Title;
11use Xml;
12
13/**
14 * Ability to filter list of users based on their test wiki preference
15 */
16class ListUsersTestWiki implements
17    SpecialListusersHeaderFormHook,
18    SpecialListusersQueryInfoHook,
19    SpecialListusersHeaderHook
20{
21    /**
22     * If the &testwiki= parameter matches the project site (Incubator), return that
23     * @return array|null
24     */
25    public static function getProjectInput() {
26        global $wmincProjectSite, $wgRequest;
27        $input = strtolower( $wgRequest->getVal( 'testwiki', '' ) );
28        if ( $input == strtolower( $wmincProjectSite['name'] )
29            || $input == strtolower( $wmincProjectSite['short'] )
30        ) {
31            return $wmincProjectSite;
32        }
33        return null;
34    }
35
36    /**
37     * Input form
38     * @param Pager $pager
39     * @param string &$out
40     */
41    public function onSpecialListusersHeaderForm( $pager, &$out ) {
42        $testwiki = WikimediaIncubator::getUrlParam();
43        $project = self::getProjectInput();
44        $input = $project ? $project['name'] : ( $testwiki ? $testwiki['prefix'] : '' );
45        $out .= Xml::label( wfMessage( 'wminc-testwiki' )->text(), 'testwiki' ) . ' ' .
46            Xml::input( 'testwiki', 20, $input, [ 'id' => 'testwiki' ] ) . '<br />';
47    }
48
49    /**
50     * Show a message that you are viewing a list of users of a certain test wiki
51     * @param Pager $pager
52     * @param string &$out
53     */
54    public function onSpecialListusersHeader( $pager, &$out ) {
55        $project = self::getProjectInput();
56        if ( $project ) {
57            $out .= wfMessage( 'wminc-listusers-testwiki', '"' . $project['name'] . '"' )->parseAsBlock();
58        } else {
59            $testwiki = WikimediaIncubator::getUrlParam();
60            if ( $testwiki ) {
61                $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
62                $link = $linkRenderer->makeKnownLink( Title::newFromText( $testwiki['prefix'] ) );
63                $out .= wfMessage( 'wminc-listusers-testwiki' )->rawParams( $link )->parseAsBlock();
64            }
65        }
66    }
67
68    /**
69     * Query
70     * @param Pager $pager
71     * @param array &$query
72     */
73    public function onSpecialListusersQueryInfo( $pager, &$query ) {
74        $testwiki = WikimediaIncubator::getUrlParam();
75        $project = self::getProjectInput();
76        if ( !$project && !$testwiki ) {
77            return; # no input or invalid input
78        }
79        global $wmincPref;
80        $query['tables']['p1'] = 'user_properties';
81        $query['join_conds']['p1'] = [ 'JOIN', [ 'user_id=p1.up_user',
82            'p1.up_property' => "$wmincPref-project",
83            'p1.up_value' => $project ? $project['short'] : $testwiki['project']
84        ] ];
85        if ( $project ) {
86            return; # project site doesn't need language code = returning
87        }
88        $query['tables']['p2'] = 'user_properties';
89        $query['join_conds']['p2'] = [ 'JOIN', [ 'user_id=p2.up_user',
90            'p2.up_property' => "$wmincPref-code",
91            'p2.up_value' => $testwiki['lang']
92        ] ];
93    }
94}