ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
functions.php
Go to the documentation of this file.
1<?php
2
4
5use InvalidArgumentException;
8
41function enum(Writer $writer, array $values) {
42
43 foreach ($values as $value) {
44 $writer->writeElement($value);
45 }
46}
47
61function valueObject(Writer $writer, $valueObject, $namespace) {
62 foreach (get_object_vars($valueObject) as $key => $val) {
63 if (is_array($val)) {
64 // If $val is an array, it has a special meaning. We need to
65 // generate one child element for each item in $val
66 foreach ($val as $child) {
67 $writer->writeElement('{' . $namespace . '}' . $key, $child);
68 }
69
70 } elseif ($val !== null) {
71 $writer->writeElement('{' . $namespace . '}' . $key, $val);
72 }
73 }
74}
75
76
97function repeatingElements(Writer $writer, array $items, $childElementName) {
98
99 foreach ($items as $item) {
100 $writer->writeElement($childElementName, $item);
101 }
102
103}
104
164function standardSerializer(Writer $writer, $value) {
165
166 if (is_scalar($value)) {
167
168 // String, integer, float, boolean
169 $writer->text($value);
170
171 } elseif ($value instanceof XmlSerializable) {
172
173 // XmlSerializable classes or Element classes.
174 $value->xmlSerialize($writer);
175
176 } elseif (is_object($value) && isset($writer->classMap[get_class($value)])) {
177
178 // It's an object which class appears in the classmap.
179 $writer->classMap[get_class($value)]($writer, $value);
180
181 } elseif (is_callable($value)) {
182
183 // A callback
184 $value($writer);
185
186 } elseif (is_null($value)) {
187
188 // nothing!
189
190 } elseif (is_array($value) && array_key_exists('name', $value)) {
191
192 // if the array had a 'name' element, we assume that this array
193 // describes a 'name' and optionally 'attributes' and 'value'.
194
195 $name = $value['name'];
196 $attributes = isset($value['attributes']) ? $value['attributes'] : [];
197 $value = isset($value['value']) ? $value['value'] : null;
198
199 $writer->startElement($name);
201 $writer->write($value);
202 $writer->endElement();
203
204 } elseif (is_array($value)) {
205
206 foreach ($value as $name => $item) {
207
208 if (is_int($name)) {
209
210 // This item has a numeric index. We just loop through the
211 // array and throw it back in the writer.
212 standardSerializer($writer, $item);
213
214 } elseif (is_string($name) && is_array($item) && isset($item['attributes'])) {
215
216 // The key is used for a name, but $item has 'attributes' and
217 // possibly 'value'
218 $writer->startElement($name);
219 $writer->writeAttributes($item['attributes']);
220 if (isset($item['value'])) {
221 $writer->write($item['value']);
222 }
223 $writer->endElement();
224
225 } elseif (is_string($name)) {
226
227 // This was a plain key-value array.
228 $writer->startElement($name);
229 $writer->write($item);
230 $writer->endElement();
231
232 } else {
233
234 throw new InvalidArgumentException('The writer does not know how to serialize arrays with keys of type: ' . gettype($name));
235
236 }
237 }
238
239 } elseif (is_object($value)) {
240
241 throw new InvalidArgumentException('The writer cannot serialize objects of class: ' . get_class($value));
242
243 } else {
244
245 throw new InvalidArgumentException('The writer cannot serialize values of type: ' . gettype($value));
246
247 }
248
249}
An exception for terminatinating execution or to throw for unit testing.
The XML Writer class.
Definition: Writer.php:31
writeElement($name, $content=null)
Write a full element tag and it's contents.
Definition: Writer.php:189
startElement($name)
Opens a new element.
Definition: Writer.php:121
write($value)
Writes a value to the output stream.
Definition: Writer.php:98
writeAttributes(array $attributes)
Writes a list of attributes.
Definition: Writer.php:211
$key
Definition: croninfo.php:18
if($err=$client->getError()) $namespace
if(array_key_exists('yes', $_REQUEST)) $attributes
Definition: getconsent.php:85
Objects implementing XmlSerializable can control how they are represented in Xml.
valueObject(Writer $writer, $valueObject, $namespace)
The valueObject serializer turns a simple PHP object into a classname.
Definition: functions.php:61
standardSerializer(Writer $writer, $value)
This function is the 'default' serializer that is able to serialize most things, and delegates to oth...
Definition: functions.php:164
repeatingElements(Writer $writer, array $items, $childElementName)
This serializer helps you serialize xml structures that look like this:
Definition: functions.php:97
$values