comparison vendor/sabre/vobject/lib/Node.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;
4
5 /**
6 * A node is the root class for every element in an iCalendar of vCard object.
7 *
8 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/).
9 * @author Evert Pot (http://evertpot.com/)
10 * @license http://sabre.io/license/ Modified BSD License
11 */
12 abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable {
13
14 /**
15 * The following constants are used by the validate() method.
16 *
17 * If REPAIR is set, the validator will attempt to repair any broken data
18 * (if possible).
19 */
20 const REPAIR = 1;
21
22 /**
23 * If this option is set, the validator will operate on the vcards on the
24 * assumption that the vcards need to be valid for CardDAV.
25 *
26 * This means for example that the UID is required, whereas it is not for
27 * regular vcards.
28 */
29 const PROFILE_CARDDAV = 2;
30
31 /**
32 * If this option is set, the validator will operate on iCalendar objects
33 * on the assumption that the vcards need to be valid for CalDAV.
34 *
35 * This means for example that calendars can only contain objects with
36 * identical component types and UIDs.
37 */
38 const PROFILE_CALDAV = 4;
39
40 /**
41 * Reference to the parent object, if this is not the top object.
42 *
43 * @var Node
44 */
45 public $parent;
46
47 /**
48 * Iterator override
49 *
50 * @var ElementList
51 */
52 protected $iterator = null;
53
54 /**
55 * The root document
56 *
57 * @var Component
58 */
59 protected $root;
60
61 /**
62 * Serializes the node into a mimedir format
63 *
64 * @return string
65 */
66 abstract public function serialize();
67
68 /**
69 * This method returns an array, with the representation as it should be
70 * encoded in json. This is used to create jCard or jCal documents.
71 *
72 * @return array
73 */
74 abstract public function jsonSerialize();
75
76 /* {{{ IteratorAggregator interface */
77
78 /**
79 * Returns the iterator for this object
80 *
81 * @return ElementList
82 */
83 public function getIterator() {
84
85 if (!is_null($this->iterator))
86 return $this->iterator;
87
88 return new ElementList(array($this));
89
90 }
91
92 /**
93 * Sets the overridden iterator
94 *
95 * Note that this is not actually part of the iterator interface
96 *
97 * @param ElementList $iterator
98 * @return void
99 */
100 public function setIterator(ElementList $iterator) {
101
102 $this->iterator = $iterator;
103
104 }
105
106 /**
107 * Validates the node for correctness.
108 *
109 * The following options are supported:
110 * Node::REPAIR - May attempt to automatically repair the problem.
111 *
112 * This method returns an array with detected problems.
113 * Every element has the following properties:
114 *
115 * * level - problem level.
116 * * message - A human-readable string describing the issue.
117 * * node - A reference to the problematic node.
118 *
119 * The level means:
120 * 1 - The issue was repaired (only happens if REPAIR was turned on)
121 * 2 - An inconsequential issue
122 * 3 - A severe issue.
123 *
124 * @param int $options
125 * @return array
126 */
127 public function validate($options = 0) {
128
129 return array();
130
131 }
132
133 /* }}} */
134
135 /* {{{ Countable interface */
136
137 /**
138 * Returns the number of elements
139 *
140 * @return int
141 */
142 public function count() {
143
144 $it = $this->getIterator();
145 return $it->count();
146
147 }
148
149 /* }}} */
150
151 /* {{{ ArrayAccess Interface */
152
153
154 /**
155 * Checks if an item exists through ArrayAccess.
156 *
157 * This method just forwards the request to the inner iterator
158 *
159 * @param int $offset
160 * @return bool
161 */
162 public function offsetExists($offset) {
163
164 $iterator = $this->getIterator();
165 return $iterator->offsetExists($offset);
166
167 }
168
169 /**
170 * Gets an item through ArrayAccess.
171 *
172 * This method just forwards the request to the inner iterator
173 *
174 * @param int $offset
175 * @return mixed
176 */
177 public function offsetGet($offset) {
178
179 $iterator = $this->getIterator();
180 return $iterator->offsetGet($offset);
181
182 }
183
184 /**
185 * Sets an item through ArrayAccess.
186 *
187 * This method just forwards the request to the inner iterator
188 *
189 * @param int $offset
190 * @param mixed $value
191 * @return void
192 */
193 public function offsetSet($offset, $value) {
194
195 $iterator = $this->getIterator();
196 $iterator->offsetSet($offset,$value);
197
198 // @codeCoverageIgnoreStart
199 //
200 // This method always throws an exception, so we ignore the closing
201 // brace
202 }
203 // @codeCoverageIgnoreEnd
204
205 /**
206 * Sets an item through ArrayAccess.
207 *
208 * This method just forwards the request to the inner iterator
209 *
210 * @param int $offset
211 * @return void
212 */
213 public function offsetUnset($offset) {
214
215 $iterator = $this->getIterator();
216 $iterator->offsetUnset($offset);
217
218 // @codeCoverageIgnoreStart
219 //
220 // This method always throws an exception, so we ignore the closing
221 // brace
222 }
223 // @codeCoverageIgnoreEnd
224
225 /* }}} */
226 }