<?php /** * Description: demonstrates a decorator used to "attach a payload" to a selection * to make it available when iterating over calendar children */ if ( !@include 'Calendar/Calendar.php' ) { define('CALENDAR_ROOT','../../'); } require_once CALENDAR_ROOT.'Day.php'; require_once CALENDAR_ROOT.'Hour.php'; require_once CALENDAR_ROOT.'Decorator.php'; // Decorator to "attach" functionality to selected hours class DiaryEvent extends Calendar_Decorator { var $entry; function DiaryEvent($calendar) { Calendar_Decorator::Calendar_Decorator($calendar); } function setEntry($entry) { $this->entry = $entry; } function getEntry() { return $this->entry; } } // Create a day to view the hours for $Day = & new Calendar_Day(2003,10,24); // A sample query to get the data for today (NOT ACTUALLY USED HERE) $sql = " SELECT * FROM diary WHERE eventtime >= '".$Day->thisDay(TRUE)."' AND eventtime < '".$Day->nextDay(TRUE)."';"; // An array simulating data from a database $result = array ( array('eventtime'=>mktime(9,0,0,10,24,2003),'entry'=>'Meeting with sales team'), array('eventtime'=>mktime(11,0,0,10,24,2003),'entry'=>'Conference call with Widget Inc.'), array('eventtime'=>mktime(15,0,0,10,24,2003),'entry'=>'Presentation to board of directors') ); // An array to place selected hours in $selection = array(); // Loop through the "database result" foreach ( $result as $row ) { $Hour = new Calendar_Hour(2000,1,1,1); // Create Hour with dummy values $Hour->setTimeStamp($row['eventtime']); // Set the real time with setTimeStamp // Create the decorator, passing it the Hour $DiaryEvent = new DiaryEvent($Hour); // Attach the payload $DiaryEvent->setEntry($row['entry']); // Add the decorator to the selection $selection[] = $DiaryEvent; } // Build the hours in that day, passing the selection $Day->build($selection); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> Passing a Selection Payload with a Decorator </title> </head> <body> <h1>Passing a Selection "Payload" using a Decorator</h1> <table> <caption><b>Your Schedule for <?php echo ( date('D nS F Y',$Day->thisDay(TRUE)) ); ?></b></caption> <tr> <th width="5%">Time</th> <th>Entry</th> </tr> <?php while ( $Hour = & $Day->fetch() ) { $hour = $Hour->thisHour(); $minute = $Hour->thisMinute(); // Office hours only... if ( $hour >= 8 && $hour <= 18 ) { echo ( "<tr>\n" ); echo ( "<td>$hour:$minute</td>\n" ); // If the hour is selected, call the decorator method... if ( $Hour->isSelected() ) { echo ( "<td bgcolor=\"silver\">".$Hour->getEntry()."</td>\n" ); } else { echo ( "<td> </td>\n" ); } echo ( "</tr>\n" ); } } ?> </table> <p>The query to fetch this data, with help from PEAR::Calendar, might be;</p> <pre> <?php echo ( $sql ); ?> </pre> </body> </html>