Index: branches/wmf/1.18wmf1/extensions/CentralNotice/CentralNoticeLogPager.php |
— | — | @@ -1,356 +0,0 @@ |
2 | | -<?php |
3 | | - |
4 | | -class CentralNoticeLogPager extends ReverseChronologicalPager { |
5 | | - var $viewPage, $special; |
6 | | - |
7 | | - function __construct( $special ) { |
8 | | - global $wgRequest; |
9 | | - $this->special = $special; |
10 | | - parent::__construct(); |
11 | | - |
12 | | - // Override paging defaults |
13 | | - list( $this->mLimit, /* $offset */ ) = $this->mRequest->getLimitOffset( 20, '' ); |
14 | | - $this->mLimitsShown = array( 20, 50, 100 ); |
15 | | - |
16 | | - $this->viewPage = SpecialPage::getTitleFor( 'CentralNotice' ); |
17 | | - } |
18 | | - |
19 | | - /** |
20 | | - * Sort the log list by timestamp |
21 | | - */ |
22 | | - function getIndexField() { |
23 | | - return 'notlog_timestamp'; |
24 | | - } |
25 | | - |
26 | | - /** |
27 | | - * Pull log entries from the database |
28 | | - */ |
29 | | - function getQueryInfo() { |
30 | | - global $wgRequest; |
31 | | - |
32 | | - $filterStartDate = 0; |
33 | | - $filterEndDate = 0; |
34 | | - $startYear = $wgRequest->getVal( 'start_year' ); |
35 | | - if ( $startYear === 'other' ) $startYear = null; |
36 | | - $startMonth = $wgRequest->getVal( 'start_month' ); |
37 | | - if ( $startMonth === 'other' ) $startMonth = null; |
38 | | - $startDay = $wgRequest->getVal( 'start_day' ); |
39 | | - if ( $startDay === 'other' ) $startDay = null; |
40 | | - $endYear = $wgRequest->getVal( 'end_year' ); |
41 | | - if ( $endYear === 'other' ) $endYear = null; |
42 | | - $endMonth = $wgRequest->getVal( 'end_month' ); |
43 | | - if ( $endMonth === 'other' ) $endMonth = null; |
44 | | - $endDay = $wgRequest->getVal( 'end_day' ); |
45 | | - if ( $endDay === 'other' ) $endDay = null; |
46 | | - |
47 | | - if ( $startYear && $startMonth && $startDay ) { |
48 | | - $filterStartDate = $startYear . $startMonth . $startDay; |
49 | | - } |
50 | | - if ( $endYear && $endMonth && $endDay ) { |
51 | | - $filterEndDate = $endYear . $endMonth . $endDay; |
52 | | - } |
53 | | - $filterCampaign = $wgRequest->getVal( 'campaign' ); |
54 | | - $filterUser = $wgRequest->getVal( 'user' ); |
55 | | - $reset = $wgRequest->getVal( 'centralnoticelogreset' ); |
56 | | - |
57 | | - $info = array( |
58 | | - 'tables' => array( 'cn_notice_log' ), |
59 | | - 'fields' => '*', |
60 | | - 'conds' => array() |
61 | | - ); |
62 | | - |
63 | | - if ( !$reset ) { |
64 | | - if ( $filterStartDate > 0 ) { |
65 | | - $filterStartDate = intval( $filterStartDate.'000000' ); |
66 | | - $info['conds'][] = "notlog_timestamp >= $filterStartDate"; |
67 | | - } |
68 | | - if ( $filterEndDate > 0 ) { |
69 | | - $filterEndDate = intval( $filterEndDate.'000000' ); |
70 | | - $info['conds'][] = "notlog_timestamp < $filterEndDate"; |
71 | | - } |
72 | | - if ( $filterCampaign ) { |
73 | | - $info['conds'][] = "notlog_not_name LIKE '$filterCampaign'"; |
74 | | - } |
75 | | - if ( $filterUser ) { |
76 | | - $user = User::newFromName( $filterUser ); |
77 | | - $userId = $user->getId(); |
78 | | - $info['conds'][] = "notlog_user_id = $userId"; |
79 | | - } |
80 | | - } |
81 | | - |
82 | | - return $info; |
83 | | - } |
84 | | - |
85 | | - /** |
86 | | - * Generate the content of each table row (1 row = 1 log entry) |
87 | | - */ |
88 | | - function formatRow( $row ) { |
89 | | - global $wgLang, $wgExtensionAssetsPath; |
90 | | - |
91 | | - // Create a user object so we can pull the name, user page, etc. |
92 | | - $loggedUser = User::newFromId( $row->notlog_user_id ); |
93 | | - // Create the user page link |
94 | | - $userLink = $this->getSkin()->makeLinkObj( $loggedUser->getUserPage(), |
95 | | - $loggedUser->getName() ); |
96 | | - $userTalkLink = $this->getSkin()->makeLinkObj( $loggedUser->getTalkPage(), |
97 | | - wfMsg ( 'centralnotice-talk-link' ) ); |
98 | | - |
99 | | - // Create the campaign link |
100 | | - $campaignLink = $this->getSkin()->makeLinkObj( $this->viewPage, |
101 | | - htmlspecialchars( $row->notlog_not_name ), |
102 | | - 'method=listNoticeDetail¬ice=' . urlencode( $row->notlog_not_name ) ); |
103 | | - |
104 | | - // Begin log entry primary row |
105 | | - $htmlOut = Xml::openElement( 'tr' ); |
106 | | - |
107 | | - $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top' ) ); |
108 | | - if ( $row->notlog_action !== 'removed' ) { |
109 | | - $htmlOut .= '<a href="javascript:toggleLogDisplay(\''.$row->notlog_id.'\')">'. |
110 | | - '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/collapsed.png" id="cn-collapsed-'.$row->notlog_id.'" style="display:block;"/>'. |
111 | | - '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/uncollapsed.png" id="cn-uncollapsed-'.$row->notlog_id.'" style="display:none;"/>'. |
112 | | - '</a>'; |
113 | | - } |
114 | | - $htmlOut .= Xml::closeElement( 'td' ); |
115 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ), |
116 | | - $wgLang->date( $row->notlog_timestamp ) . ' ' . $wgLang->time( $row->notlog_timestamp ) |
117 | | - ); |
118 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ), |
119 | | - wfMsg ( 'centralnotice-user-links', $userLink, $userTalkLink ) |
120 | | - ); |
121 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ), |
122 | | - $row->notlog_action |
123 | | - ); |
124 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ), |
125 | | - $campaignLink |
126 | | - ); |
127 | | - $htmlOut .= Xml::tags( 'td', array(), |
128 | | - ' ' |
129 | | - ); |
130 | | - |
131 | | - // End log entry primary row |
132 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
133 | | - |
134 | | - if ( $row->notlog_action !== 'removed' ) { |
135 | | - // Begin log entry secondary row |
136 | | - $htmlOut .= Xml::openElement( 'tr', array( 'id' => 'cn-log-details-'.$row->notlog_id, 'style' => 'display:none;' ) ); |
137 | | - |
138 | | - $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ), |
139 | | - ' ' // force a table cell in older browsers |
140 | | - ); |
141 | | - $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top', 'colspan' => '5' ) ); |
142 | | - if ( $row->notlog_action == 'created' ) { |
143 | | - $htmlOut .= $this->showInitialSettings( $row ); |
144 | | - } else if ( $row->notlog_action == 'modified' ) { |
145 | | - $htmlOut .= $this->showChanges( $row ); |
146 | | - } |
147 | | - $htmlOut .= Xml::closeElement( 'td' ); |
148 | | - |
149 | | - // End log entry primary row |
150 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
151 | | - } |
152 | | - |
153 | | - return $htmlOut; |
154 | | - } |
155 | | - |
156 | | - function showInitialSettings( $row ) { |
157 | | - global $wgLang; |
158 | | - $details = ''; |
159 | | - $details .= wfMsg ( |
160 | | - 'centralnotice-log-label', |
161 | | - wfMsg ( 'centralnotice-start-date' ), |
162 | | - $wgLang->date( $row->notlog_end_start ).' '.$wgLang->time( $row->notlog_end_start ) |
163 | | - )."<br/>"; |
164 | | - $details .= wfMsg ( |
165 | | - 'centralnotice-log-label', |
166 | | - wfMsg ( 'centralnotice-end-date' ), |
167 | | - $wgLang->date( $row->notlog_end_end ).' '.$wgLang->time( $row->notlog_end_end ) |
168 | | - )."<br/>"; |
169 | | - $details .= wfMsg ( |
170 | | - 'centralnotice-log-label', |
171 | | - wfMsg ( 'centralnotice-projects' ), |
172 | | - $row->notlog_end_projects |
173 | | - )."<br/>"; |
174 | | - $language_count = count( explode ( ', ', $row->notlog_end_languages ) ); |
175 | | - $languageList = ''; |
176 | | - if ( $language_count > 15 ) { |
177 | | - $languageList = wfMsg ( 'centralnotice-multiple-languages', $language_count ); |
178 | | - } elseif ( $language_count > 0 ) { |
179 | | - $languageList = $row->notlog_end_languages; |
180 | | - } |
181 | | - $details .= wfMsg ( |
182 | | - 'centralnotice-log-label', |
183 | | - wfMsg ( 'centralnotice-languages' ), |
184 | | - $languageList |
185 | | - )."<br/>"; |
186 | | - $details .= wfMsg ( |
187 | | - 'centralnotice-log-label', |
188 | | - wfMsg ( 'centralnotice-geo' ), |
189 | | - ($row->notlog_end_geo ? 'on' : 'off') |
190 | | - )."<br/>"; |
191 | | - if ( $row->notlog_end_geo ) { |
192 | | - $country_count = count( explode ( ', ', $row->notlog_end_countries ) ); |
193 | | - $countryList = ''; |
194 | | - if ( $country_count > 20 ) { |
195 | | - $countryList = wfMsg ( 'centralnotice-multiple-countries', $country_count ); |
196 | | - } elseif ( $country_count > 0 ) { |
197 | | - $countryList = $row->notlog_end_countries; |
198 | | - } |
199 | | - $details .= wfMsg ( |
200 | | - 'centralnotice-log-label', |
201 | | - wfMsg ( 'centralnotice-countries' ), |
202 | | - $countryList |
203 | | - )."<br/>"; |
204 | | - } |
205 | | - return $details; |
206 | | - } |
207 | | - |
208 | | - function showChanges( $row ) { |
209 | | - global $wgLang; |
210 | | - $details = ''; |
211 | | - if ( $row->notlog_begin_start !== $row->notlog_end_start ) { |
212 | | - $details .= wfMsg ( |
213 | | - 'centralnotice-log-label', |
214 | | - wfMsg ( 'centralnotice-start-date' ), |
215 | | - wfMsg ( |
216 | | - 'centralnotice-changed', |
217 | | - $wgLang->date( $row->notlog_begin_start ).' '.$wgLang->time( $row->notlog_begin_start ), |
218 | | - $wgLang->date( $row->notlog_end_start ).' '.$wgLang->time( $row->notlog_end_start ) |
219 | | - ) |
220 | | - )."<br/>"; |
221 | | - } |
222 | | - if ( $row->notlog_begin_end !== $row->notlog_end_end ) { |
223 | | - $details .= wfMsg ( |
224 | | - 'centralnotice-log-label', |
225 | | - wfMsg ( 'centralnotice-end-date' ), |
226 | | - wfMsg ( |
227 | | - 'centralnotice-changed', |
228 | | - $wgLang->date( $row->notlog_begin_end ).' '.$wgLang->time( $row->notlog_begin_end ), |
229 | | - $wgLang->date( $row->notlog_end_end ).' '.$wgLang->time( $row->notlog_end_end ) |
230 | | - ) |
231 | | - )."<br/>"; |
232 | | - } |
233 | | - $details .= $this->testBooleanChange( 'enabled', $row ); |
234 | | - $details .= $this->testBooleanChange( 'preferred', $row ); |
235 | | - $details .= $this->testBooleanChange( 'locked', $row ); |
236 | | - $details .= $this->testBooleanChange( 'geo', $row ); |
237 | | - $details .= $this->testSetChange( 'projects', $row ); |
238 | | - $details .= $this->testSetChange( 'languages', $row ); |
239 | | - $details .= $this->testSetChange( 'countries', $row ); |
240 | | - if ( $row->notlog_begin_banners !== $row->notlog_end_banners ) { |
241 | | - // Show changes to banner weights and assignment |
242 | | - $beginBannersObject = json_decode( $row->notlog_begin_banners ); |
243 | | - $endBannersObject = json_decode( $row->notlog_end_banners ); |
244 | | - $beginBanners = array(); |
245 | | - $endBanners = array(); |
246 | | - foreach( $beginBannersObject as $key => $weight ) { |
247 | | - $beginBanners[$key] = $key.' ('.$weight.')'; |
248 | | - } |
249 | | - foreach( $endBannersObject as $key => $weight ) { |
250 | | - $endBanners[$key] = $key.' ('.$weight.')'; |
251 | | - } |
252 | | - if ( $beginBanners ) { |
253 | | - $before = implode( ', ', $beginBanners ); |
254 | | - } else { |
255 | | - $before = wfMsg ( 'centralnotice-no-assignments' ); |
256 | | - } |
257 | | - if ( $endBanners ) { |
258 | | - $after = implode( ', ', $endBanners ); |
259 | | - } else { |
260 | | - $after = wfMsg ( 'centralnotice-no-assignments' ); |
261 | | - } |
262 | | - $details .= wfMsg ( |
263 | | - 'centralnotice-log-label', |
264 | | - wfMsg ( 'centralnotice-templates' ), |
265 | | - wfMsg ( 'centralnotice-changed', $before, $after) |
266 | | - )."<br/>"; |
267 | | - } |
268 | | - return $details; |
269 | | - } |
270 | | - |
271 | | - private function testBooleanChange( $param, $row ) { |
272 | | - $result = ''; |
273 | | - $beginField = 'notlog_begin_'.$param; |
274 | | - $endField = 'notlog_end_'.$param; |
275 | | - if ( $row->$beginField !== $row->$endField ) { |
276 | | - $result .= wfMsg ( |
277 | | - 'centralnotice-log-label', |
278 | | - wfMsg ( 'centralnotice-'.$param ), |
279 | | - wfMsg ( |
280 | | - 'centralnotice-changed', |
281 | | - ( $row->$beginField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) ), |
282 | | - ( $row->$endField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) ) |
283 | | - ) |
284 | | - )."<br/>"; |
285 | | - } |
286 | | - return $result; |
287 | | - } |
288 | | - |
289 | | - private function testSetChange( $param, $row ) { |
290 | | - $result = ''; |
291 | | - $beginField = 'notlog_begin_'.$param; |
292 | | - $endField = 'notlog_end_'.$param; |
293 | | - if ( $row->$beginField !== $row->$endField ) { |
294 | | - $beginSet = array(); |
295 | | - $endSet = array(); |
296 | | - if ( $row->$beginField ) { |
297 | | - $beginSet = explode( ', ', $row->$beginField ); |
298 | | - } |
299 | | - if ( $row->$endField ) { |
300 | | - $endSet = explode( ', ', $row->$endField ); |
301 | | - } |
302 | | - $added = array_diff( $endSet, $beginSet ); |
303 | | - $removed = array_diff( $beginSet, $endSet ); |
304 | | - $differences = ''; |
305 | | - if ( $added ) { |
306 | | - $differences .= wfMsg ( 'centralnotice-added', implode( ', ', $added ) ); |
307 | | - if ( $removed ) $differences .= '; '; |
308 | | - } |
309 | | - if ( $removed ) { |
310 | | - $differences .= wfMsg ( 'centralnotice-removed', implode( ', ', $removed ) ); |
311 | | - } |
312 | | - $result .= wfMsg ( |
313 | | - 'centralnotice-log-label', |
314 | | - wfMsg ( 'centralnotice-'.$param ), |
315 | | - $differences |
316 | | - )."<br/>"; |
317 | | - } |
318 | | - return $result; |
319 | | - } |
320 | | - |
321 | | - /** |
322 | | - * Specify table headers |
323 | | - */ |
324 | | - function getStartBody() { |
325 | | - $htmlOut = ''; |
326 | | - $htmlOut .= Xml::openElement( 'table', array( 'id' => 'cn-campaign-logs', 'cellpadding' => 3 ) ); |
327 | | - $htmlOut .= Xml::openElement( 'tr' ); |
328 | | - $htmlOut .= Xml::element( 'th', array( 'style' => 'width: 20px;' ) ); |
329 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 130px;' ), |
330 | | - wfMsg ( 'centralnotice-timestamp' ) |
331 | | - ); |
332 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ), |
333 | | - wfMsg ( 'centralnotice-user' ) |
334 | | - ); |
335 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 100px;' ), |
336 | | - wfMsg ( 'centralnotice-action' ) |
337 | | - ); |
338 | | - $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ), |
339 | | - wfMsg ( 'centralnotice-notice' ) |
340 | | - ); |
341 | | - $htmlOut .= Xml::tags( 'td', array(), |
342 | | - ' ' |
343 | | - ); |
344 | | - $htmlOut .= Xml::closeElement( 'tr' ); |
345 | | - return $htmlOut; |
346 | | - } |
347 | | - |
348 | | - /** |
349 | | - * Close table |
350 | | - */ |
351 | | - function getEndBody() { |
352 | | - $htmlOut = ''; |
353 | | - $htmlOut .= Xml::closeElement( 'table' ); |
354 | | - return $htmlOut; |
355 | | - } |
356 | | - |
357 | | -} |