Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 36 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 1 |
ListUsersTestWiki | |
0.00% |
0 / 36 |
|
0.00% |
0 / 4 |
210 | |
0.00% |
0 / 1 |
getProjectInput | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
12 | |||
onSpecialListusersHeaderForm | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
12 | |||
onSpecialListusersHeader | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
12 | |||
onSpecialListusersQueryInfo | |
0.00% |
0 / 17 |
|
0.00% |
0 / 1 |
30 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\WikimediaIncubator; |
4 | |
5 | use MediaWiki\Hook\SpecialListusersHeaderFormHook; |
6 | use MediaWiki\Hook\SpecialListusersHeaderHook; |
7 | use MediaWiki\Hook\SpecialListusersQueryInfoHook; |
8 | use MediaWiki\MediaWikiServices; |
9 | use MediaWiki\Pager\Pager; |
10 | use MediaWiki\Title\Title; |
11 | use Xml; |
12 | |
13 | /** |
14 | * Ability to filter list of users based on their test wiki preference |
15 | */ |
16 | class 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 | } |