_data["text"] = $text; $this->_data["type"] = $type; $this->_data["url"] = $url; } public function __get($key) { if (array_key_exists($key, $this->_data)) { return $this->_data[$key]; } throw new Exception("@todo UNDEFINED PROPERTY"); } public function __set($key, $value) { $this->_data[$key] = $value; } } class Menu_Link extends Menu_Item { public function __construct($text="", $url="#") { parent::__construct("link", $text, $url); } public function __toString() { return "
  • url\">$this->text
  • "; } } class Menu_Dialog extends Menu_Item { public function __construct($text="", $url="#", $class="gDialogLink") { parent::__construct("dialog", $text, $url); $this->dialog_class = $class; $this->title = $text; } public function __toString() { return "
  • dialog_class\" href=\"$this->url\" " . "title=\"$this->title\">$this->text
  • "; } } class Menu_Core extends Menu_Item { public function __construct($text="", $url="#") { parent::__construct("menu", $text, $url); $this->_data['items'] = array(); } public function append($menu_item) { $items = $this->items; $items[] = $menu_item; $this->items = $items; } public function get($text) { foreach ($this->items as $item) { if ($item->text == $text) { return $item; } } return false; } private function _get_index($text) { foreach ($this->items as $idx => $item) { if ($item->text == $text) { return (int)$idx; } } return false; } public function insert_before($text, $menu_item) { $offset = $this->_get_index($text); Kohana::log("debug", "$offset: $offset"); $items = $this->items; $front_part = ($offset == 0) ? array() : array_splice($items, 0, $offset); $back_part = ($offset == 0) ? $this->items : array_splice($items, $offset - 1); Kohana::log("debug", print_r($front_part, 1)); Kohana::log("debug", print_r($front_part, 1)); $this->items = array_merge($front_part, array($menu_item), $back_part); } public function insert_after($text, $menu_item) { $offset = $this->_get_index($text); $last_offset = count($this->items) - 1; // If not found, then append to the end if ($offset == false) { $offset = $last_offset; } $items = $this->items; $front_part = ($offset == $last_offset) ? $this->items : array_splice($items, 0, $offset + 1); $back_part = ($offset == $last_offset) ? array() : array_splice($items, $offset - 1); $this->items = array_merge($front_part, array($menu_item), $back_part); } public function __toString() { Kohana::log("debug", print_r($this, 1)); $items_html = array(); $item_text = $this->text; if (!empty($item_text)) { $items_html[] = "
  • $item_text"; } $items = $this->items; if (!empty($items)) { $items_html[] = ""; } if (!empty($item_text)) { $items_html[] = "
  • "; } return implode("\n", $items_html); } }