PageRenderTime 38ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/Menus/Controller/Component/MenusComponent.php

https://github.com/kareypowell/croogo
PHP | 138 lines | 84 code | 12 blank | 42 comment | 8 complexity | e98616e204d9181280774147faaf0608 MD5 | raw file
  1. <?php
  2. App::uses('Component', 'Controller');
  3. /**
  4. * Menus Component
  5. *
  6. * @package Croogo.Menus.Controller.Component
  7. */
  8. class MenusComponent extends Component {
  9. /**
  10. * Other components used by this component
  11. *
  12. * @var array
  13. * @access public
  14. */
  15. public $components = array(
  16. 'Croogo.Croogo',
  17. );
  18. /**
  19. * Menus for layout
  20. *
  21. * @var string
  22. * @access public
  23. */
  24. public $menusForLayout = array();
  25. /**
  26. * initialize
  27. *
  28. * @param Controller $controller instance of controller
  29. */
  30. public function initialize(Controller $controller) {
  31. $this->controller = $controller;
  32. if (isset($controller->Link)) {
  33. $this->Link = $controller->Link;
  34. } else {
  35. $this->Link = ClassRegistry::init('Menus.Link');
  36. }
  37. }
  38. /**
  39. * Startup
  40. *
  41. * @param object $controller instance of controller
  42. * @return void
  43. */
  44. public function startup(Controller $controller) {
  45. if (!isset($controller->request->params['admin']) && !isset($controller->request->params['requested'])) {
  46. $this->menus();
  47. } else {
  48. $this->_adminData();
  49. }
  50. }
  51. protected function _adminData() {
  52. // menus
  53. $menus = $this->Link->Menu->find('all', array(
  54. 'recursive' => '-1',
  55. 'order' => 'Menu.id ASC',
  56. ));
  57. $this->controller->set('menus_for_admin_layout', $menus);
  58. }
  59. /**
  60. * beforeRender
  61. *
  62. * @param object $controller instance of controller
  63. * @return void
  64. */
  65. public function beforeRender(Controller $controller) {
  66. $controller->set('menus_for_layout', $this->menusForLayout);
  67. }
  68. /**
  69. * Menus
  70. *
  71. * Menus will be available in this variable in views: $menus_for_layout
  72. *
  73. * @return void
  74. */
  75. public function menus() {
  76. $menus = array();
  77. $themeData = $this->Croogo->getThemeData(Configure::read('Site.theme'));
  78. if (isset($themeData['menus']) && is_array($themeData['menus'])) {
  79. $menus = Hash::merge($menus, $themeData['menus']);
  80. }
  81. $menus = Hash::merge($menus, array_keys($this->controller->Blocks->blocksData['menus']));
  82. $roleId = $this->controller->Croogo->roleId();
  83. $status = $this->Link->status();
  84. foreach ($menus as $menuAlias) {
  85. $menu = $this->Link->Menu->find('first', array(
  86. 'conditions' => array(
  87. 'Menu.status' => $status,
  88. 'Menu.alias' => $menuAlias,
  89. 'Menu.link_count >' => 0,
  90. ),
  91. 'cache' => array(
  92. 'name' => $menuAlias,
  93. 'config' => 'croogo_menus',
  94. ),
  95. 'recursive' => '-1',
  96. ));
  97. if (isset($menu['Menu']['id'])) {
  98. $this->menusForLayout[$menuAlias] = $menu;
  99. $findOptions = array(
  100. 'conditions' => array(
  101. 'Link.menu_id' => $menu['Menu']['id'],
  102. 'Link.status' => $status,
  103. 'AND' => array(
  104. array(
  105. 'OR' => array(
  106. 'Link.visibility_roles' => '',
  107. 'Link.visibility_roles LIKE' => '%"' . $roleId . '"%',
  108. ),
  109. ),
  110. ),
  111. ),
  112. 'order' => array(
  113. 'Link.lft' => 'ASC',
  114. ),
  115. 'cache' => array(
  116. 'name' => $menu['Menu']['alias'] . '_links_' . $roleId,
  117. 'config' => 'croogo_menus',
  118. ),
  119. 'recursive' => -1,
  120. );
  121. $links = $this->Link->find('threaded', $findOptions);
  122. $this->menusForLayout[$menuAlias]['threaded'] = $links;
  123. }
  124. }
  125. }
  126. }