Extension:Calendar (Shane)
From MediaWiki.org
The Calendar extension extension creates a calendar of the month and year in any MediaWiki page.
Contents |
[edit] Install
Create a file called 'calendar_extension.php' in your extensions/ directory, and add the following code...
Works on Mediawiki 1.5.x and 1.6.x.
[edit] Code
<?php # Calendar Extension # Creates a calendar of the month and year. # # Example Code # # <calendar>05 2006</calendar> # $wgExtensionFunctions[] = "wfCalendarExtension"; $wgExtensionCredits['parserhook'][] = array( 'name' => 'Calendar', 'author' => 'Shane', 'description' => 'adds <nowiki><calender></nowiki> tag, for calender creation', 'url' => 'http://meta.wikimedia.org/wiki/Calendar_extension' ); /* DO NOT EDIT BEYOND THIS LINE */ function wfCalendarExtension() { global $wgParser; $wgParser->setHook( "calendar", "createmwCalendar" ); } # The callback function for converting the input text to HTML output function createmwCalendar($input) { global $wgOut; $input = $wgOut->parse($input, false); $array = explode(' ', $input); $month = $array[0]; $year = $array[1]; $mwCalendar = new mwCalendar(); $mwCalendar->dateNow($month, $year); return $mwCalendar->showThisMonth(); } class mwCalendar { var $cal = "CAL_GREGORIAN"; var $format = "%Y%m%d"; var $today; var $day; var $month; var $year; var $pmonth; var $pyear; var $nmonth; var $nyear; var $wday_names = array("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); var $wmonth_names = array("January","Febuary","March","April","May","June","July","August","September","October","November","December"); function mwCalendar() { $this->day = "1"; $today = ""; $month = ""; $year = ""; $pmonth = ""; $pyear = ""; $nmonth = ""; $nyear = ""; } function dateNow($month,$year) { $this->month = $month; $this->year = $year; $this->today = strftime("%d",time()); $this->pmonth = $this->month - 1; $this->pyear = $this->year - 1; $this->nmonth = $this->month + 1; $this->nyear = $this->year + 1; } function daysInMonth($month,$year) { if (empty($year)) { $year = mwCalendar::dateNow("%Y"); } if (empty($month)) { $month = mwCalendar::dateNow("%m"); } if($month == "2") { if(mwCalendar::isLeapYear($year)) { return 29; } else { return 28; } } else if ($month == "4" || $month == "6" || $month == "9" || $month == "11") { return 30; } else { return 31; } } function isLeapYear($year) { return (($year % 4 == "0" && $year % 100 != "0") || $year % 400 == "0"); } function dayOfWeek($month,$year) { if ($month > 2) { $month -= 2; } else { $month += 10; $year--; } $day = ( floor((13 * $month - 1) / 5) + $this->day + ($year % 100) + floor(($year % 100) / 4) + floor(($year / 100) / 4) - 2 * floor($year / 100) + 77); $weekday_number = (($day - 7 * floor($day / 7))); return $weekday_number; } function getWeekDay() { $week_day = mwCalendar::dayOfWeek($this->month,$this->year); //return $this->wday_names[$week_day]; return $week_Day; } function showThisMonth() { $output = ''; // reset var $output = '<table cellpadding="2" cellspacing="2">'; $output .= '<tr><td colspan="7" class="cal-header">'. $this->wmonth_names[$this->pmonth] . " " .$this->year .'</td></tr>'; $output .= '<tr>'; for($i=0;$i<7;$i++) $output .= '<td>'. $this->wday_names[$i]. '</td>'; $output .= '</tr>'; $wday = mwCalendar::dayOfWeek($this->month,$this->year); $no_days = mwCalendar::daysInMonth($this->month,$this->year); $count = 1; $output .= '<tr>'; for($i=1;$i<=$wday;$i++) { $output .= '<td> </td>'; $count++; } for($i=1;$i<=$no_days;$i++) { if($count > 6) { if($i == $this->today) { $output .= '<td>' . $i . '</td></tr>'; } else { $output .= '<td class="cal-weekend">' . $i . '</td></tr>'; } $count = 0; } else { if($i == $this->today) { $output .= '<td class="cal-today">' . $i . '</td>'; } else { $output .= '<td>' . $i . '</td>'; } } $count++; } $output .= '</tr></table>'; return $output; } } ?>
== Then simply add the following line to the end of your LocalSettings.php file:
include("extensions/calendar_extension.php");
and you are ready to go! Go to the sandbox and see if it works!
[edit] Usage
Basic syntax for adding the calendar is, as detailed in the code:
<calendar>05 2006</calendar>
[edit] Comments
At present this extension appears to do little more than draw you up a calendar. But it does. You can add events to this calendar like this:
<calendar> ## name=mycalendar ## view=threemonths ## format = mycalendar-%year-%m-%d </calendar>

