Check that methods always have a scope defined
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | $wgAutoloadClasses['SRFCHistoricalDate'] = dirname( __FILE__ ) |
||
4 | . '/SRFC_HistoricalDate.php'; |
||
5 | |||
6 | /** |
||
7 | * Result printer that prints query results as a monthly calendar. |
||
8 | * |
||
9 | * @file SRF_Calendar.php |
||
10 | * @ingroup SemanticResultFormats |
||
11 | * |
||
12 | * @author Yaron Koren |
||
13 | */ |
||
14 | class SRFCalendar extends SMWResultPrinter { |
||
15 | |||
16 | protected $mTemplate; |
||
17 | protected $mUserParam; |
||
18 | protected $mRealUserLang = null; |
||
19 | protected $mStartMonth; |
||
20 | protected $mStartYear; |
||
21 | |||
22 | protected function setColors( $colorsText ) { |
||
23 | $colors = []; |
||
24 | $colorElements = explode( ',', $colorsText ); |
||
25 | foreach ( $colorElements as $colorElem ) { |
||
26 | $propAndColor = explode( '=>', $colorElem ); |
||
27 | if ( count( $propAndColor ) == 2 ) { |
||
28 | $colors[$propAndColor[0]] = $propAndColor[1]; |
||
29 | } |
||
30 | } |
||
31 | $this->mColors = $colors; |
||
32 | } |
||
33 | |||
34 | protected function handleParameters( array $params, $outputmode ) { |
||
35 | parent::handleParameters( $params, $outputmode ); |
||
36 | |||
37 | $this->mTemplate = trim( $params['template'] ); |
||
38 | $this->mUserParam = trim( $params['userparam'] ); |
||
39 | // startmonth is initialized with current month by default |
||
40 | $this->mStartMonth = trim( $params['startmonth'] ); |
||
41 | // startyear is initialized with current year by default |
||
42 | $this->mStartYear = trim( $params['startyear'] ); |
||
43 | |||
44 | if ( $params['lang'] !== false ) { |
||
45 | global $wgLang; |
||
46 | // Store the actual user's language, so we can revert |
||
47 | // back to it after printing the calendar. |
||
48 | $this->mRealUserLang = clone ( $wgLang ); |
||
49 | $wgLang = Language::factory( trim( $params['lang'] ) ); |
||
50 | } |
||
51 | |||
52 | $this->setColors( $params['colors'] ); |
||
53 | } |
||
54 | |||
55 | public function getName() { |
||
56 | return wfMessage( 'srf_printername_calendar' )->text(); |
||
57 | } |
||
58 | |||
59 | /** |
||
60 | * @see SMWResultPrinter::buildResult |
||
61 | * |
||
62 | * @since 1.8 |
||
63 | * |
||
64 | * @param SMWQueryResult $results |
||
65 | * |
||
66 | * @return string |
||
67 | */ |
||
68 | protected function buildResult( SMWQueryResult $results ) { |
||
69 | $this->isHTML = false; |
||
70 | $this->hasTemplates = false; |
||
71 | |||
72 | // Skip checks - results with 0 entries are normal. |
||
73 | return $this->getResultText( $results, SMW_OUTPUT_HTML ); |
||
74 | } |
||
75 | |||
76 | /** |
||
77 | * (non-PHPdoc) |
||
78 | * @see SMWResultPrinter::getResultText() |
||
79 | * |
||
80 | * @todo Split up megamoth |
||
81 | */ |
||
82 | protected function getResultText( SMWQueryResult $res, $outputmode ) { |
||
83 | $events = []; |
||
84 | |||
85 | // Print all result rows. |
||
86 | while ( $row = $res->getNext() ) { |
||
87 | $dates = []; |
||
88 | $title = $text = $color = ''; |
||
89 | |||
90 | if ( $this->mTemplate != '' ) { |
||
91 | // Build template code |
||
92 | $this->hasTemplates = true; |
||
93 | |||
94 | if ( $this->mUserParam ) { |
||
95 | $text = "|userparam=$this->mUserParam"; |
||
96 | } |
||
97 | |||
98 | foreach ( $row as $i => $field ) { |
||
99 | $pr = $field->getPrintRequest(); |
||
100 | $text .= '|' . ( $i + 1 ) . '='; |
||
101 | |||
102 | while ( |
||
103 | ( $object = $field->getNextDataValue() ) !== false |
||
104 | ) { |
||
105 | if ( $object->getTypeID() == '_dat' ) { |
||
106 | $text .= $object->getLongWikiText(); |
||
107 | |||
108 | // use shorter "LongText" for wikipage |
||
109 | } elseif ( $object->getTypeID() == '_wpg' ) { |
||
110 | // handling of "link=" param |
||
111 | if ( $this->mLinkOthers ) { |
||
112 | $text .= |
||
113 | $object->getLongText( $outputmode, null ); |
||
114 | } else { |
||
115 | $text .= $object->getWikiValue(); |
||
116 | } |
||
117 | } else { |
||
118 | $text .= $object->getShortText( $outputmode, null ); |
||
119 | } |
||
120 | |||
121 | if ( |
||
122 | $pr->getMode() == SMWPrintRequest::PRINT_PROP && |
||
123 | $pr->getTypeID() == '_dat' |
||
124 | ) { |
||
125 | $datePropLabel = $pr->getLabel(); |
||
126 | if ( !array_key_exists( $datePropLabel, $dates ) ) { |
||
127 | $dates[$datePropLabel] = []; |
||
128 | } |
||
129 | $dates[$datePropLabel][] = |
||
130 | $this->formatDateStr( $object ); |
||
131 | } |
||
132 | } |
||
133 | } |
||
134 | } else { |
||
135 | // Build simple text. |
||
136 | $numNonDateProperties = 0; |
||
137 | // Cycle through a 'row', which is the page |
||
138 | // name (the first field) plus all its |
||
139 | // properties. |
||
140 | foreach ( $row as $i => $field ) { |
||
141 | $pr = $field->getPrintRequest(); |
||
142 | // A property can have more than one |
||
143 | // value - cycle through all the values |
||
144 | // for this property. |
||
145 | $textForProperty = ''; |
||
146 | |||
147 | while ( |
||
148 | ( $object = $field->getNextDataValue() ) !== false |
||
149 | ) { |
||
150 | if ( $object->getTypeID() == '_dat' ) { |
||
151 | // Don't add date values to the display. |
||
152 | |||
153 | // use shorter "LongText" for wikipage |
||
154 | } elseif ( $object->getTypeID() == '_wpg' ) { |
||
155 | if ( $i == 0 ) { |
||
156 | $title = Title::newFromText( |
||
157 | $object->getShortWikiText( false ) |
||
158 | ); |
||
159 | } else { |
||
160 | $numNonDateProperties++; |
||
161 | |||
162 | // handling of "headers=" param |
||
163 | if ( $this->mShowHeaders == SMW_HEADERS_SHOW ) { |
||
164 | $textForProperty .= $pr->getHTMLText( |
||
165 | smwfGetLinker() |
||
166 | ) . ' '; |
||
167 | } elseif ( |
||
168 | $this->mShowHeaders == SMW_HEADERS_PLAIN |
||
169 | ) { |
||
170 | $textForProperty .= $pr->getLabel() . ' '; |
||
171 | } |
||
172 | |||
173 | // If $this->mShowHeaders == SMW_HEADERS_HIDE, |
||
174 | // print nothing. |
||
175 | // handling of "link=" param |
||
176 | if ( $this->mLinkOthers ) { |
||
177 | $textForProperty .= $object->getLongText( |
||
178 | $outputmode, |
||
179 | smwfGetLinker() |
||
180 | ); |
||
181 | } else { |
||
182 | $textForProperty .= $object->getWikiValue(); |
||
183 | } |
||
184 | } |
||
185 | } else { |
||
186 | $numNonDateProperties++; |
||
187 | $textForProperty .= |
||
188 | $pr->getHTMLText( smwfGetLinker() ) |
||
189 | . ' ' . $object->getShortText( |
||
190 | $outputmode, |
||
191 | smwfGetLinker() |
||
192 | ); |
||
193 | } |
||
194 | if ( |
||
195 | $pr->getMode() == SMWPrintRequest::PRINT_PROP && |
||
196 | $pr->getTypeID() == '_dat' |
||
197 | ) { |
||
198 | $datePropLabel = $pr->getLabel(); |
||
199 | if ( !array_key_exists( $datePropLabel, $dates ) ) { |
||
200 | $dates[$datePropLabel] = []; |
||
201 | } |
||
202 | $dates[$datePropLabel][] = |
||
203 | $this->formatDateStr( $object ); |
||
204 | } |
||
205 | } |
||
206 | |||
207 | // Add the text for this property to |
||
208 | // the main text, adding on parentheses |
||
209 | // or commas as needed. |
||
210 | if ( $numNonDateProperties == 1 ) { |
||
211 | $text .= ' ('; |
||
212 | } elseif ( $numNonDateProperties > 1 ) { |
||
213 | $text .= ', '; |
||
214 | } |
||
215 | $text .= $textForProperty; |
||
216 | } |
||
217 | if ( $numNonDateProperties > 0 ) { |
||
218 | $text .= ')'; |
||
219 | } |
||
220 | } |
||
221 | |||
222 | if ( count( $dates ) > 0 ) { |
||
223 | // Handle the 'color=' value, whether it came |
||
224 | // from a compound query or a regular one. |
||
225 | $resSubject = $field->getResultSubject(); |
||
226 | if ( isset( $resSubject->display_options ) |
||
227 | && is_array( $resSubject->display_options ) ) { |
||
228 | if ( array_key_exists( |
||
229 | 'color', |
||
230 | $resSubject->display_options |
||
231 | ) |
||
232 | ) { |
||
233 | $color = $resSubject->display_options['color']; |
||
234 | } |
||
235 | if ( |
||
236 | array_key_exists( |
||
237 | 'colors', |
||
238 | $resSubject->display_options |
||
239 | ) |
||
240 | ) { |
||
241 | $this->setColors( |
||
242 | $resSubject->display_options['colors'] |
||
243 | ); |
||
244 | } |
||
245 | } |
||
246 | |||
247 | foreach ( $dates as $label => $datesForLabel ) { |
||
248 | foreach ( $datesForLabel as $date ) { |
||
249 | $curText = $text; |
||
250 | // If there's more than one |
||
251 | // label, i.e. more than one |
||
252 | // date property being displayed, |
||
253 | // show the name of the current |
||
254 | // property in parentheses. |
||
255 | if ( count( $dates ) > 1 ) { |
||
256 | $curText = "($label) " . $curText; |
||
257 | } |
||
258 | $curColor = $color; |
||
259 | if ( array_key_exists( $label, $this->mColors ) ) { |
||
260 | $curColor = $this->mColors[$label]; |
||
261 | } |
||
262 | $events[] = [ $title, $curText, $date, $curColor ]; |
||
263 | } |
||
264 | } |
||
265 | } |
||
266 | } |
||
267 | |||
268 | $result = $this->displayCalendar( $events ); |
||
269 | |||
270 | // Go back to the actual user's language, in case a different |
||
271 | // language had been specified for this calendar. |
||
272 | if ( !is_null( $this->mRealUserLang ) ) { |
||
273 | global $wgLang; |
||
274 | $wgLang = $this->mRealUserLang; |
||
275 | } |
||
276 | |||
277 | global $wgParser; |
||
278 | |||
279 | if ( is_null( $wgParser->getTitle() ) ) { |
||
280 | return $result; |
||
281 | } else { |
||
282 | return [ $result, 'noparse' => 'true', 'isHTML' => 'true' ]; |
||
283 | } |
||
284 | } |
||
285 | |||
286 | protected static function intToMonth( $int ) { |
||
287 | $months = [ |
||
288 | '1' => 'january', |
||
289 | '2' => 'february', |
||
290 | '3' => 'march', |
||
291 | '4' => 'april', |
||
292 | '5' => 'may_long', |
||
293 | '6' => 'june', |
||
294 | '7' => 'july', |
||
295 | '8' => 'august', |
||
296 | '9' => 'september', |
||
297 | '10' => 'october', |
||
298 | '11' => 'november', |
||
299 | '12' => 'december', |
||
300 | ]; |
||
301 | |||
302 | return wfMessage( |
||
303 | array_key_exists( $int, $months ) |
||
304 | ? $months[$int] |
||
305 | : 'january' |
||
306 | )->inContentLanguage()->text(); |
||
307 | } |
||
308 | |||
309 | function formatDateStr( $object ) { |
||
0 ignored issues
–
show
|
|||
310 | // For some reason, getMonth() and getDay() sometimes return a |
||
311 | // number with a leading zero - get rid of it using (int) |
||
312 | return $object->getYear() |
||
313 | . '-' . (int)$object->getMonth() . '-' . (int)$object->getDay(); |
||
314 | } |
||
315 | |||
316 | function displayCalendar( $events ) { |
||
0 ignored issues
–
show
|
|||
317 | global $wgParser; |
||
318 | global $srfgFirstDayOfWeek; |
||
319 | global $srfgScriptPath; |
||
320 | |||
321 | $context = RequestContext::getMain(); |
||
322 | $request = $context->getRequest(); |
||
323 | if ( !$wgParser->mFirstCall ) { |
||
324 | $wgParser->disableCache(); |
||
325 | } |
||
326 | |||
327 | $context->getOutput()->addLink( |
||
328 | [ |
||
329 | 'rel' => 'stylesheet', |
||
330 | 'type' => 'text/css', |
||
331 | 'media' => 'screen, print', |
||
332 | 'href' => $srfgScriptPath |
||
333 | . '/formats/calendar/resources/ext.srf.calendar.css' |
||
334 | ] |
||
335 | ); |
||
336 | |||
337 | // Set variables differently depending on whether this is |
||
338 | // being called from a regular page, via #ask, or from a |
||
339 | // special page: most likely either Special:Ask or |
||
340 | // Special:RunQuery. |
||
341 | $pageTitle = $context->getTitle(); |
||
342 | if ( !$pageTitle ) { |
||
343 | $pageTitle = $wgParser->getTitle(); |
||
344 | } |
||
345 | $additionalQueryString = ''; |
||
346 | $hiddenInputs = ''; |
||
347 | |||
348 | if ( $pageTitle->isSpecialPage() ) { |
||
349 | $requestValues = $request->getValues(); |
||
350 | // Also go through the predefined PHP variable |
||
351 | // $_REQUEST, because $request->getValues() for |
||
352 | // some reason doesn't return array values - is |
||
353 | // there a better (less hacky) way to do this? |
||
354 | foreach ( $_REQUEST as $key => $value ) { |
||
355 | if ( is_array( $value ) ) { |
||
356 | foreach ( $value as $k2 => $v2 ) { |
||
357 | $newKey = $key . '[' . $k2 . ']'; |
||
358 | $requestValues[$newKey] = $v2; |
||
359 | } |
||
360 | } |
||
361 | } |
||
362 | |||
363 | foreach ( $requestValues as $key => $value ) { |
||
364 | if ( $key != 'month' && $key != 'year' |
||
365 | // values from 'RunQuery' |
||
366 | && $key != 'query' && $key != 'free_text' |
||
367 | ) { |
||
368 | $additionalQueryString .= "&$key=$value"; |
||
369 | $hiddenInputs .= "<input type=\"hidden\" " . |
||
370 | "name=\"$key\" value=\"$value\" />"; |
||
371 | } |
||
372 | } |
||
373 | } |
||
374 | |||
375 | // Set days of the week. |
||
376 | $weekDayNames = [ |
||
377 | 1 => wfMessage( 'sunday' )->text(), |
||
378 | 2 => wfMessage( 'monday' )->text(), |
||
379 | 3 => wfMessage( 'tuesday' )->text(), |
||
380 | 4 => wfMessage( 'wednesday' )->text(), |
||
381 | 5 => wfMessage( 'thursday' )->text(), |
||
382 | 6 => wfMessage( 'friday' )->text(), |
||
383 | 7 => wfMessage( 'saturday' )->text() |
||
384 | ]; |
||
385 | if ( empty( $srfgFirstDayOfWeek ) ) { |
||
386 | $firstDayOfWeek = 1; |
||
387 | $lastDayOfWeek = 7; |
||
388 | } else { |
||
389 | $firstDayOfWeek = |
||
390 | array_search( $srfgFirstDayOfWeek, $weekDayNames ); |
||
391 | if ( $firstDayOfWeek === false ) { |
||
392 | // Bad value for $srfgFirstDayOfWeek! |
||
393 | print 'Warning: Bad value for $srfgFirstDayOfWeek "' . |
||
394 | '(' . $srfgFirstDayOfWeek . '")'; |
||
395 | $firstDayOfWeek = 1; |
||
396 | } |
||
397 | if ( $firstDayOfWeek == 1 ) { |
||
398 | $lastDayOfWeek = 7; |
||
399 | } else { |
||
400 | $lastDayOfWeek = $firstDayOfWeek - 1; |
||
401 | } |
||
402 | } |
||
403 | |||
404 | // Now create the actual array of days of the week, based on |
||
405 | // the start day |
||
406 | $weekDays = []; |
||
407 | for ( $i = 1; $i <= 7; $i++ ) { |
||
408 | $curDay = ( ( $firstDayOfWeek + $i - 2 ) % 7 ) + 1; |
||
409 | $weekDays[$i] = $weekDayNames[$curDay]; |
||
410 | } |
||
411 | |||
412 | // Get all the date-based values we need - the current month |
||
413 | // and year (i.e., the one the user is looking at - not |
||
414 | // necessarily the "current" ones), the previous and next months |
||
415 | // and years (same - note that the previous or next month could |
||
416 | // be in a different year), the number of days in the current, |
||
417 | // previous and next months, etc. |
||
418 | |||
419 | if ( is_numeric( $this->mStartMonth ) && |
||
420 | ( intval( $this->mStartMonth ) == $this->mStartMonth ) && |
||
421 | $this->mStartMonth >= 1 && $this->mStartMonth <= 12 |
||
422 | ) { |
||
423 | $curMonthNum = $this->mStartMonth; |
||
424 | } else { |
||
425 | $curMonthNum = date( 'n' ); |
||
426 | } |
||
427 | if ( $request->getCheck( 'month' ) ) { |
||
428 | $queryMonth = $request->getVal( 'month' ); |
||
429 | if ( is_numeric( $queryMonth ) && |
||
430 | ( intval( $queryMonth ) == $queryMonth ) && |
||
431 | $queryMonth >= 1 && $queryMonth <= 12 |
||
432 | ) { |
||
433 | $curMonthNum = $request->getVal( 'month' ); |
||
434 | } |
||
435 | } |
||
436 | |||
437 | $curMonth = self::intToMonth( $curMonthNum ); |
||
438 | |||
439 | if ( is_numeric( $this->mStartYear ) && |
||
440 | ( intval( $this->mStartYear ) == $this->mStartYear ) |
||
441 | ) { |
||
442 | $curYear = $this->mStartYear; |
||
443 | } else { |
||
444 | $curYear = date( 'Y' ); |
||
445 | } |
||
446 | if ( $request->getCheck( 'year' ) ) { |
||
447 | $queryYear = $request->getVal( 'year' ); |
||
448 | if ( is_numeric( $queryYear ) && |
||
449 | intval( $queryYear ) == $queryYear |
||
450 | ) { |
||
451 | $curYear = $request->getVal( 'year' ); |
||
452 | } |
||
453 | } |
||
454 | |||
455 | if ( $curMonthNum == '1' ) { |
||
456 | $prevMonthNum = '12'; |
||
457 | $prevYear = $curYear - 1; |
||
458 | } else { |
||
459 | $prevMonthNum = $curMonthNum - 1; |
||
460 | $prevYear = $curYear; |
||
461 | } |
||
462 | |||
463 | if ( $curMonthNum == '12' ) { |
||
464 | $nextMonthNum = '1'; |
||
465 | $nextYear = $curYear + 1; |
||
466 | } else { |
||
467 | $nextMonthNum = $curMonthNum + 1; |
||
468 | $nextYear = $curYear; |
||
469 | } |
||
470 | |||
471 | // There's no year '0' - change it to '1' or '-1'. |
||
472 | if ( $curYear == '0' ) { |
||
473 | $curYear = '1'; |
||
474 | } |
||
475 | if ( $nextYear == '0' ) { |
||
476 | $nextYear = '1'; |
||
477 | } |
||
478 | if ( $prevYear == '0' ) { |
||
479 | $prevYear = '-1'; |
||
480 | } |
||
481 | |||
482 | $prevMonthUrl = $pageTitle->getLocalURL( |
||
483 | "month=$prevMonthNum&year=$prevYear" . |
||
484 | $additionalQueryString |
||
485 | ); |
||
486 | $nextMonthUrl = $pageTitle->getLocalURL( |
||
487 | "month=$nextMonthNum&year=$nextYear" . |
||
488 | $additionalQueryString |
||
489 | ); |
||
490 | $todayUrl = $pageTitle->getLocalURL( $additionalQueryString ); |
||
491 | |||
492 | $todayText = wfMessage( 'srfc_today' )->text(); |
||
493 | $prevMonthText = wfMessage( 'srfc_previousmonth' )->text(); |
||
494 | $nextMonthText = wfMessage( 'srfc_nextmonth' )->text(); |
||
495 | $goToMonthText = wfMessage( 'srfc_gotomonth' )->text(); |
||
496 | |||
497 | // Get day of the week that the first of this month falls on. |
||
498 | $firstDay = new SRFCHistoricalDate(); |
||
499 | $firstDay->create( $curYear, $curMonthNum, 1 ); |
||
500 | $startDay = $firstDayOfWeek - $firstDay->getDayOfWeek(); |
||
501 | if ( $startDay > 0 ) { |
||
502 | $startDay -= 7; |
||
503 | } |
||
504 | $daysInPrevMonth = |
||
505 | SRFCHistoricalDate::daysInMonth( $prevYear, $prevMonthNum ); |
||
506 | $daysInCurMonth = |
||
507 | SRFCHistoricalDate::daysInMonth( $curYear, $curMonthNum ); |
||
508 | $todayString = date( 'Y n j', time() ); |
||
509 | $pageName = $pageTitle->getPrefixedDbKey(); |
||
510 | |||
511 | // Create table for holding title and navigation information. |
||
512 | $text = <<<END |
||
513 | <table class="navigation_table"> |
||
514 | <tr><td class="month_name">$curMonth $curYear</td> |
||
515 | <td class="nav_links"><a href="$prevMonthUrl" title="$prevMonthText"> |
||
516 | <img src="{$srfgScriptPath}/formats/calendar/resources/images/left-arrow.png" border="0" /> |
||
517 | </a> <a href="$todayUrl">$todayText</a>  |
||
518 | <a href="$nextMonthUrl" title="$nextMonthText"> |
||
519 | <img src="{$srfgScriptPath}/formats/calendar/resources/images/right-arrow.png" border="0" /> |
||
520 | </a></td><td class="nav_form"><form> |
||
521 | <input type="hidden" name="title" value="$pageName"> |
||
522 | <select name="month"> |
||
523 | |||
524 | END; |
||
525 | for ( $i = 1; $i <= 12; $i++ ) { |
||
526 | $monthName = self::intToMonth( $i ); |
||
527 | $selectedStr = ( $i == $curMonthNum ) ? "selected" : ""; |
||
528 | $text .= "<option value=\"$i\" $selectedStr> |
||
529 | $monthName</option>\n"; |
||
530 | } |
||
531 | $text .= <<<END |
||
532 | </select> |
||
533 | <input name="year" type="text" value="$curYear" size="4"> |
||
534 | $hiddenInputs |
||
535 | <input type="submit" value="$goToMonthText"> |
||
536 | </form> |
||
537 | </td> |
||
538 | </tr> |
||
539 | </table> |
||
540 | |||
541 | <table class="month_calendar"> |
||
542 | <tr class="weekdays"> |
||
543 | |||
544 | END; |
||
545 | // First row of the main table holds the days of the week |
||
546 | foreach ( $weekDays as $weekDay ) { |
||
547 | $text .= "<td>$weekDay</td>"; |
||
548 | } |
||
549 | $text .= "</tr>\n"; |
||
550 | |||
551 | // Now, create the calendar itself - |
||
552 | // loop through a set of weeks, from a "Sunday" (which might be |
||
553 | // before the beginning of the month) to a "Saturday" (which |
||
554 | // might be after the end of the month). |
||
555 | // "Sunday" and "Saturday" are in quotes because the actual |
||
556 | // start and end days of the week can be set by the admin. |
||
557 | $dayOfTheWeek = $firstDayOfWeek; |
||
558 | $isLastWeek = false; |
||
559 | for ( $day = $startDay; |
||
560 | ( !$isLastWeek || $dayOfTheWeek != $firstDayOfWeek ); |
||
561 | $day++ ) { |
||
562 | if ( $dayOfTheWeek == $firstDayOfWeek ) { |
||
563 | $text .= "<tr>\n"; |
||
564 | } |
||
565 | if ( "$curYear $curMonthNum $day" == $todayString ) { |
||
566 | $text .= "<td class=\"today\">\n"; |
||
567 | } elseif ( $dayOfTheWeek == 1 || $dayOfTheWeek == 7 ) { |
||
568 | $text .= "<td class=\"weekend_day\">\n"; |
||
569 | } else { |
||
570 | $text .= "<td>\n"; |
||
571 | } |
||
572 | if ( $day == $daysInCurMonth || $day > 50 ) { |
||
573 | $isLastWeek = true; |
||
574 | } |
||
575 | // If this day is before or after the current month, |
||
576 | // set a "display day" to show on the calendar, and |
||
577 | // use a different CSS style for it. |
||
578 | if ( $day > $daysInCurMonth || $day < 1 ) { |
||
579 | if ( $day < 1 ) { |
||
580 | $displayDay = $day + $daysInPrevMonth; |
||
581 | $dateStr = |
||
582 | $prevYear . '-' . $prevMonthNum . '-' . $displayDay; |
||
583 | } |
||
584 | if ( $day > $daysInCurMonth ) { |
||
585 | $displayDay = $day - $daysInCurMonth; |
||
586 | $dateStr = |
||
587 | $nextYear . '-' . $nextMonthNum . '-' . $displayDay; |
||
588 | } |
||
589 | $text .= |
||
590 | "<div class=\"day day_other_month\">$displayDay</div>\n"; |
||
591 | } else { |
||
592 | $dateStr = $curYear . '-' . $curMonthNum . '-' . $day; |
||
593 | $text .= "<div class=\"day\">$day</div>\n"; |
||
594 | } |
||
595 | // Finally, the most important step - get the events |
||
596 | // that match this date, and the given set of criteria, |
||
597 | // and display them in this date's box. |
||
598 | $text .= "<div class=\"main\">\n"; |
||
599 | if ( $events == null ) { |
||
600 | $events = []; |
||
601 | } |
||
602 | foreach ( $events as $event ) { |
||
603 | list( $eventTitle, $otherText, $eventDate, $color ) = $event; |
||
604 | if ( $eventDate == $dateStr ) { |
||
605 | if ( $this->mTemplate != '' ) { |
||
606 | $templatetext = '{{' . $this->mTemplate . $otherText . |
||
607 | '|thisdate=' . $dateStr . '}}'; |
||
608 | $templatetext = |
||
609 | $wgParser->replaceVariables( $templatetext ); |
||
610 | $templatetext = |
||
611 | $wgParser->recursiveTagParse( $templatetext ); |
||
612 | $text .= $templatetext; |
||
613 | } else { |
||
614 | $eventStr = Linker::link( $eventTitle ); |
||
615 | if ( $color != '' ) { |
||
616 | $text .= "<div class=\"colored-entry\"> |
||
617 | <p style=\"border-left: 7px $color solid;\"> |
||
618 | $eventStr $otherText</p></div>\n"; |
||
619 | } else { |
||
620 | $text .= "$eventStr $otherText\n\n"; |
||
621 | } |
||
622 | } |
||
623 | } |
||
624 | } |
||
625 | $text .= <<<END |
||
626 | </div> |
||
627 | </td> |
||
628 | |||
629 | END; |
||
630 | if ( $dayOfTheWeek == $lastDayOfWeek ) { |
||
631 | $text .= "</tr>\n"; |
||
632 | } |
||
633 | if ( $dayOfTheWeek == 7 ) { |
||
634 | $dayOfTheWeek = 1; |
||
635 | } else { |
||
636 | $dayOfTheWeek++; |
||
637 | } |
||
638 | } |
||
639 | $text .= "</table>\n"; |
||
640 | |||
641 | return $text; |
||
642 | } |
||
643 | |||
644 | /** |
||
645 | * @see SMWResultPrinter::getParamDefinitions |
||
646 | * |
||
647 | * @since 1.8 |
||
648 | * |
||
649 | * @param $definitions array of IParamDefinition |
||
650 | * |
||
651 | * @return array of IParamDefinition|array |
||
652 | */ |
||
653 | public function getParamDefinitions( array $definitions ) { |
||
654 | $params = parent::getParamDefinitions( $definitions ); |
||
655 | |||
656 | $params['lang'] = [ |
||
657 | 'message' => 'srf_paramdesc_calendarlang', |
||
658 | 'default' => false, |
||
659 | 'manipulatedefault' => false, |
||
660 | ]; |
||
661 | |||
662 | $params['template'] = [ |
||
663 | 'message' => 'smw-paramdesc-template', |
||
664 | 'default' => '', |
||
665 | ]; |
||
666 | |||
667 | $params['userparam'] = [ |
||
668 | 'message' => 'smw-paramdesc-userparam', |
||
669 | 'default' => '', |
||
670 | ]; |
||
671 | |||
672 | $params['color'] = [ |
||
673 | 'message' => 'srf-paramdesc-color', |
||
674 | 'default' => '', |
||
675 | ]; |
||
676 | |||
677 | $params['colors'] = [ |
||
678 | 'message' => 'srf_paramdesc_calendarcolors', |
||
679 | 'default' => '', |
||
680 | ]; |
||
681 | |||
682 | $params['startmonth'] = [ |
||
683 | 'message' => 'srf-paramdesc-calendar-startmonth', |
||
684 | 'default' => date( 'n' ), |
||
685 | ]; |
||
686 | |||
687 | $params['startyear'] = [ |
||
688 | 'message' => 'srf-paramdesc-calendar-startyear', |
||
689 | 'default' => date( 'Y' ), |
||
690 | ]; |
||
691 | |||
692 | return $params; |
||
693 | } |
||
694 | } |
||
695 |
Adding explicit visibility (
private
,protected
, orpublic
) is generally recommend to communicate to other developers how, and from where this method is intended to be used.