0byt3m1n1
Path:
/
data
/
applications
/
aps.bak
/
lifetype
/
1.2.11-2
/
standard
/
htdocs
/
class
/
data
/
[
Home
]
File: htmlcalendar.class.php
<?php /** * \ingroup Data * * Generates an html calendar * * PHP Calendar Class Version 1.4 (5th March 2001) * * Copyright David Wilkinson 2000 - 2001. All Rights reserved. * * This software may be used, modified and distributed freely * providing this copyright notice remains intact at the head * of the file. * * This software is freeware. The author accepts no liability for * any loss or damages whatsoever incurred directly or indirectly * from the use of this script. The author of this software makes * no claims as to its fitness for any purpose whatsoever. If you * wish to use this software you should first satisfy yourself that * it meets your requirements. * * URL: http://www.cascade.org.uk/software/php/calendar/ * Email: davidw@cascade.org.uk * * Modified by fuze (http://www.fuze.org) on 2004/07/11 * * Just changed the html table output for better (CSS) accessibility * and variable names. */ class Calendar { /* Constructor for the Calendar class */ function Calendar() { } /** * Get the array of strings used to label the days of the week. This array contains seven * elements, one for each day of the week. The first entry in this array represents Sunday. */ function getDayNames() { return $this->dayNames; } /** * Set the array of strings used to label the days of the week. This array must contain seven * elements, one for each day of the week. The first entry in this array represents Sunday. */ function setDayNames($names) { $this->dayNames = $names; } /** * Get the array of strings used to label the months of the year. This array contains twelve * elements, one for each month of the year. The first entry in this array represents January. */ function getMonthNames() { return $this->monthNames; } /** * Set the array of strings used to label the months of the year. This array must contain twelve * elements, one for each month of the year. The first entry in this array represents January. */ function setMonthNames($names) { $this->monthNames = $names; } /** * Gets the start day of the week. This is the day that appears in the first column * of the calendar. Sunday = 0. */ function getStartDay() { return $this->startDay; } /** * Sets the start day of the week. This is the day that appears in the first column * of the calendar. Sunday = 0. */ function setStartDay($day) { $this->startDay = $day; } /** * Gets the start month of the year. This is the month that appears first in the year * view. January = 1. */ function getStartMonth() { return $this->startMonth; } /** * Sets the start month of the year. This is the month that appears first in the year * view. January = 1. */ function setStartMonth($month) { $this->startMonth = $month; } /** * Return the URL to link to in order to display a calendar for a given month/year. * You must override this method if you want to activate the "forward" and "back" * feature of the calendar. * * Note: If you return an empty string from this function, no navigation link will * be displayed. This is the default behaviour. * * If the calendar is being displayed in "year" view, $month will be set to zero. */ function getCalendarLink($month, $year) { return ""; } /** * Return the URL to link to for a given date. * You must override this method if you want to activate the date linking * feature of the calendar. * * Note: If you return an empty string from this function, no navigation link will * be displayed. This is the default behaviour. */ function getDateLink($day, $month, $year) { return ""; } /** * Return the HTML for the current month */ function getCurrentMonthView() { $d = getdate(time()); return $this->getMonthView($d["mon"], $d["year"]); } /** * Return the HTML for the current year */ function getCurrentYearView() { $d = getdate(time()); return $this->getYearView($d["year"]); } /** * Return the HTML for a specified month */ function getMonthView($month, $year) { return $this->getMonthHTML($month, $year); } /** * Return the HTML for a specified year */ function getYearView($year) { return $this->getYearHTML($year); } /******************************************************************************** The rest are private methods. No user-servicable parts inside. You shouldn't need to call any of these functions directly. *********************************************************************************/ /** * Calculate the number of days in a month, taking into account leap years. */ function getDaysInMonth($month, $year) { if ($month < 1 || $month > 12) { return 0; } $d = $this->daysInMonth[$month - 1]; if ($month == 2) { // Check for leap year // Forget the 4000 rule, I doubt I'll be around then... if ($year%4 == 0) { if ($year%100 == 0) { if ($year%400 == 0) { $d = 29; } } else { $d = 29; } } } return $d; } /** * Generate the HTML for a given month */ function getMonthHTML($m, $y, $showYear = 1, $timestamp = 0) { $s = ""; $a = $this->adjustDate($m, $y); $month = $a[0]; $year = $a[1]; $daysInMonth = $this->getDaysInMonth($month, $year); $date = getdate(mktime(12, 0, 0, $month, 1, $year)); $first = $date["wday"]; $monthName = $this->monthNames[$month - 1]; $prev = $this->adjustDate($month - 1, $year); $next = $this->adjustDate($month + 1, $year); if ($showYear == 1) { $prevMonth = $this->getCalendarLink($prev[0], $prev[1]); $nextMonth = $this->getCalendarLink($next[0], $next[1]); $nextMonthName = $this->monthNames[ $next[0] - 1 ].(($showYear > 0) ? " " . $next[1] : ""); $prevMonthName = $this->monthNames[ $prev[0] - 1 ].(($showYear > 0) ? " " . $prev[1] : ""); } else { $prevMonth = ""; $nextMonth = ""; } $header = $monthName . (($showYear > 0) ? " " . $year : ""); //$s .= '<h2>'.$header.'</h2>'; // remove this line #1 $s .= "<table class=\"calMonth\" summary=\"\">\n"; ///* // remove this line #2 $s .= "<thead>\n"; $s .= "<tr class=\"calMonthNav\">\n"; $s .= "\t<th class=\"calMonthBackward\">" . (($prevMonth == "") ? " " : "<a href=\"$prevMonth\" title=\"$prevMonthName\">«</a>") . "</th>\n"; $s .= "\t<th class=\"calMonthCurrent\" colspan=\"5\">$header</th>\n"; $s .= "\t<th class=\"calMonthForward\">" . (($nextMonth == "") ? " " : "<a href=\"$nextMonth\" title=\"$nextMonthName\">»</a>") . "</th>\n"; $s .= "</tr>\n"; // */ // remove this line #3 to go to t $s .= "<tr class=\"calMonthHeader\">\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay)%7] . "\">" . $this->dayNamesShort[($this->startDay)%7] . "</th>\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay+1)%7] . "\">" . $this->dayNamesShort[($this->startDay+1)%7] . "</th>\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay+2)%7] . "\">" . $this->dayNamesShort[($this->startDay+2)%7] . "</th>\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay+3)%7] . "\">" . $this->dayNamesShort[($this->startDay+3)%7] . "</th>\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay+4)%7] . "\">" . $this->dayNamesShort[($this->startDay+4)%7] . "</th>\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay+5)%7] . "\">" . $this->dayNamesShort[($this->startDay+5)%7] . "</th>\n"; $s .= "\t<th scope=\"col\" abbr=\"" . $this->dayNames[($this->startDay+6)%7] . "\">" . $this->dayNamesShort[($this->startDay+6)%7] . "</th>\n"; $s .= "</tr>\n"; $s .= "</thead>\n"; $s .= "<tbody>\n"; // We need to work out what date to start at so that the first appears in the correct column $d = $this->startDay + 1 - $first; while ($d > 1) { $d -= 7; } // Make sure we know when today is, so that we can use a different CSS style if ( $timestamp == 0 ) { $today = getdate(time()); } else { $today = getdate($timestamp); } while ($d <= $daysInMonth) { $s .= "<tr>\n"; for ($i = 0; $i < 7; $i++) { $class = ($year == $today["year"] && $month == $today["mon"] && $d == $today["mday"]) ? " class=\"calMonthToday\"" : " class=\"calMonthDay\""; $s .= "\t<td$class>"; if ($d > 0 && $d <= $daysInMonth) { $link = $this->getDateLink($d, $month, $year); $s .= (($link == "") ? $d : "<a href=\"$link\">$d</a>"); } else { $s .= " "; } $s .= "</td>\n"; $d++; } $s .= "</tr>\n"; } $s .= "</tbody>\n"; $s .= "</table>\n"; return $s; } /** * Generate the HTML for a given year */ function getYearHTML($year) { $s = ""; $prev = $this->getCalendarLink(0, $year - 1); $next = $this->getCalendarLink(0, $year + 1); $s .= "<table class=\"calYear\" summary=\"\">\n"; $s .= "<thead>\n"; $s .= "<tr>"; $s .= "\t<th class=\"calYearBackward\">" . (($prev == "") ? " " : "<a href=\"$prev\">«</a>") . "</th>\n"; $s .= "\t<th class=\"calYearCurrent\">" . (($this->startMonth > 1) ? $year . " - " . ($year + 1) : $year) ."</th>\n"; $s .= "\t<th class=\"calYearForward\">" . (($next == "") ? " " : "<a href=\"$next\">»</a>") . "</th>\n"; $s .= "</tr>\n"; $s .= "</thead>\n"; $s .= "<tbody>\n"; $s .= "<tr>"; $s .= "\t<td>" . $this->getMonthHTML(0 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(1 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(2 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "</tr>\n"; $s .= "<tr>\n"; $s .= "\t<td>" . $this->getMonthHTML(3 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(4 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(5 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "</tr>\n"; $s .= "<tr>\n"; $s .= "\t<td>" . $this->getMonthHTML(6 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(7 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(8 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "</tr>\n"; $s .= "<tr>\n"; $s .= "\t<td>" . $this->getMonthHTML(9 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(10 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "\t<td>" . $this->getMonthHTML(11 + $this->startMonth, $year, 0) ."</td>\n"; $s .= "</tr>\n"; $s .= "</tbody>\n"; $s .= "</table>\n"; return $s; } /** * Adjust dates to allow months > 12 and < 0. Just adjust the years appropriately. * e.g. Month 14 of the year 2001 is actually month 2 of year 2002. */ function adjustDate($month, $year) { $a = array(); $a[0] = $month; $a[1] = $year; while ($a[0] > 12) { $a[0] -= 12; $a[1]++; } while ($a[0] <= 0) { $a[0] += 12; $a[1]--; } return $a; } /** * The start day of the week. This is the day that appears in the first column * of the calendar. Sunday = 0. */ var $startDay = 1; /** * The start month of the year. This is the month that appears in the first slot * of the calendar in the year view. January = 1. */ var $startMonth = 1; /** * The labels to display for the days of the week. The first entry in this array * represents Sunday. */ var $dayNames = array("S", "M", "T", "W", "T", "F", "S"); /** * The labels to display for the months of the year. The first entry in this array * represents January. */ var $monthNames = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); /** * The number of days in each month. You're unlikely to want to change this... * The first entry in this array represents January. */ var $daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); } ?>