Mercurial > hg > rc1
comparison plugins/libcalendaring/lib/Sabre/VObject/Property/MultiDateTime.php @ 4:888e774ee983
libcalendar plugin as distributed
author | Charlie Root |
---|---|
date | Sat, 13 Jan 2018 08:57:56 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:f6fe4b6ae66a | 4:888e774ee983 |
---|---|
1 <?php | |
2 | |
3 namespace Sabre\VObject\Property; | |
4 | |
5 use Sabre\VObject; | |
6 | |
7 /** | |
8 * Multi-DateTime property | |
9 * | |
10 * This element is used for iCalendar properties such as the EXDATE property. | |
11 * It basically provides a few helper functions that make it easier to deal | |
12 * with these. It supports both DATE-TIME and DATE values. | |
13 * | |
14 * In order to use this correctly, you must call setDateTimes and getDateTimes | |
15 * to retrieve and modify dates respectively. | |
16 * | |
17 * If you use the 'value' or properties directly, this object does not keep | |
18 * reference and results might appear incorrectly. | |
19 * | |
20 * @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/). | |
21 * @author Evert Pot (http://evertpot.com/) | |
22 * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License | |
23 */ | |
24 class MultiDateTime extends VObject\Property { | |
25 | |
26 /** | |
27 * DateTime representation | |
28 * | |
29 * @var DateTime[] | |
30 */ | |
31 protected $dateTimes; | |
32 | |
33 /** | |
34 * dateType | |
35 * | |
36 * This is one of the Sabre\VObject\Property\DateTime constants. | |
37 * | |
38 * @var int | |
39 */ | |
40 protected $dateType; | |
41 | |
42 /** | |
43 * Updates the value | |
44 * | |
45 * @param array $dt Must be an array of DateTime objects. | |
46 * @param int $dateType | |
47 * @return void | |
48 */ | |
49 public function setDateTimes(array $dt, $dateType = VObject\Property\DateTime::LOCALTZ) { | |
50 | |
51 foreach($dt as $i) | |
52 if (!$i instanceof \DateTime) | |
53 throw new \InvalidArgumentException('You must pass an array of DateTime objects'); | |
54 | |
55 $this->offsetUnset('VALUE'); | |
56 $this->offsetUnset('TZID'); | |
57 switch($dateType) { | |
58 | |
59 case DateTime::LOCAL : | |
60 $val = array(); | |
61 foreach($dt as $i) { | |
62 $val[] = $i->format('Ymd\\THis'); | |
63 } | |
64 $this->setValue(implode(',',$val)); | |
65 $this->offsetSet('VALUE','DATE-TIME'); | |
66 break; | |
67 case DateTime::UTC : | |
68 $val = array(); | |
69 foreach($dt as $i) { | |
70 $i->setTimeZone(new \DateTimeZone('UTC')); | |
71 $val[] = $i->format('Ymd\\THis\\Z'); | |
72 } | |
73 $this->setValue(implode(',',$val)); | |
74 $this->offsetSet('VALUE','DATE-TIME'); | |
75 break; | |
76 case DateTime::LOCALTZ : | |
77 $val = array(); | |
78 foreach($dt as $i) { | |
79 $val[] = $i->format('Ymd\\THis'); | |
80 } | |
81 $this->setValue(implode(',',$val)); | |
82 $this->offsetSet('VALUE','DATE-TIME'); | |
83 $this->offsetSet('TZID', $dt[0]->getTimeZone()->getName()); | |
84 break; | |
85 case DateTime::DATE : | |
86 $val = array(); | |
87 foreach($dt as $i) { | |
88 $val[] = $i->format('Ymd'); | |
89 } | |
90 $this->setValue(implode(',',$val)); | |
91 $this->offsetSet('VALUE','DATE'); | |
92 break; | |
93 default : | |
94 throw new \InvalidArgumentException('You must pass a valid dateType constant'); | |
95 | |
96 } | |
97 $this->dateTimes = $dt; | |
98 $this->dateType = $dateType; | |
99 | |
100 } | |
101 | |
102 /** | |
103 * Returns the current DateTime value. | |
104 * | |
105 * If no value was set, this method returns null. | |
106 * | |
107 * @return array|null | |
108 */ | |
109 public function getDateTimes() { | |
110 | |
111 if ($this->dateTimes) | |
112 return $this->dateTimes; | |
113 | |
114 $dts = array(); | |
115 | |
116 if (!$this->value) { | |
117 $this->dateTimes = null; | |
118 $this->dateType = null; | |
119 return null; | |
120 } | |
121 | |
122 foreach(explode(',',$this->value) as $val) { | |
123 list( | |
124 $type, | |
125 $dt | |
126 ) = DateTime::parseData($val, $this); | |
127 $dts[] = $dt; | |
128 $this->dateType = $type; | |
129 } | |
130 $this->dateTimes = $dts; | |
131 return $this->dateTimes; | |
132 | |
133 } | |
134 | |
135 /** | |
136 * Returns the type of Date format. | |
137 * | |
138 * This method returns one of the format constants. If no date was set, | |
139 * this method will return null. | |
140 * | |
141 * @return int|null | |
142 */ | |
143 public function getDateType() { | |
144 | |
145 if ($this->dateType) | |
146 return $this->dateType; | |
147 | |
148 if (!$this->value) { | |
149 $this->dateTimes = null; | |
150 $this->dateType = null; | |
151 return null; | |
152 } | |
153 | |
154 $dts = array(); | |
155 foreach(explode(',',$this->value) as $val) { | |
156 list( | |
157 $type, | |
158 $dt | |
159 ) = DateTime::parseData($val, $this); | |
160 $dts[] = $dt; | |
161 $this->dateType = $type; | |
162 } | |
163 $this->dateTimes = $dts; | |
164 return $this->dateType; | |
165 | |
166 } | |
167 | |
168 /** | |
169 * This method will return true, if the property had a date and a time, as | |
170 * opposed to only a date. | |
171 * | |
172 * @return bool | |
173 */ | |
174 public function hasTime() { | |
175 | |
176 return $this->getDateType()!==DateTime::DATE; | |
177 | |
178 } | |
179 | |
180 } |