Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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>&nbsp;</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>