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); +	} +}  | 
