Wiki source for DanWestCalendar


Show raw source

====Calendar Code Formatter==== >>==See Also==
~- [[OnegWRNoDefaultCodeClass | NoDefaultCodeClass]]
>>

==What==
~- Uses the CODE formatting feature to generate a calendar
~- The 'code' includes date / schedule information
~- Includes formatter and CSS code.

==Installation==
~- You MUST apply the [[OnegWRNoDefaultCodeClass | NoDefaultCodeClass]] workaround first. This will prevent the //code// class from being applied prior to your formatter being run.
~- install the following in ##formatters/cal.php##
~- splice in the CSS code

==Usage==
~- You only need to enter dates you wish to 'mark' with text (//Appointments, etc//)
~- All lines begin with the day number, a semicolon ';' then the text you want in that date
~- If directly following the ';' you include //%classname%//, that class will be applied to the **<td>** date cell
~- Current 'classes'
~~- holiday - //Marks the day number in red//
~~- green - //Makes the day cell with green background//
~~- red - //Makes the day cell with red background//
~~- blue - //you guessed it..//
~~- high - //Highlight the cell (currently green)//
~- Can combine classes //(ex: 'blue holiday')//

**Example**
""%%(cal)""
Jan 2008
1;%holiday% New Years
15;Joes Birthday
""%%""
//Note: The %holiday% will not display but will apply the 'holiday' class to the table cell for Jan 1//

File: **formatters/cal.php**
%%(php)
<?php
// formatter - cal.php
// Convert code segment into calendar
// Dan West - Dec 2007
$cal_month = '';
$cal_days = 0;
$cal_start = 0;
$cal_info = array();

// 1st line = (month year)
// ex: January 2008 or Jan 2008
$cal_firstline=0;
foreach(split("\n", $text) as $csv_n => $csv_line){
if(preg_match("/^#|^\s*$/",$csv_line)) continue;
if($cal_firstline == 0) {
preg_match("/^([^;]*);*(.*)/",$csv_line,$matches);
// Make it the 1st of the month
$cal_month = '1 ' . $matches[1];

// Get timestamp for 1st of month. Then extract values
$cal_date = strtotime($cal_month); // Convert to 1st of month
$cal_start = strftime("%w",$cal_date);

// Calculate end of month (1st of month +1 month -1 day) = End of month = Number of days in month
$cal_eom = $cal_month . ' +1 month -1 day';
$cal_date = strtotime($cal_eom);
$cal_days = strftime("%d",$cal_date);
$cal_firstline=1;

// Fill up cal_day array with full month of data
for($day=1;$day <= $cal_days;$day++) {
$cal_data[$day] = ' ';
}
continue;
}

$wrk = $csv_line;
while ($m = preg_match('/^([0-9]+);(.*)/',$wrk,$matches)) {
$cal_day = $matches[1];
$wrk = $matches[2];
$cal_data[$cal_day] = $wrk;
}
}
echo "<table class='cal'>";
echo "<tr class='head'><th width=13%>Sun</th><th width=13%>Mon</th><th width=13%>Tue</th>";
echo "<th width=13%>Wed</th><th width=13%>Thu</th><th width=13%>Fri</th><th width=13%>Sat</th></tr>\n";

// Create a COLSPAN until the 1st day of month
if(!$cal_start) {
echo "<tr>";
$dow = 0;
} else {
echo "<tr><td colspan='$cal_start' class='dim'> </td>";
$dow = $cal_start;
}

// Dump out the calendar
foreach($cal_data as $c_day=>$c_data) {
$c_class = '';
if(preg_match('/^%([^%]+)%(.*)/',$c_data,$matches)) {
$c_class = $matches[1];
$c_data = $matches[2];
}
if($dow == 7) {
echo "</tr>\n<tr class='even'>";
$dow=0;
echo "<td class='$c_class'><span class='sun'>" . $c_day . '</span> ';
} else {
echo "<td class='$c_class'><span class='day'>" . $c_day . '</span> ';
}
echo $this->format($c_data);
echo '</td>';
$dow++;
}
// Colspan for rest of week
if($dow<7) {
echo "<td class='dim' colspan='" . (7-$dow) . "'> </td>";
}
echo "</tr></table>\n";
?>
%%

It also requires a small addition to your CSS file
%%(css)
/* Calendar Table */
table.cal {
padding: 0 0 0 0;
border: 1px solid #888;
width: 99%;
text-align: left;
color: black;
background-color: #FFF;
border-collapse: collapse;
}

.cal tr.head {
background-color: #FFFFCF;
font: 10pt sans-serif;
color: blue;
border-bottom: 1px dotted #888;
vertical-align: top;
}

.cal tr {
background-color: #F9FFFF;
border-bottom: 1px dotted #888;
vertical-align: top;
}

.cal th {
padding: 4px 0 8px 4px;
border-bottom: 1px solid #000;
text-align: center;
}

.cal td {
font: 9pt sans-serif;
vertical-align: top;
border-bottom: 1px dotted #888;
border-right: 1px dotted #888;
padding: 4px 0 2px 8px;
height: 90px;
}


.cal td.dim {
background-color: #EEE;
}

.cal td.green,.high {
background-color: #ccffcc;
}

.cal td.red {
background-color: #FDE3E3;
}

.cal td.holiday {
xbackground-color: #F8F8F8;
}

.cal td.blue {
background-color: #DFDFFD;
}

.cal td a {
color: blue;
}

.cal td span.day {
font-weight: bold;
}

.cal td.holiday span.day {
font-weight: bold;
color: red;
}

.cal td span.sun {
font-weight: bold;
color: red;
}
%%

----
CategoryUserContributions
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki