annotate vendor/sabre/vobject/lib/Property/VCard/DateAndOrTime.php @ 41:d2414df68d78

Updated by Alex S Grebenschikov (www.poralix.com) to make it compatible with RoundCube 1.3.0
author Charlie Root
date Fri, 24 Jan 2025 14:20:15 -0500
parents 430dbd5346f7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
1 <?php
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
2
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
3 namespace Sabre\VObject\Property\VCard;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
4
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
5 use
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
6 Sabre\VObject\DateTimeParser,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
7 Sabre\VObject\Property\Text,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
8 Sabre\VObject\Property,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
9 DateTime;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
10
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
11 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
12 * DateAndOrTime property
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
13 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
14 * This object encodes DATE-AND-OR-TIME values.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
15 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
16 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/).
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
17 * @author Evert Pot (http://evertpot.com/)
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
18 * @license http://sabre.io/license/ Modified BSD License
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
19 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
20 class DateAndOrTime extends Property {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
21
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
22 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
23 * Field separator
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
24 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
25 * @var null|string
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
26 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
27 public $delimiter = null;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
28
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
29 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
30 * Returns the type of value.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
31 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
32 * This corresponds to the VALUE= parameter. Every property also has a
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
33 * 'default' valueType.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
34 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
35 * @return string
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
36 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
37 public function getValueType() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
38
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
39 return "DATE-AND-OR-TIME";
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
40
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
41 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
42
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
43 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
44 * Sets a multi-valued property.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
45 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
46 * You may also specify DateTime objects here.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
47 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
48 * @param array $parts
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
49 * @return void
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
50 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
51 public function setParts(array $parts) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
52
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
53 if (count($parts)>1) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
54 throw new \InvalidArgumentException('Only one value allowed');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
55 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
56 if (isset($parts[0]) && $parts[0] instanceof \DateTime) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
57 $this->setDateTime($parts[0]);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
58 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
59 parent::setParts($parts);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
60 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
61
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
62 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
63
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
64 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
65 * Updates the current value.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
66 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
67 * This may be either a single, or multiple strings in an array.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
68 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
69 * Instead of strings, you may also use DateTime here.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
70 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
71 * @param string|array|\DateTime $value
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
72 * @return void
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
73 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
74 public function setValue($value) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
75
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
76 if ($value instanceof \DateTime) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
77 $this->setDateTime($value);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
78 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
79 parent::setValue($value);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
80 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
81
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
82 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
83
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
84 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
85 * Sets the property as a DateTime object.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
86 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
87 * @param \DateTime $dt
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
88 * @return void
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
89 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
90 public function setDateTime(\DateTime $dt) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
91
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
92 $values = array();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
93
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
94 $tz = null;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
95 $isUtc = false;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
96
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
97 $tz = $dt->getTimeZone();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
98 $isUtc = in_array($tz->getName() , array('UTC', 'GMT', 'Z'));
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
99
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
100 if ($isUtc) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
101 $value = $dt->format('Ymd\\THis\\Z');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
102 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
103 // Calculating the offset.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
104 $value = $dt->format('Ymd\\THisO');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
105 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
106
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
107 $this->value = $value;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
108
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
109 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
110
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
111 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
112 * Returns a date-time value.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
113 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
114 * Note that if this property contained more than 1 date-time, only the
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
115 * first will be returned. To get an array with multiple values, call
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
116 * getDateTimes.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
117 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
118 * If no time was specified, we will always use midnight (in the default
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
119 * timezone) as the time.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
120 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
121 * If parts of the date were omitted, such as the year, we will grab the
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
122 * current values for those. So at the time of writing, if the year was
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
123 * omitted, we would have filled in 2014.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
124 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
125 * @return \DateTime
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
126 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
127 public function getDateTime() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
128
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
129 $dts = array();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
130 $now = new DateTime();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
131
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
132 $tzFormat = $now->getTimezone()->getOffset($now)===0?'\\Z':'O';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
133 $nowParts = DateTimeParser::parseVCardDateTime($now->format('Ymd\\This' . $tzFormat));
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
134
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
135 $value = $this->getValue();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
136
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
137 $dateParts = DateTimeParser::parseVCardDateTime($this->getValue());
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
138
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
139 // This sets all the missing parts to the current date/time.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
140 // So if the year was missing for a birthday, we're making it 'this
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
141 // year'.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
142 foreach($dateParts as $k=>$v) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
143 if (is_null($v)) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
144 $dateParts[$k] = $nowParts[$k];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
145 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
146 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
147 return new DateTime("$dateParts[year]-$dateParts[month]-$dateParts[date] $dateParts[hour]:$dateParts[minute]:$dateParts[second] $dateParts[timezone]");
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
148
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
149 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
150
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
151 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
152 * Returns the value, in the format it should be encoded for json.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
153 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
154 * This method must always return an array.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
155 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
156 * @return array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
157 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
158 public function getJsonValue() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
159
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
160 $parts = DateTimeParser::parseVCardDateTime($this->getValue());
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
161
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
162 $dateStr = '';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
163
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
164 // Year
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
165 if (!is_null($parts['year'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
166 $dateStr.=$parts['year'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
167
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
168 if (!is_null($parts['month'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
169 // If a year and a month is set, we need to insert a separator
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
170 // dash.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
171 $dateStr.='-';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
172 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
173
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
174 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
175
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
176 if (!is_null($parts['month']) || !is_null($parts['date'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
177 // Inserting two dashes
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
178 $dateStr.='--';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
179 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
180
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
181 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
182
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
183 // Month
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
184
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
185 if (!is_null($parts['month'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
186 $dateStr.=$parts['month'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
187
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
188 if (isset($parts['date'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
189 // If month and date are set, we need the separator dash.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
190 $dateStr.='-';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
191 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
192 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
193 if (isset($parts['date'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
194 // If the month is empty, and a date is set, we need a 'empty
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
195 // dash'
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
196 $dateStr.='-';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
197 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
198 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
199
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
200 // Date
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
201 if (!is_null($parts['date'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
202 $dateStr.=$parts['date'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
203 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
204
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
205
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
206 // Early exit if we don't have a time string.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
207 if (is_null($parts['hour']) && is_null($parts['minute']) && is_null($parts['second'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
208 return array($dateStr);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
209 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
210
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
211 $dateStr.='T';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
212
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
213 // Hour
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
214 if (!is_null($parts['hour'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
215 $dateStr.=$parts['hour'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
216
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
217 if (!is_null($parts['minute'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
218 $dateStr.=':';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
219 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
220 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
221 // We know either minute or second _must_ be set, so we insert a
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
222 // dash for an empty value.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
223 $dateStr.='-';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
224 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
225
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
226 // Minute
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
227 if (!is_null($parts['minute'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
228 $dateStr.=$parts['minute'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
229
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
230 if (!is_null($parts['second'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
231 $dateStr.=':';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
232 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
233 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
234 if (isset($parts['second'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
235 // Dash for empty minute
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
236 $dateStr.='-';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
237 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
238 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
239
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
240 // Second
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
241 if (!is_null($parts['second'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
242 $dateStr.=$parts['second'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
243 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
244
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
245 // Timezone
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
246 if (!is_null($parts['timezone'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
247 $dateStr.=$parts['timezone'];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
248 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
249
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
250 return array($dateStr);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
251
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
252 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
253
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
254 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
255 * Sets a raw value coming from a mimedir (iCalendar/vCard) file.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
256 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
257 * This has been 'unfolded', so only 1 line will be passed. Unescaping is
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
258 * not yet done, but parameters are not included.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
259 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
260 * @param string $val
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
261 * @return void
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
262 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
263 public function setRawMimeDirValue($val) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
264
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
265 $this->setValue($val);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
266
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
267 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
268
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
269 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
270 * Returns a raw mime-dir representation of the value.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
271 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
272 * @return string
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
273 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
274 public function getRawMimeDirValue() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
275
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
276 return implode($this->delimiter, $this->getParts());
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
277
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
278 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
279
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
280 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
281 * Validates the node for correctness.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
282 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
283 * The following options are supported:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
284 * Node::REPAIR - May attempt to automatically repair the problem.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
285 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
286 * This method returns an array with detected problems.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
287 * Every element has the following properties:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
288 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
289 * * level - problem level.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
290 * * message - A human-readable string describing the issue.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
291 * * node - A reference to the problematic node.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
292 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
293 * The level means:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
294 * 1 - The issue was repaired (only happens if REPAIR was turned on)
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
295 * 2 - An inconsequential issue
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
296 * 3 - A severe issue.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
297 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
298 * @param int $options
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
299 * @return array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
300 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
301 public function validate($options = 0) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
302
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
303 $messages = parent::validate($options);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
304 $value = $this->getValue();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
305 try {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
306 DateTimeParser::parseVCardDateTime($value);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
307 } catch (\InvalidArgumentException $e) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
308 $messages[] = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
309 'level' => 3,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
310 'message' => 'The supplied value (' . $value . ') is not a correct DATE-AND-OR-TIME property',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
311 'node' => $this,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
312 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
313 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
314 return $messages;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
315
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
316 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
317 }