diff options
Diffstat (limited to 'engine/classes/ElggMenuItem.php')
-rw-r--r-- | engine/classes/ElggMenuItem.php | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/engine/classes/ElggMenuItem.php b/engine/classes/ElggMenuItem.php new file mode 100644 index 000000000..97dabe62a --- /dev/null +++ b/engine/classes/ElggMenuItem.php @@ -0,0 +1,329 @@ +<?php +/** + * Elgg Menu Item + * + * @package Elgg.Core + * @subpackage Navigation + * + * @since 1.8.0 + */ +class ElggMenuItem { + /** + * @var string Identifier of the menu + */ + protected $name; + + /** + * @var string The menu display string + */ + protected $title; + + /** + * @var string The menu url + */ + protected $url; + + /** + * @var array Page context array + */ + protected $contexts = array('all'); + + /** + * @var string Menu section identifier + */ + protected $section = 'default'; + + /** + * @var string Tooltip + */ + protected $tooltip = ''; + + /** + * @var bool Is this the currently selected menu item + */ + protected $selected = false; + + /** + * @var string Identifier of this item's parent + */ + protected $parent_name = ''; + + /** + * @var ElggMenuItem The parent object or null + */ + protected $parent = null; + + /** + * @var array Array of children objects or empty array + */ + protected $children = array(); + + /** + * ElggMenuItem constructor + * + * @param string $name Identifier of the menu item + * @param string $title Title of the menu item + * @param string $url URL of the menu item + */ + public function __construct($name, $title, $url) { + $this->name = $name; + $this->title = $title; + $this->url = $url; + } + + /** + * ElggMenuItem factory method + * + * This static method creates an ElggMenuItem from an associative array. + * Required keys are name, title, and url. + * + * @param array $options Option array of key value pairs + * + * @return ElggMenuItem or NULL on error + */ + public static function factory($options) { + if (!isset($options['name']) || !isset($options['title']) || !isset($options['url'])) { + return NULL; + } + + $item = new ElggMenuItem($options['name'], $options['title'], $options['url']); + + // special catch in case someone uses context rather than contexts + if (isset($options['context'])) { + $options['contexts'] = $options['context']; + unset($options['context']); + } + + foreach ($options as $key => $value) { + $item->$key = $value; + } + + // make sure contexts is set correctly + if (isset($options['contexts'])) { + $item->setContext($options['contexts']); + } + + return $item; + } + + /** + * Get the identifier of the menu item + * + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * Get the display title of the menu + * + * @return string + */ + public function getTitle() { + return $this->title; + } + + /** + * Get the URL of the menu item + * + * @return string + */ + public function getURL() { + return $this->url; + } + + /** + * Set the contexts that this menu item is available for + * + * @param array $contexts An array of context strings + * + * @return void + */ + public function setContext($contexts) { + if (is_string($contexts)) { + $contexts = array($contexts); + } + $this->contexts = $contexts; + } + + /** + * Get an array of context strings + * + * @return array + */ + public function getContext() { + return $this->contexts; + } + + /** + * Should this menu item be used given the current context + * + * @param string $context A context string (default is empty string for + * current context stack. + * + * @return bool + */ + public function inContext($context = '') { + if ($context) { + return in_array($context, $this->contexts); + } + + if (in_array('all', $this->contexts)) { + return true; + } + + foreach ($this->contexts as $context) { + if (elgg_in_context($context)) { + return true; + } + } + return false; + } + + /** + * Set the selected flag + * + * @param bool $state Selected state (default is true) + * + * @return void + */ + public function setSelected($state = true) { + $this->selected = $state; + } + + /** + * Get selected state + * + * @return bool + */ + public function getSelected() { + return $this->selected; + } + + /** + * Set the tool tip text + * + * @param string $text The text of the tool tip + * + * @return void + */ + public function setTooltip($text) { + $this->tooltip = $text; + } + + /** + * Get the tool tip text + * + * @return string + */ + public function getTooltip() { + return $this->tooltip; + } + + /** + * Set the section identifier + * + * @param string $section The identifier of the section + * + * @return void + */ + public function setSection($section) { + $this->section = $section; + } + + /** + * Get the section identifier + * + * @return string + */ + public function getSection() { + return $this->section; + } + + /** + * Set the parent identifier + * + * @param string $parent_name The identifier of the parent ElggMenuItem + * + * @return void + */ + public function setParentName($parent_name) { + $this->parent_name = $parent_name; + } + + /** + * Get the parent identifier + * + * @return string + */ + public function getParentName() { + return $this->parent_name; + } + + /** + * Set the parent menu item + * + * @param ElggMenuItem $parent + * + * @return void + */ + public function setParent($parent) { + $this->parent = $parent; + } + + /** + * Get the parent menu item + * + * @return ElggMenuItem or null + */ + public function getParent() { + return $this->parent; + } + + /** + * Add a child menu item + * + * @param ElggMenuItem $item + * + * @return void + */ + public function addChild($item) { + $this->children[] = $item; + } + + /** + * Get the children menu items + * + * @return array + */ + public function getChildren() { + return $this->children; + } + + /** + * Sort the children + * + * @param string $sort_function + * + * @return void + */ + public function sortChildren($sort_function) { + usort($this->children, $sort_function); + } + + /** + * Get the menu link + * + * @todo add styling + * + * @return string + */ + public function getLink() { + $vars = array( + 'href' => $this->url, + 'text' => $this->title + ); + return elgg_view('output/url', $vars); + } +} |