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 }