493 |
ddelon |
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>
|