4
|
1 <?php
|
|
2
|
|
3 namespace Sabre\VObject;
|
|
4
|
|
5 /**
|
|
6 * Base class for all nodes
|
|
7 *
|
|
8 * @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/).
|
|
9 * @author Evert Pot (http://evertpot.com/)
|
|
10 * @license http://code.google.com/p/sabredav/wiki/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 const REPAIR = 1;
|
|
18
|
|
19 /**
|
|
20 * Turns the object back into a serialized blob.
|
|
21 *
|
|
22 * @return string
|
|
23 */
|
|
24 abstract function serialize();
|
|
25
|
|
26 /**
|
|
27 * Iterator override
|
|
28 *
|
|
29 * @var ElementList
|
|
30 */
|
|
31 protected $iterator = null;
|
|
32
|
|
33 /**
|
|
34 * A link to the parent node
|
|
35 *
|
|
36 * @var Node
|
|
37 */
|
|
38 public $parent = null;
|
|
39
|
|
40 /**
|
|
41 * Validates the node for correctness.
|
|
42 *
|
|
43 * The following options are supported:
|
|
44 * - Node::REPAIR - If something is broken, and automatic repair may
|
|
45 * be attempted.
|
|
46 *
|
|
47 * An array is returned with warnings.
|
|
48 *
|
|
49 * Every item in the array has the following properties:
|
|
50 * * level - (number between 1 and 3 with severity information)
|
|
51 * * message - (human readable message)
|
|
52 * * node - (reference to the offending node)
|
|
53 *
|
|
54 * @param int $options
|
|
55 * @return array
|
|
56 */
|
|
57 public function validate($options = 0) {
|
|
58
|
|
59 return array();
|
|
60
|
|
61 }
|
|
62
|
|
63 /* {{{ IteratorAggregator interface */
|
|
64
|
|
65 /**
|
|
66 * Returns the iterator for this object
|
|
67 *
|
|
68 * @return ElementList
|
|
69 */
|
|
70 public function getIterator() {
|
|
71
|
|
72 if (!is_null($this->iterator))
|
|
73 return $this->iterator;
|
|
74
|
|
75 return new ElementList(array($this));
|
|
76
|
|
77 }
|
|
78
|
|
79 /**
|
|
80 * Sets the overridden iterator
|
|
81 *
|
|
82 * Note that this is not actually part of the iterator interface
|
|
83 *
|
|
84 * @param ElementList $iterator
|
|
85 * @return void
|
|
86 */
|
|
87 public function setIterator(ElementList $iterator) {
|
|
88
|
|
89 $this->iterator = $iterator;
|
|
90
|
|
91 }
|
|
92
|
|
93 /* }}} */
|
|
94
|
|
95 /* {{{ Countable interface */
|
|
96
|
|
97 /**
|
|
98 * Returns the number of elements
|
|
99 *
|
|
100 * @return int
|
|
101 */
|
|
102 public function count() {
|
|
103
|
|
104 $it = $this->getIterator();
|
|
105 return $it->count();
|
|
106
|
|
107 }
|
|
108
|
|
109 /* }}} */
|
|
110
|
|
111 /* {{{ ArrayAccess Interface */
|
|
112
|
|
113
|
|
114 /**
|
|
115 * Checks if an item exists through ArrayAccess.
|
|
116 *
|
|
117 * This method just forwards the request to the inner iterator
|
|
118 *
|
|
119 * @param int $offset
|
|
120 * @return bool
|
|
121 */
|
|
122 public function offsetExists($offset) {
|
|
123
|
|
124 $iterator = $this->getIterator();
|
|
125 return $iterator->offsetExists($offset);
|
|
126
|
|
127 }
|
|
128
|
|
129 /**
|
|
130 * Gets an item through ArrayAccess.
|
|
131 *
|
|
132 * This method just forwards the request to the inner iterator
|
|
133 *
|
|
134 * @param int $offset
|
|
135 * @return mixed
|
|
136 */
|
|
137 public function offsetGet($offset) {
|
|
138
|
|
139 $iterator = $this->getIterator();
|
|
140 return $iterator->offsetGet($offset);
|
|
141
|
|
142 }
|
|
143
|
|
144 /**
|
|
145 * Sets an item through ArrayAccess.
|
|
146 *
|
|
147 * This method just forwards the request to the inner iterator
|
|
148 *
|
|
149 * @param int $offset
|
|
150 * @param mixed $value
|
|
151 * @return void
|
|
152 */
|
|
153 public function offsetSet($offset,$value) {
|
|
154
|
|
155 $iterator = $this->getIterator();
|
|
156 $iterator->offsetSet($offset,$value);
|
|
157
|
|
158 // @codeCoverageIgnoreStart
|
|
159 //
|
|
160 // This method always throws an exception, so we ignore the closing
|
|
161 // brace
|
|
162 }
|
|
163 // @codeCoverageIgnoreEnd
|
|
164
|
|
165 /**
|
|
166 * Sets an item through ArrayAccess.
|
|
167 *
|
|
168 * This method just forwards the request to the inner iterator
|
|
169 *
|
|
170 * @param int $offset
|
|
171 * @return void
|
|
172 */
|
|
173 public function offsetUnset($offset) {
|
|
174
|
|
175 $iterator = $this->getIterator();
|
|
176 $iterator->offsetUnset($offset);
|
|
177
|
|
178 // @codeCoverageIgnoreStart
|
|
179 //
|
|
180 // This method always throws an exception, so we ignore the closing
|
|
181 // brace
|
|
182 }
|
|
183 // @codeCoverageIgnoreEnd
|
|
184
|
|
185 /* }}} */
|
|
186
|
|
187 }
|