Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 98 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
SpecialSiteMatrix | |
0.00% |
0 / 98 |
|
0.00% |
0 / 3 |
600 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
execute | |
0.00% |
0 / 95 |
|
0.00% |
0 / 1 |
506 | |||
getGroupName | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\SiteMatrix; |
4 | |
5 | use LanguageCode; |
6 | use MediaWiki\Html\Html; |
7 | use MediaWiki\Languages\LanguageNameUtils; |
8 | use MediaWiki\SpecialPage\SpecialPage; |
9 | |
10 | class SpecialSiteMatrix extends SpecialPage { |
11 | |
12 | /** @var LanguageNameUtils */ |
13 | private $languageNameUtils; |
14 | |
15 | /** |
16 | * @param LanguageNameUtils $languageNameUtils |
17 | */ |
18 | public function __construct( |
19 | LanguageNameUtils $languageNameUtils |
20 | ) { |
21 | parent::__construct( 'SiteMatrix' ); |
22 | $this->languageNameUtils = $languageNameUtils; |
23 | } |
24 | |
25 | /** |
26 | * @param mixed $par |
27 | */ |
28 | public function execute( $par ) { |
29 | $langNames = $this->languageNameUtils->getLanguageNames(); |
30 | |
31 | $this->setHeaders(); |
32 | $this->outputHeader(); |
33 | |
34 | $matrix = new SiteMatrix(); |
35 | |
36 | $localLanguageNames = $this->languageNameUtils->getLanguageNames( $this->getLanguage()->getCode() ); |
37 | |
38 | # Construct the HTML |
39 | |
40 | # Header row |
41 | $s = Html::openElement( 'table', [ 'class' => 'wikitable', 'id' => 'mw-sitematrix-table' ] ) . |
42 | "<tr>" . |
43 | Html::element( 'th', |
44 | [ 'rowspan' => 2 ], |
45 | $this->msg( 'sitematrix-language' )->text() ) . |
46 | Html::element( 'th', |
47 | [ 'colspan' => count( $matrix->getSites() ) ], |
48 | $this->msg( 'sitematrix-project' )->text() ) . |
49 | "</tr> |
50 | <tr>"; |
51 | foreach ( $matrix->getNames() as $id => $name ) { |
52 | $url = $matrix->getSiteUrl( $id ); |
53 | $s .= Html::rawElement( 'th', [], "<a href=\"{$url}\">{$name}</a>" ); |
54 | } |
55 | $s .= "</tr>\n"; |
56 | |
57 | # Bulk of table |
58 | foreach ( $matrix->getLangList() as $lang ) { |
59 | $s .= '<tr>'; |
60 | $attribs = []; |
61 | if ( isset( $localLanguageNames[$lang] ) ) { |
62 | $attribs['title'] = $localLanguageNames[$lang]; |
63 | } |
64 | |
65 | if ( isset( $langNames[$lang] ) ) { |
66 | $langDisplay = Html::element( 'span', |
67 | [ 'lang' => LanguageCode::bcp47( $lang ) ], |
68 | $langNames[$lang] ); |
69 | } else { |
70 | $langDisplay = ''; |
71 | } |
72 | |
73 | if ( isset( $localLanguageNames[$lang] ) && |
74 | strlen( $localLanguageNames[$lang] ) && |
75 | $langNames[$lang] !== $localLanguageNames[$lang] |
76 | ) { |
77 | $langDisplay .= $this->msg( 'word-separator' )->escaped() . |
78 | $this->msg( 'parentheses', $localLanguageNames[$lang] )->escaped(); |
79 | } |
80 | $s .= Html::rawElement( 'td', |
81 | [ 'id' => $lang ], |
82 | Html::rawElement( 'strong', $attribs, $langDisplay ) |
83 | ); |
84 | |
85 | foreach ( $matrix->getNames() as $site => $name ) { |
86 | $url = $matrix->getUrl( $lang, $site ); |
87 | if ( $matrix->exist( $lang, $site ) ) { |
88 | # Wiki exists |
89 | $closed = $matrix->isClosed( $lang, $site ); |
90 | $s .= "<td>" . ( $closed ? "<del>" : '' ) . |
91 | "<a href=\"{$url}\">{$lang}</a>" . ( $closed ? "</del>" : '' ) . '</td>'; |
92 | } else { |
93 | # Non-existent wiki |
94 | $s .= "<td><a href=\"{$url}\" class=\"new\">{$lang}</a></td>"; |
95 | } |
96 | } |
97 | $s .= "</tr>\n"; |
98 | } |
99 | |
100 | $language = $this->getLanguage(); |
101 | # Total |
102 | $totalCount = 0; |
103 | $s .= '<tr><th rowspan="2" id="total">' . |
104 | $this->msg( 'sitematrix-sitetotal' )->escaped() . '</th>'; |
105 | foreach ( $matrix->getNames() as $site => $name ) { |
106 | $url = $matrix->getSiteUrl( $site ); |
107 | $count = $matrix->getCountPerSite( $site ); |
108 | $totalCount += $count; |
109 | $count = htmlspecialchars( $language->formatNum( $count ) ); |
110 | $s .= "<th><a href=\"{$url}\">{$count}</a></th>"; |
111 | } |
112 | $s .= '</tr>'; |
113 | |
114 | $s .= '<tr>'; |
115 | $noProjects = count( $matrix->getNames() ); |
116 | $totalCount = htmlspecialchars( $language->formatNum( $totalCount ) ); |
117 | $s .= "<th colspan=\"{$noProjects }\">{$totalCount}</th>"; |
118 | $s .= '</tr>'; |
119 | |
120 | $s .= Html::closeElement( 'table' ) . "\n"; |
121 | |
122 | # Specials |
123 | $s .= '<h2 id="mw-sitematrix-others">' . $this->msg( 'sitematrix-others' )->escaped() . '</h2>'; |
124 | |
125 | $s .= Html::openElement( 'table', |
126 | [ 'class' => 'wikitable', 'id' => 'mw-sitematrix-other-table' ] ) . |
127 | "<tr>" . |
128 | Html::element( 'th', [], $this->msg( 'sitematrix-other-projects' )->text() ) . |
129 | Html::element( 'th', [], $this->msg( 'sitematrix-other-projects-language' )->text() ) . |
130 | "</tr>"; |
131 | |
132 | foreach ( $matrix->getSpecials() as $special ) { |
133 | [ $lang, $site ] = $special; |
134 | |
135 | // sanity check |
136 | if ( !$lang && !$site ) { |
137 | continue; |
138 | } |
139 | |
140 | $langhost = str_replace( '_', '-', $lang ); |
141 | $url = $matrix->getUrl( $lang, $site ); |
142 | |
143 | # Handle options |
144 | $flags = []; |
145 | if ( $matrix->isPrivate( $lang . $site ) ) { |
146 | $flags[] = $this->msg( 'sitematrix-private' )->escaped(); |
147 | } |
148 | if ( $matrix->isFishbowl( $lang . $site ) ) { |
149 | $flags[] = $this->msg( 'sitematrix-fishbowl' )->escaped(); |
150 | } |
151 | if ( $matrix->isNonGlobal( $lang . $site ) ) { |
152 | $flags[] = $this->msg( 'sitematrix-nonglobal' )->escaped(); |
153 | } |
154 | $flagsStr = implode( ', ', $flags ); |
155 | if ( $site != 'wiki' ) { |
156 | $langhost .= $site; |
157 | } |
158 | $closed = $matrix->isClosed( $lang, $site ); |
159 | $s .= '<tr><td>' . ( $closed ? '<del>' : '' ) . |
160 | $language->specialList( '<a href="' . $url . '/">' . $langhost . "</a>", $flagsStr ) . |
161 | ( $closed ? '</del>' : '' ) . '</td>'; |
162 | $s .= '<td>' . $matrix->getLanguageCode( $lang, $site ) . '</td>'; |
163 | $s .= "</tr>\n"; |
164 | } |
165 | |
166 | $s .= Html::closeElement( 'table' ) . "\n"; |
167 | |
168 | $this->getOutput()->addHTML( $s ); |
169 | $this->getOutput()->addWikiMsg( 'sitematrix-total', $language->formatNum( $matrix->getCount() ) ); |
170 | } |
171 | |
172 | /** @inheritDoc */ |
173 | protected function getGroupName() { |
174 | return 'wiki'; |
175 | } |
176 | } |