BxBaseMenuSubmenu.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaBaseView UNA Base Representation Classes
  7. * @{
  8. */
  9. /**
  10. * Menu representation.
  11. * @see BxDolMenu
  12. */
  13. class BxBaseMenuSubmenu extends BxTemplMenu
  14. {
  15. protected $_aSocialSharingService = false;
  16. protected $_sObjectActionsMenu = false;
  17. protected $_sObjectSubmenu = false;
  18. protected $_mixedMainMenuItemSelected = false;
  19. protected $_sTemplateWrapper = 'menu_main_submenu_bar.html';
  20. protected $_sJsObject;
  21. protected $_iContentId;
  22. public function __construct ($aObject, $oTemplate)
  23. {
  24. parent::__construct ($aObject, $oTemplate);
  25. $this->_sJsObject = 'o' . bx_gen_method_name($this->_sObject);
  26. $this->_iContentId = 0;
  27. }
  28. public function setContentId($iContentId)
  29. {
  30. $this->_iContentId = $iContentId;
  31. }
  32. /**
  33. * Get current menu in submenu
  34. * @return menu object name
  35. */
  36. public function getObjectSubmenu()
  37. {
  38. return $this->_sObjectSubmenu;
  39. }
  40. /**
  41. * Set current menu object in submenu
  42. * @param $sMenuObject menu object name
  43. * @param $sForceMainMenuSelection force main menu item selection by menu item name
  44. */
  45. public function setObjectSubmenu ($sMenuObject, $sForceMainMenuSelection = false)
  46. {
  47. $this->_sObjectSubmenu = $sMenuObject;
  48. $this->_mixedMainMenuItemSelected = $sForceMainMenuSelection;
  49. }
  50. /**
  51. * Set current actions menu in submenu
  52. * @param $sActionsMenuObject menu object name
  53. */
  54. public function setObjectActionsMenu ($sActionsMenuObject)
  55. {
  56. $this->_sObjectActionsMenu = $sActionsMenuObject;
  57. }
  58. /**
  59. * Get current actions menu in submenu
  60. * @return menu object name
  61. */
  62. public function getObjectActionsMenu()
  63. {
  64. return $this->_sObjectActionsMenu;
  65. }
  66. /**
  67. * Set social sharing menu in submenu
  68. * @param $a menu service call array (module, method, etc)
  69. */
  70. public function setServiceSocialSharing ($a)
  71. {
  72. $this->_aSocialSharingService = $a;
  73. }
  74. /**
  75. * Get social sharing menu in submenu
  76. * @return menu service call array (module, method, etc)
  77. */
  78. public function getServiceSocialSharing ()
  79. {
  80. return $this->_aSocialSharingService;
  81. }
  82. /**
  83. * Get template wrapper
  84. * @return template wrapper
  85. */
  86. public function getTemplateWrapper ()
  87. {
  88. return $this->_sTemplateWrapper;
  89. }
  90. /**
  91. * Set template wrapper
  92. * @param $s template wrapper
  93. */
  94. public function setTemplateWrapper ($s)
  95. {
  96. $this->_sTemplateWrapper = $s;
  97. }
  98. /**
  99. * Get menu code.
  100. * @return string
  101. */
  102. public function getCode ()
  103. {
  104. $aMenuItemSelected = $this->getSelectedMenuItem ();
  105. if(isset($aMenuItemSelected['set_name']) && 'sys_site' == $aMenuItemSelected['set_name'] && 'home' == $aMenuItemSelected['name'])
  106. return '';
  107. $oMenuSubmenu = BxDolMenu::getObjectInstance($this->_sObjectSubmenu);
  108. if(!$oMenuSubmenu || !$oMenuSubmenu->isVisible())
  109. return '';
  110. if(!empty($this->_iContentId) && method_exists($oMenuSubmenu, 'setContentId'))
  111. $oMenuSubmenu->setContentId($this->_iContentId);
  112. $sCode = $oMenuSubmenu->getCode();
  113. if(empty($sCode))
  114. return '';
  115. $this->_addJsCss();
  116. return $this->_oTemplate->parseHtmlByName($this->_sTemplateWrapper, array(
  117. 'class' => $oMenuSubmenu->getTemplateId() == BX_MENU_TEMPLATE_SUBMENU_MORE_AUTO ? 'bx-menu-more-auto' : '',
  118. 'code' => $sCode
  119. ));
  120. }
  121. public function getPageCoverParams ()
  122. {
  123. $aMenuItemSelected = $this->getSelectedMenuItem ();
  124. if (!$aMenuItemSelected)
  125. return '';
  126. // (isset($aMenuItemSelected['set_name']) && 'sys_site' == $aMenuItemSelected['set_name'] && 'home' == $aMenuItemSelected['name']) - homepage detection
  127. $oMenuActions = BxDolMenu::getObjectInstance($this->_sObjectActionsMenu);
  128. $bImage = strpos($aMenuItemSelected['icon'], '.') !== false;
  129. $aVars = array (
  130. 'object' => $this->_sObject,
  131. 'title' => bx_process_output($aMenuItemSelected['title']),
  132. 'link' => BxDolPermalinks::getInstance()->permalink($aMenuItemSelected['link']),
  133. 'actions' => $oMenuActions ? $oMenuActions->getCode() : '',
  134. 'bx_if:image' => array (
  135. 'condition' => $bImage,
  136. 'content' => array('icon_url' => $aMenuItemSelected['icon']),
  137. ),
  138. 'bx_if:icon' => array (
  139. 'condition' => !$bImage && !empty($aMenuItemSelected['icon']),
  140. 'content' => array('icon' => $aMenuItemSelected['icon']),
  141. ),
  142. );
  143. // if (!$this->_sObjectSubmenu && !$this->_mixedMainMenuItemSelected && $aMenuItemSelected['submenu_object'])
  144. // $this->_sObjectSubmenu = $aMenuItemSelected['submenu_object'];
  145. return $aVars;
  146. }
  147. public function getSelectedMenuItem ()
  148. {
  149. if (is_array($this->_mixedMainMenuItemSelected))
  150. return $this->_mixedMainMenuItemSelected;
  151. if (!isset($this->_aObject['menu_items']))
  152. $this->_aObject['menu_items'] = $this->_oQuery->getMenuItems();
  153. foreach ($this->_aObject['menu_items'] as $a) {
  154. if (isset($a['active']) && !$a['active'])
  155. continue;
  156. if (isset($a['visible_for_levels']) && !$this->_isVisible($a))
  157. continue;
  158. $isSelected = false;
  159. if ($this->_mixedMainMenuItemSelected)
  160. $isSelected = $this->_mixedMainMenuItemSelected == $a['name'];
  161. else
  162. $isSelected = $this->_isSelected($a) || ($this->_sObjectSubmenu && $this->_sObjectSubmenu == $a['submenu_object']);
  163. if (!$isSelected)
  164. continue;
  165. $a = $this->_replaceMarkers($a);
  166. $a['title'] = _t($a['title']);
  167. return $a;
  168. }
  169. return false;
  170. }
  171. }
  172. /** @} */