diff --git a/object/Item.php b/object/Item.php index 1a88fe36bf..8825678941 100644 --- a/object/Item.php +++ b/object/Item.php @@ -21,12 +21,20 @@ class Item extends BaseObject { private $profile_owner = 0; private $toplevel = false; private $writeable = false; + private $children = array(); + private $parent = null; public function __construct($data) { $this->data = $data; $this->set_template('wall'); - $this->toplevel = ($this->get_id() == $this->get_parent()); + $this->toplevel = ($this->get_id() == $this->get_data_value('parent')); $this->writeable = ($this->get_data_value('writeable') || $this->get_data_value('self')); + + // Prepare the children + foreach($data['children'] as $item) { + $child = new Item($item); + $this->add_child($child); + } } /** @@ -338,9 +346,76 @@ class Item extends BaseObject { public function get_thumb() { return $this->get_data_value('thumb'); } - - public function get_parent() { - return $this->get_data_value('parent'); + + /** + * Add a child item + */ + public function add_child($item) { + $item_id = $item->get_id(); + if(!$item_id) { + logger('[ERROR] Item::add_child : Item has no ID!!', LOGGER_DEBUG); + return false; + } + if($this->get_child($item->get_id())) { + logger('[WARN] Item::add_child : Item already exists ('. $item->get_id() .').', LOGGER_DEBUG); + return false; + } + $item->set_parent($this); + $this->children[] = $item; + return end($this->children); + } + + /** + * Get a child by its ID + */ + public function get_child($id) { + foreach($this->get_children() as $child) { + if($child->get_id() == $id) + return $child; + } + return null; + } + + /** + * Get all ou children + */ + public function get_children() { + return $this->children; + } + + /** + * Set our parent + */ + protected function set_parent($item) { + $parent = $this->get_parent(); + if($parent) { + $parent->remove_child($this); + } + $this->parent = $item; + } + + /** + * Remove a child + */ + public function remove_child($item) { + $id = $item->get_id(); + foreach($this->get_children() as $key => $child) { + if($child->get_id() == $id) { + unset($this->children[$key]); + // Reindex the array, in order to make sure there won't be any trouble on loops using count() + $this->children = array_values($this->children); + return true; + } + } + logger('[WARN] Item::remove_child : Item is not a child ('. $id .').', LOGGER_DEBUG); + return false; + } + + /** + * Get parent item + */ + protected function get_parent() { + return $this->parent; } /**