diff options
Diffstat (limited to 'engine/classes/ElggMenuBuilder.php')
| -rw-r--r-- | engine/classes/ElggMenuBuilder.php | 29 | 
1 files changed, 19 insertions, 10 deletions
| diff --git a/engine/classes/ElggMenuBuilder.php b/engine/classes/ElggMenuBuilder.php index d9a704dd9..b463143d8 100644 --- a/engine/classes/ElggMenuBuilder.php +++ b/engine/classes/ElggMenuBuilder.php @@ -8,6 +8,9 @@   */  class ElggMenuBuilder { +	/** +	 * @var ElggMenuItem[] +	 */  	protected $menu = array();  	protected $selected = null; @@ -15,7 +18,7 @@ class ElggMenuBuilder {  	/**  	 * ElggMenuBuilder constructor  	 * -	 * @param array $menu Array of ElggMenuItem objects +	 * @param ElggMenuItem[] $menu Array of ElggMenuItem objects  	 */  	public function __construct(array $menu) {  		$this->menu = $menu; @@ -107,6 +110,7 @@ class ElggMenuBuilder {  			$children = array();  			// divide base nodes from children  			foreach ($section as $menu_item) { +				/* @var ElggMenuItem $menu_item */  				$parent_name = $menu_item->getParentName();  				if (!$parent_name) {  					$parents[$menu_item->getName()] = $menu_item; @@ -118,13 +122,16 @@ class ElggMenuBuilder {  			// attach children to parents  			$iteration = 0;  			$current_gen = $parents; +			$next_gen = null;  			while (count($children) && $iteration < 5) {  				foreach ($children as $index => $menu_item) {  					$parent_name = $menu_item->getParentName();  					if (array_key_exists($parent_name, $current_gen)) {  						$next_gen[$menu_item->getName()] = $menu_item; -						$current_gen[$parent_name]->addChild($menu_item); -						$menu_item->setParent($current_gen[$parent_name]); +						if (!in_array($menu_item, $current_gen[$parent_name]->getData('children'))) { +							$current_gen[$parent_name]->addChild($menu_item); +							$menu_item->setParent($current_gen[$parent_name]); +						}  						unset($children[$index]);  					}  				} @@ -216,12 +223,12 @@ class ElggMenuBuilder {  				array_push($stack, $root);  				while (!empty($stack)) {  					$node = array_pop($stack); +					/* @var ElggMenuItem $node */  					$node->sortChildren($sort_callback);  					$children = $node->getChildren();  					if ($children) {  						$stack = array_merge($stack, $children);  					} -					$p = count($stack);  				}  			}  		} @@ -230,8 +237,8 @@ class ElggMenuBuilder {  	/**  	 * Compare two menu items by their display text  	 * -	 * @param ElggMenuItem $a -	 * @param ElggMenuItem $b +	 * @param ElggMenuItem $a Menu item +	 * @param ElggMenuItem $b Menu item  	 * @return bool  	 */  	public static function compareByText($a, $b) { @@ -248,8 +255,8 @@ class ElggMenuBuilder {  	/**  	 * Compare two menu items by their identifiers  	 * -	 * @param ElggMenuItem $a -	 * @param ElggMenuItem $b +	 * @param ElggMenuItem $a Menu item +	 * @param ElggMenuItem $b Menu item  	 * @return bool  	 */  	public static function compareByName($a, $b) { @@ -266,9 +273,11 @@ class ElggMenuBuilder {  	/**  	 * Compare two menu items by their priority  	 * -	 * @param ElggMenuItem $a -	 * @param ElggMenuItem $b +	 * @param ElggMenuItem $a Menu item +	 * @param ElggMenuItem $b Menu item  	 * @return bool +	 * +	 * @todo change name to compareByPriority  	 */  	public static function compareByWeight($a, $b) {  		$aw = $a->getWeight(); | 
