aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/vobject/lib/Node.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/vobject/lib/Node.php')
-rw-r--r--vendor/sabre/vobject/lib/Node.php265
1 files changed, 265 insertions, 0 deletions
diff --git a/vendor/sabre/vobject/lib/Node.php b/vendor/sabre/vobject/lib/Node.php
new file mode 100644
index 000000000..e2845da75
--- /dev/null
+++ b/vendor/sabre/vobject/lib/Node.php
@@ -0,0 +1,265 @@
+<?php
+
+namespace Sabre\VObject;
+
+use Sabre\Xml;
+
+/**
+ * A node is the root class for every element in an iCalendar of vCard object.
+ *
+ * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
+ * @author Evert Pot (http://evertpot.com/)
+ * @license http://sabre.io/license/ Modified BSD License
+ */
+abstract class Node
+ implements \IteratorAggregate,
+ \ArrayAccess,
+ \Countable,
+ \JsonSerializable,
+ Xml\XmlSerializable {
+
+ /**
+ * The following constants are used by the validate() method.
+ *
+ * If REPAIR is set, the validator will attempt to repair any broken data
+ * (if possible).
+ */
+ const REPAIR = 1;
+
+ /**
+ * If this option is set, the validator will operate on the vcards on the
+ * assumption that the vcards need to be valid for CardDAV.
+ *
+ * This means for example that the UID is required, whereas it is not for
+ * regular vcards.
+ */
+ const PROFILE_CARDDAV = 2;
+
+ /**
+ * If this option is set, the validator will operate on iCalendar objects
+ * on the assumption that the vcards need to be valid for CalDAV.
+ *
+ * This means for example that calendars can only contain objects with
+ * identical component types and UIDs.
+ */
+ const PROFILE_CALDAV = 4;
+
+ /**
+ * Reference to the parent object, if this is not the top object.
+ *
+ * @var Node
+ */
+ public $parent;
+
+ /**
+ * Iterator override.
+ *
+ * @var ElementList
+ */
+ protected $iterator = null;
+
+ /**
+ * The root document.
+ *
+ * @var Component
+ */
+ protected $root;
+
+ /**
+ * Serializes the node into a mimedir format.
+ *
+ * @return string
+ */
+ abstract function serialize();
+
+ /**
+ * This method returns an array, with the representation as it should be
+ * encoded in JSON. This is used to create jCard or jCal documents.
+ *
+ * @return array
+ */
+ abstract function jsonSerialize();
+
+ /**
+ * This method serializes the data into XML. This is used to create xCard or
+ * xCal documents.
+ *
+ * @param Xml\Writer $writer XML writer.
+ *
+ * @return void
+ */
+ abstract function xmlSerialize(Xml\Writer $writer);
+
+ /**
+ * Call this method on a document if you're done using it.
+ *
+ * It's intended to remove all circular references, so PHP can easily clean
+ * it up.
+ *
+ * @return void
+ */
+ function destroy() {
+
+ $this->parent = null;
+ $this->root = null;
+
+ }
+
+ /* {{{ IteratorAggregator interface */
+
+ /**
+ * Returns the iterator for this object.
+ *
+ * @return ElementList
+ */
+ function getIterator() {
+
+ if (!is_null($this->iterator)) {
+ return $this->iterator;
+ }
+
+ return new ElementList([$this]);
+
+ }
+
+ /**
+ * Sets the overridden iterator.
+ *
+ * Note that this is not actually part of the iterator interface
+ *
+ * @param ElementList $iterator
+ *
+ * @return void
+ */
+ function setIterator(ElementList $iterator) {
+
+ $this->iterator = $iterator;
+
+ }
+
+ /**
+ * Validates the node for correctness.
+ *
+ * The following options are supported:
+ * Node::REPAIR - May attempt to automatically repair the problem.
+ *
+ * This method returns an array with detected problems.
+ * Every element has the following properties:
+ *
+ * * level - problem level.
+ * * message - A human-readable string describing the issue.
+ * * node - A reference to the problematic node.
+ *
+ * The level means:
+ * 1 - The issue was repaired (only happens if REPAIR was turned on)
+ * 2 - An inconsequential issue
+ * 3 - A severe issue.
+ *
+ * @param int $options
+ *
+ * @return array
+ */
+ function validate($options = 0) {
+
+ return [];
+
+ }
+
+ /* }}} */
+
+ /* {{{ Countable interface */
+
+ /**
+ * Returns the number of elements.
+ *
+ * @return int
+ */
+ function count() {
+
+ $it = $this->getIterator();
+ return $it->count();
+
+ }
+
+ /* }}} */
+
+ /* {{{ ArrayAccess Interface */
+
+
+ /**
+ * Checks if an item exists through ArrayAccess.
+ *
+ * This method just forwards the request to the inner iterator
+ *
+ * @param int $offset
+ *
+ * @return bool
+ */
+ function offsetExists($offset) {
+
+ $iterator = $this->getIterator();
+ return $iterator->offsetExists($offset);
+
+ }
+
+ /**
+ * Gets an item through ArrayAccess.
+ *
+ * This method just forwards the request to the inner iterator
+ *
+ * @param int $offset
+ *
+ * @return mixed
+ */
+ function offsetGet($offset) {
+
+ $iterator = $this->getIterator();
+ return $iterator->offsetGet($offset);
+
+ }
+
+ /**
+ * Sets an item through ArrayAccess.
+ *
+ * This method just forwards the request to the inner iterator
+ *
+ * @param int $offset
+ * @param mixed $value
+ *
+ * @return void
+ */
+ function offsetSet($offset, $value) {
+
+ $iterator = $this->getIterator();
+ $iterator->offsetSet($offset, $value);
+
+ // @codeCoverageIgnoreStart
+ //
+ // This method always throws an exception, so we ignore the closing
+ // brace
+ }
+ // @codeCoverageIgnoreEnd
+
+ /**
+ * Sets an item through ArrayAccess.
+ *
+ * This method just forwards the request to the inner iterator
+ *
+ * @param int $offset
+ *
+ * @return void
+ */
+ function offsetUnset($offset) {
+
+ $iterator = $this->getIterator();
+ $iterator->offsetUnset($offset);
+
+ // @codeCoverageIgnoreStart
+ //
+ // This method always throws an exception, so we ignore the closing
+ // brace
+ }
+ // @codeCoverageIgnoreEnd
+
+ /* }}} */
+}