1 | <?php |
---|
2 | /** |
---|
3 | * Description: demonstrates a decorator used to "attach a payload" to a selection |
---|
4 | * to make it available when iterating over calendar children |
---|
5 | */ |
---|
6 | if ( !@include 'Calendar/Calendar.php' ) { |
---|
7 | define('CALENDAR_ROOT','../../'); |
---|
8 | } |
---|
9 | require_once CALENDAR_ROOT.'Day.php'; |
---|
10 | require_once CALENDAR_ROOT.'Hour.php'; |
---|
11 | require_once CALENDAR_ROOT.'Decorator.php'; |
---|
12 | |
---|
13 | // Decorator to "attach" functionality to selected hours |
---|
14 | class DiaryEvent extends Calendar_Decorator { |
---|
15 | var $entry; |
---|
16 | function DiaryEvent($calendar) { |
---|
17 | Calendar_Decorator::Calendar_Decorator($calendar); |
---|
18 | } |
---|
19 | function setEntry($entry) { |
---|
20 | $this->entry = $entry; |
---|
21 | } |
---|
22 | function getEntry() { |
---|
23 | return $this->entry; |
---|
24 | } |
---|
25 | } |
---|
26 | |
---|
27 | // Create a day to view the hours for |
---|
28 | $Day = & new Calendar_Day(2003,10,24); |
---|
29 | |
---|
30 | // A sample query to get the data for today (NOT ACTUALLY USED HERE) |
---|
31 | $sql = " |
---|
32 | SELECT |
---|
33 | * |
---|
34 | FROM |
---|
35 | diary |
---|
36 | WHERE |
---|
37 | eventtime >= '".$Day->thisDay(TRUE)."' |
---|
38 | AND |
---|
39 | eventtime < '".$Day->nextDay(TRUE)."';"; |
---|
40 | |
---|
41 | // An array simulating data from a database |
---|
42 | $result = array ( |
---|
43 | array('eventtime'=>mktime(9,0,0,10,24,2003),'entry'=>'Meeting with sales team'), |
---|
44 | array('eventtime'=>mktime(11,0,0,10,24,2003),'entry'=>'Conference call with Widget Inc.'), |
---|
45 | array('eventtime'=>mktime(15,0,0,10,24,2003),'entry'=>'Presentation to board of directors') |
---|
46 | ); |
---|
47 | |
---|
48 | // An array to place selected hours in |
---|
49 | $selection = array(); |
---|
50 | |
---|
51 | // Loop through the "database result" |
---|
52 | foreach ( $result as $row ) { |
---|
53 | $Hour = new Calendar_Hour(2000,1,1,1); // Create Hour with dummy values |
---|
54 | $Hour->setTimeStamp($row['eventtime']); // Set the real time with setTimeStamp |
---|
55 | |
---|
56 | // Create the decorator, passing it the Hour |
---|
57 | $DiaryEvent = new DiaryEvent($Hour); |
---|
58 | |
---|
59 | // Attach the payload |
---|
60 | $DiaryEvent->setEntry($row['entry']); |
---|
61 | |
---|
62 | // Add the decorator to the selection |
---|
63 | $selection[] = $DiaryEvent; |
---|
64 | } |
---|
65 | |
---|
66 | // Build the hours in that day, passing the selection |
---|
67 | $Day->build($selection); |
---|
68 | ?> |
---|
69 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
---|
70 | <html> |
---|
71 | <head> |
---|
72 | <title> Passing a Selection Payload with a Decorator </title> |
---|
73 | </head> |
---|
74 | <body> |
---|
75 | <h1>Passing a Selection "Payload" using a Decorator</h1> |
---|
76 | <table> |
---|
77 | <caption><b>Your Schedule for <?php echo ( date('D nS F Y',$Day->thisDay(TRUE)) ); ?></b></caption> |
---|
78 | <tr> |
---|
79 | <th width="5%">Time</th> |
---|
80 | <th>Entry</th> |
---|
81 | </tr> |
---|
82 | <?php |
---|
83 | while ( $Hour = & $Day->fetch() ) { |
---|
84 | |
---|
85 | $hour = $Hour->thisHour(); |
---|
86 | $minute = $Hour->thisMinute(); |
---|
87 | |
---|
88 | // Office hours only... |
---|
89 | if ( $hour >= 8 && $hour <= 18 ) { |
---|
90 | echo ( "<tr>\n" ); |
---|
91 | echo ( "<td>$hour:$minute</td>\n" ); |
---|
92 | |
---|
93 | // If the hour is selected, call the decorator method... |
---|
94 | if ( $Hour->isSelected() ) { |
---|
95 | echo ( "<td bgcolor=\"silver\">".$Hour->getEntry()."</td>\n" ); |
---|
96 | } else { |
---|
97 | echo ( "<td> </td>\n" ); |
---|
98 | } |
---|
99 | echo ( "</tr>\n" ); |
---|
100 | } |
---|
101 | } |
---|
102 | ?> |
---|
103 | </table> |
---|
104 | <p>The query to fetch this data, with help from PEAR::Calendar, might be;</p> |
---|
105 | <pre> |
---|
106 | <?php echo ( $sql ); ?> |
---|
107 | </pre> |
---|
108 | </body> |
---|
109 | </html> |
---|