1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13: class Kronolith_FreeBusy_View_Month extends Kronolith_FreeBusy_View
14: {
15: 16: 17: 18: 19:
20: public $view = 'month';
21:
22: 23: 24: 25: 26:
27: protected $_days = 30;
28:
29:
30: protected function _title()
31: {
32: $end = new Horde_Date($this->_start);
33: $end->mday += $this->_days - 1;
34: $prev = new Horde_Date($this->_start);
35: $prev->month--;
36: $next = new Horde_Date($this->_start);
37: $next->month++;
38: return Horde::url('#')->link(array('title' => _("Previous Month"), 'onclick' => 'return switchDate(' . $prev->dateString() . ');'))
39: . Horde::img('nav/left.png', '<')
40: . '</a>'
41: . $this->_start->strftime('%B %Y')
42: . Horde::url('#')->link(array('title' => _("Next Month"), 'onclick' => 'return switchDate(' . $next->dateString() . ');'))
43: . Horde::img('nav/right.png', '>')
44: . '</a>';
45: }
46:
47: protected function _hours()
48: {
49: global $prefs;
50:
51: $hours_html = '';
52: $dayWidth = round(100 / $this->_days);
53: $date_format = $prefs->getValue('date_format');
54:
55: $week = Date_Calc::weekOfYear(1, $this->_start->month, $this->_start->year);
56: $span = (7 - $week) % 7 + 1;
57: $span_left = $this->_days;
58: $t = new Horde_Date($this->_start);
59: while ($span_left > 0) {
60: $span_left -= $span;
61: $week_label = Horde::url('#')->link(array('onclick' => 'return switchDateView(\'Week\',' . $t->dateString() . ');'))
62: . ("Week") . ' ' . $week . '</a>';
63: $hours_html .= sprintf('<th colspan="%d" width="%s%%">%s</th>',
64: $span, $dayWidth, $week_label);
65: $week++;
66: $t->mday += 7;
67: $span = min($span_left, 7);
68: }
69: $hours_html .= '</tr><tr><td width="100" class="label"> </td>';
70:
71: for ($i = 0; $i < $this->_days; $i++) {
72: $t = new Horde_Date(array('month' => $this->_start->month,
73: 'mday' => $this->_start->mday + $i,
74: 'year' => $this->_start->year));
75: $day_label = Horde::url('#')->link(array('onclick' => 'return switchDateView(\'Day\',' . $t->dateString() . ');'))
76: . ($i + 1) . '.</a>';
77: $hours_html .= sprintf('<th width="%s%%">%s</th>',
78: $dayWidth, $day_label);
79: }
80:
81: for ($i = 0; $i < $this->_days; $i++) {
82: $start = new Horde_Date(array('hour' => $this->_startHour,
83: 'month' => $this->_start->month,
84: 'mday' => $this->_start->mday + $i,
85: 'year' => $this->_start->year));
86: $end = new Horde_Date(array('hour' => $this->_endHour,
87: 'month' => $this->_start->month,
88: 'mday' => $this->_start->mday + $i,
89: 'year' => $this->_start->year));
90: $this->_timeBlocks[] = array($start, $end);
91: }
92:
93: return $hours_html;
94: }
95:
96: protected function _render(Horde_Date $day = null)
97: {
98: $this->_start = new Horde_Date($day);
99: $this->_start->mday = 1;
100: $this->_days = Horde_Date_Utils::daysInMonth($day->month, $day->year);
101: $this->_end = new Horde_Date($this->_start);
102: $this->_end->hour = 23;
103: $this->_end->min = $this->_end->sec = 59;
104: $this->_end->mday = $this->_days;
105: }
106:
107: }
108: