Mercurial > hg > rc1
comparison vendor/sabre/vobject/lib/Property/ICalendar/Recur.php @ 7:430dbd5346f7
vendor sabre as distributed
author | Charlie Root |
---|---|
date | Sat, 13 Jan 2018 09:06:10 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
6:cec75ba50afc | 7:430dbd5346f7 |
---|---|
1 <?php | |
2 | |
3 namespace Sabre\VObject\Property\ICalendar; | |
4 | |
5 use | |
6 Sabre\VObject\Property, | |
7 Sabre\VObject\Parser\MimeDir; | |
8 | |
9 /** | |
10 * Recur property | |
11 * | |
12 * This object represents RECUR properties. | |
13 * These values are just used for RRULE and the now deprecated EXRULE. | |
14 * | |
15 * The RRULE property may look something like this: | |
16 * | |
17 * RRULE:FREQ=MONTHLY;BYDAY=1,2,3;BYHOUR=5. | |
18 * | |
19 * This property exposes this as a key=>value array that is accessible using | |
20 * getParts, and may be set using setParts. | |
21 * | |
22 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/). | |
23 * @author Evert Pot (http://evertpot.com/) | |
24 * @license http://sabre.io/license/ Modified BSD License | |
25 */ | |
26 class Recur extends Property { | |
27 | |
28 /** | |
29 * Updates the current value. | |
30 * | |
31 * This may be either a single, or multiple strings in an array. | |
32 * | |
33 * @param string|array $value | |
34 * @return void | |
35 */ | |
36 public function setValue($value) { | |
37 | |
38 // If we're getting the data from json, we'll be receiving an object | |
39 if ($value instanceof \StdClass) { | |
40 $value = (array)$value; | |
41 } | |
42 | |
43 if (is_array($value)) { | |
44 $newVal = array(); | |
45 foreach($value as $k=>$v) { | |
46 | |
47 if (is_string($v)) { | |
48 $v = strtoupper($v); | |
49 | |
50 // The value had multiple sub-values | |
51 if (strpos($v,',')!==false) { | |
52 $v = explode(',', $v); | |
53 } | |
54 } else { | |
55 $v = array_map('strtoupper', $v); | |
56 } | |
57 | |
58 $newVal[strtoupper($k)] = $v; | |
59 } | |
60 $this->value = $newVal; | |
61 } elseif (is_string($value)) { | |
62 $this->value = self::stringToArray($value); | |
63 } else { | |
64 throw new \InvalidArgumentException('You must either pass a string, or a key=>value array'); | |
65 } | |
66 | |
67 } | |
68 | |
69 /** | |
70 * Returns the current value. | |
71 * | |
72 * This method will always return a singular value. If this was a | |
73 * multi-value object, some decision will be made first on how to represent | |
74 * it as a string. | |
75 * | |
76 * To get the correct multi-value version, use getParts. | |
77 * | |
78 * @return string | |
79 */ | |
80 public function getValue() { | |
81 | |
82 $out = array(); | |
83 foreach($this->value as $key=>$value) { | |
84 $out[] = $key . '=' . (is_array($value)?implode(',', $value):$value); | |
85 } | |
86 return strtoupper(implode(';',$out)); | |
87 | |
88 } | |
89 | |
90 /** | |
91 * Sets a multi-valued property. | |
92 * | |
93 * @param array $parts | |
94 * @return void | |
95 */ | |
96 public function setParts(array $parts) { | |
97 | |
98 $this->setValue($parts); | |
99 | |
100 } | |
101 | |
102 /** | |
103 * Returns a multi-valued property. | |
104 * | |
105 * This method always returns an array, if there was only a single value, | |
106 * it will still be wrapped in an array. | |
107 * | |
108 * @return array | |
109 */ | |
110 public function getParts() { | |
111 | |
112 return $this->value; | |
113 | |
114 } | |
115 | |
116 /** | |
117 * Sets a raw value coming from a mimedir (iCalendar/vCard) file. | |
118 * | |
119 * This has been 'unfolded', so only 1 line will be passed. Unescaping is | |
120 * not yet done, but parameters are not included. | |
121 * | |
122 * @param string $val | |
123 * @return void | |
124 */ | |
125 public function setRawMimeDirValue($val) { | |
126 | |
127 $this->setValue($val); | |
128 | |
129 } | |
130 | |
131 /** | |
132 * Returns a raw mime-dir representation of the value. | |
133 * | |
134 * @return string | |
135 */ | |
136 public function getRawMimeDirValue() { | |
137 | |
138 return $this->getValue(); | |
139 | |
140 } | |
141 | |
142 /** | |
143 * Returns the type of value. | |
144 * | |
145 * This corresponds to the VALUE= parameter. Every property also has a | |
146 * 'default' valueType. | |
147 * | |
148 * @return string | |
149 */ | |
150 public function getValueType() { | |
151 | |
152 return "RECUR"; | |
153 | |
154 } | |
155 | |
156 /** | |
157 * Returns the value, in the format it should be encoded for json. | |
158 * | |
159 * This method must always return an array. | |
160 * | |
161 * @return array | |
162 */ | |
163 public function getJsonValue() { | |
164 | |
165 $values = array(); | |
166 foreach($this->getParts() as $k=>$v) { | |
167 $values[strtolower($k)] = $v; | |
168 } | |
169 return array($values); | |
170 | |
171 } | |
172 | |
173 /** | |
174 * Parses an RRULE value string, and turns it into a struct-ish array. | |
175 * | |
176 * @param string $value | |
177 * @return array | |
178 */ | |
179 static function stringToArray($value) { | |
180 | |
181 $value = strtoupper($value); | |
182 $newValue = array(); | |
183 foreach(explode(';', $value) as $part) { | |
184 | |
185 // Skipping empty parts. | |
186 if (empty($part)) { | |
187 continue; | |
188 } | |
189 list($partName, $partValue) = explode('=', $part); | |
190 | |
191 // The value itself had multiple values.. | |
192 if (strpos($partValue,',')!==false) { | |
193 $partValue=explode(',', $partValue); | |
194 } | |
195 $newValue[$partName] = $partValue; | |
196 | |
197 } | |
198 | |
199 return $newValue; | |
200 | |
201 } | |
202 | |
203 } |