1: <?php
2:
3: App::uses('AppHelper', 'View/Helper');
4:
5: class extends AppHelper {
6:
7: public $helpers = array(
8: 'AccessControl.AccessControl',
9: 'ExtendedScaffold.ScaffoldUtil',
10: );
11:
12: public function __construct(\View $View, $settings = array()) {
13: parent::__construct($View, $settings + array(
14: 'defaultCss' => true,
15: 'subMenuSymbol' => '↓',
16: ));
17:
18: if ($this->settings['defaultCss']) {
19: $this->ScaffoldUtil->addCssLink('Widgets.MenuHelper.css');
20: }
21: }
22:
23: public function dropdown($entries, $mainEntriesEqualsWidth = false) {
24: return $mainEntriesEqualsWidth ?
25: $this->_dropDownMainEntriesEqualsWidth($entries) :
26: $this->_dropDownCommon($entries);
27: }
28:
29: private function _dropDownCommon($entries) {
30: $buffer = "<ul class='MenuHelper'>";
31:
32: foreach ($this->_userMenu($entries) as $name => $entry) {
33: if (is_array($entry)) {
34: $buffer .= $this->_submenu($name, $entry, null);
35: } else {
36: $buffer .= $this->_link($name, $entry, null);
37: }
38: }
39:
40: $buffer .= "</ul>";
41: return $buffer;
42: }
43:
44: private function _dropDownMainEntriesEqualsWidth($entries) {
45: $buffer = "<ul class='MenuHelper'>";
46: $totalWidth = 100;
47: $count = count($entries);
48:
49: foreach ($this->_userMenu($entries) as $name => $entry) {
50: $width = floor($totalWidth / $count) - 1;
51: if (is_array($entry)) {
52: $buffer .= $this->_submenu($name, $entry, $width);
53: } else {
54: $buffer .= $this->_link($name, $entry, $width);
55: }
56: }
57:
58: $buffer .= "</ul>";
59: return $buffer;
60: }
61:
62: private function _listItem($content, $width) {
63: $b = '<li';
64: if ($width) {
65: $b .= " style='width: $width%'";
66: }
67: $b .= '>' . $content . '</li>';
68: return $b;
69: }
70:
71: private function _link($label, $uri, $width = null) {
72: return $this->_listItem($this->AccessControl->link($label, $uri), $width);
73: }
74:
75: private function ($label, $entries, $width = null) {
76: $buffer = "<a href='#'>$label {$this->settings['subMenuSymbol']}</a>";
77: $buffer .= "<ul class='sub_menu'>";
78: foreach ($entries as $name => $entry) {
79: if (is_array($entry)) {
80: $buffer .= $this->_submenu($name, $entry);
81: } else {
82: $buffer .= $this->_link($name, $entry);
83: }
84: }
85: $buffer .= "</ul>";
86:
87: return $this->_listItem($buffer, $width);
88: }
89:
90: private function ($entries) {
91: $userEntries = array();
92: foreach ($entries as $name => $value) {
93: if (is_array($value)) {
94: $subUserEntries = $this->_userMenu($value);
95: if (!empty($subUserEntries)) {
96: $userEntries[$name] = $subUserEntries;
97: }
98: } else {
99: if ($this->AccessControl->hasAccessByUrl($value)) {
100: $userEntries[$name] = $value;
101: }
102: }
103: }
104:
105: return $userEntries;
106: }
107:
108: }
109:
110: ?>