1: <?php
2: /**
3: * Copyright 2004-2012 Horde LLC (http://www.horde.org/)
4: *
5: * See the enclosed file COPYING for license information (GPL). If you
6: * did not receive this file, see http://www.horde.org/licenses/gpl.
7: *
8: * @author Chuck Hagenbuch <chuck@horde.org>
9: * @author Jan Schneider <jan@horde.org>
10: * @package Kronolith
11: */
12: class Kronolith_Event_Ical extends Kronolith_Event
13: {
14: /**
15: * The type of the calender this event exists on.
16: *
17: * @var string
18: */
19: public $calendarType = 'remote';
20:
21: /**
22: * The Horde_Perms permissions mask matching the CalDAV ACL of this event's
23: * calendar.
24: *
25: * @var integer
26: */
27: public $permission = 0;
28:
29: /**
30: * Imports a backend specific event object.
31: *
32: * @param Horde_Icalendar_Vevent Backend specific event object that this
33: * object will represent.
34: */
35: public function fromDriver($vEvent)
36: {
37: $this->fromiCalendar($vEvent);
38: $this->initialized = true;
39: $this->stored = true;
40: }
41:
42: /**
43: * Encapsulates permissions checking.
44: *
45: * $user is being ignored.
46: *
47: * @param integer $permission The permission to check for.
48: * @param string $user The user to check permissions for.
49: *
50: * @return boolean
51: */
52: public function hasPermission($permission, $user = null)
53: {
54: return $this->permission & $permission;
55: }
56:
57: /**
58: * Returns the title of this event.
59: *
60: * @param string $user The current user.
61: *
62: * @return string The title of this event.
63: */
64: public function getTitle($user = null)
65: {
66: return !empty($this->title) ? $this->title : _("[Unnamed event]");
67: }
68:
69: /**
70: * @param array $params
71: *
72: * @return Horde_Url
73: */
74: public function getViewUrl($params = array(), $full = false, $encoded = true)
75: {
76: if ($this->url) {
77: return new Horde_Url($this->url, !$encoded);
78: }
79: return parent::getViewUrl($params, $full, $encoded);
80: }
81:
82: /**
83: * Parses the various exception related fields. Only deal with the EXDATE
84: * field here.
85: *
86: * @param Horde_Icalendar $vEvent The vEvent part.
87: */
88: protected function _handlevEventRecurrence($vEvent)
89: {
90: // Recurrence.
91: try {
92: $rrule = $vEvent->getAttribute('RRULE');
93: if (!is_array($rrule)) {
94: $this->recurrence = new Horde_Date_Recurrence($this->start);
95: if (strpos($rrule, '=') !== false) {
96: $this->recurrence->fromRRule20($rrule);
97: } else {
98: $this->recurrence->fromRRule10($rrule);
99: }
100:
101: // Exceptions. EXDATE represents deleted events, just add the
102: // exception, no new event is needed.
103: $exdates = $vEvent->getAttributeValues('EXDATE');
104: if (is_array($exdates)) {
105: foreach ($exdates as $exdate) {
106: if (is_array($exdate)) {
107: $this->recurrence->addException((int)$exdate['year'],
108: (int)$exdate['month'],
109: (int)$exdate['mday']);
110: }
111: }
112: }
113: }
114: } catch (Horde_Icalendar_Exception $e) {}
115: }
116:
117: }
118: