2012-06-03 20:19:28 +02:00
|
|
|
<?php
|
|
|
|
|
2012-08-11 10:07:19 +02:00
|
|
|
namespace Sabre\VObject;
|
|
|
|
|
2012-06-03 20:19:28 +02:00
|
|
|
/**
|
|
|
|
* Base class for all nodes
|
|
|
|
*
|
|
|
|
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
|
|
|
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
|
|
|
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
|
|
|
*/
|
2012-08-11 10:07:19 +02:00
|
|
|
abstract class Node implements \IteratorAggregate, \ArrayAccess, \Countable {
|
2012-06-03 20:19:28 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Turns the object back into a serialized blob.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
abstract function serialize();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Iterator override
|
|
|
|
*
|
2012-08-11 10:07:19 +02:00
|
|
|
* @var ElementList
|
2012-06-03 20:19:28 +02:00
|
|
|
*/
|
|
|
|
protected $iterator = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A link to the parent node
|
|
|
|
*
|
2012-08-11 10:07:19 +02:00
|
|
|
* @var Node
|
2012-06-03 20:19:28 +02:00
|
|
|
*/
|
|
|
|
public $parent = null;
|
|
|
|
|
2012-07-27 20:35:14 +02:00
|
|
|
/**
|
|
|
|
* Validates the node for correctness.
|
|
|
|
* An array is returned with warnings.
|
|
|
|
*
|
|
|
|
* Every item in the array has the following properties:
|
|
|
|
* * level - (number between 1 and 3 with severity information)
|
|
|
|
* * message - (human readable message)
|
|
|
|
* * node - (reference to the offending node)
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function validate() {
|
|
|
|
|
|
|
|
return array();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-06-03 20:19:28 +02:00
|
|
|
/* {{{ IteratorAggregator interface */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the iterator for this object
|
|
|
|
*
|
2012-08-11 10:07:19 +02:00
|
|
|
* @return ElementList
|
2012-06-03 20:19:28 +02:00
|
|
|
*/
|
|
|
|
public function getIterator() {
|
|
|
|
|
|
|
|
if (!is_null($this->iterator))
|
|
|
|
return $this->iterator;
|
|
|
|
|
2012-08-11 10:07:19 +02:00
|
|
|
return new ElementList(array($this));
|
2012-06-03 20:19:28 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the overridden iterator
|
|
|
|
*
|
|
|
|
* Note that this is not actually part of the iterator interface
|
|
|
|
*
|
2012-08-11 10:07:19 +02:00
|
|
|
* @param ElementList $iterator
|
2012-06-03 20:19:28 +02:00
|
|
|
* @return void
|
|
|
|
*/
|
2012-08-11 10:07:19 +02:00
|
|
|
public function setIterator(ElementList $iterator) {
|
2012-06-03 20:19:28 +02:00
|
|
|
|
|
|
|
$this->iterator = $iterator;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* }}} */
|
|
|
|
|
|
|
|
/* {{{ Countable interface */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the number of elements
|
|
|
|
*
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public 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
|
|
|
|
*/
|
|
|
|
public 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
|
|
|
|
*/
|
|
|
|
public 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
|
|
|
|
*/
|
|
|
|
public function offsetSet($offset,$value) {
|
|
|
|
|
|
|
|
$iterator = $this->getIterator();
|
|
|
|
$iterator->offsetSet($offset,$value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets an item through ArrayAccess.
|
|
|
|
*
|
|
|
|
* This method just forwards the request to the inner iterator
|
|
|
|
*
|
|
|
|
* @param int $offset
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function offsetUnset($offset) {
|
|
|
|
|
|
|
|
$iterator = $this->getIterator();
|
|
|
|
$iterator->offsetUnset($offset);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* }}} */
|
|
|
|
|
|
|
|
}
|