PageRenderTime 39ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/exmenu/view/menuview.class.php

https://bitbucket.org/dgough/annamaria-daneswood-25102012
PHP | 289 lines | 215 code | 36 blank | 38 comment | 42 complexity | dac576ab162f7a7e2da821890802898b MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /**
  3. * @version 1.0.3
  4. * @author Daniel Ecer
  5. * @package exmenu_1.0.3
  6. * @copyright (C) 2005-2006 Daniel Ecer (de.siteof.de)
  7. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
  8. */
  9. // no direct access
  10. if (!defined('EXTENDED_MENU_HOME')) {
  11. die('Restricted access');
  12. }
  13. /**
  14. * Abstract class for all menu nodes.
  15. */
  16. class AbstractExtendedMenuView {
  17. var $classSuffix;
  18. var $idSuffix;
  19. var $maxDepth = 10;
  20. var $openActiveOnly = TRUE;
  21. var $menuLevel = 0;
  22. var $activeMenuClassLink = FALSE;
  23. var $activeMenuClassContainer = FALSE;
  24. var $titleAttribute = FALSE;
  25. var $hierarchyBasedIds = FALSE;
  26. var $sublevelClasses = FALSE;
  27. var $mainlevelClasses = FALSE;
  28. var $callGetItemid = TRUE;
  29. var $menuHierarchy = array();
  30. var $imageEnabled = FALSE;
  31. var $imageAlignment = '';
  32. var $lastLinkBegin = '';
  33. var $lastLinkEnd = '';
  34. var $addUrlItemidMode = 'local';
  35. var $params;
  36. function getExtractedAttribute($html, $attributeName) {
  37. $s = $attributeName.'="';
  38. $i = strpos($html, $s);
  39. if ($i !== FALSE) {
  40. $i += strlen($s);
  41. $j = strpos($html, '"', $i);
  42. if ($j !== FALSE) {
  43. return substr($html, $i, $j - $i);
  44. }
  45. }
  46. return '';
  47. }
  48. function getExtractedHref($html) {
  49. return $this->getExtractedAttribute($html, 'href');
  50. }
  51. function getExtractedOnClick($html) {
  52. return $this->getExtractedAttribute($html, 'onclick');
  53. }
  54. function getExtractedTarget($html) {
  55. return $this->getExtractedAttribute($html, 'target');
  56. }
  57. function getHierarchyString($hierarchy) {
  58. $result = implode('_', $hierarchy);
  59. if ($result == '') {
  60. $result = 'root';
  61. }
  62. return $result;
  63. }
  64. /**
  65. * @since version 0.3.0
  66. */
  67. function getMenuClassName(&$menuNode, $level = 0, $activeMenuClass = FALSE) {
  68. if ($level > 0) {
  69. $menuClass = 'sublevel';
  70. } else {
  71. $menuClass = 'mainlevel';
  72. }
  73. if (($activeMenuClass) && ($menuNode->isActive())) {
  74. if ($menuNode->isCurrent()) {
  75. $menuClass .= '_current';
  76. } else {
  77. $menuClass .= '_active';
  78. }
  79. }
  80. $menuClass .= $this->classSuffix;
  81. return $menuClass;
  82. }
  83. /**
  84. * @since version 0.3.0
  85. */
  86. function getLinkMenuClassName(&$menuNode, $level = 0) {
  87. return $this->getMenuClassName($menuNode, $level, $this->activeMenuClassLink);
  88. }
  89. /**
  90. * @since version 0.3.0
  91. */
  92. function getContainerMenuClassName(&$menuNode, $level = 0) {
  93. return $this->getMenuClassName($menuNode, $level, $this->activeMenuClassContainer);
  94. }
  95. function getMenuLink(&$menuNode, $level = 0, $itemHierarchy = NULL) {
  96. if (!is_array($itemHierarchy)) {
  97. $itemHierarchy = array();
  98. }
  99. return trim($this->mosGetMenuLink($menuNode, $level, $this->params, $itemHierarchy));
  100. }
  101. function hasItemid($url) {
  102. return (strpos($url, '&Itemid=') !== FALSE) || (strpos($url, '?Itemid=') !== FALSE);
  103. }
  104. function addItemid($url, $Itemid) {
  105. if (($Itemid) && (!$this->hasItemid($url))) {
  106. $url .= (strpos($url, '?') === FALSE ? '?' : '&').'Itemid='. $Itemid;
  107. }
  108. return $url;
  109. }
  110. /**
  111. * Utility function for writing a menu link
  112. * (modification of the original menu module mosGetMenuLink function)
  113. */
  114. function mosGetMenuLink( $mitem, $level=0, &$params, $itemHierarchy ) {
  115. global $Itemid, $mosConfig_live_site, $mainframe;
  116. // alias to use a prefered name without having to change all reference
  117. $menuNode =& $mitem;
  118. $txt = '';
  119. switch ($mitem->type) {
  120. case 'separator':
  121. $mitem->browserNav = 3;
  122. break;
  123. case 'component_item_link':
  124. break;
  125. case 'content_item_link':
  126. if (!$this->hasItemid($menuNode->link)) {
  127. $temp = split('&task=view&id=', $menuNode->link);
  128. if (($this->callGetItemid) || ($menuNode->id === FALSE)) {
  129. if ($menuNode->id !== FALSE) {
  130. $_Itemid = $Itemid;
  131. $Itemid = $mitem->id; // getItemid uses the global variable as a default value... use the id of the menu item instead
  132. $id = $mainframe->getItemid($temp[1]);
  133. $Itemid = $_Itemid;
  134. } else {
  135. $id = $mainframe->getItemid($temp[1]);
  136. }
  137. } else {
  138. $id = $mitem->id;
  139. }
  140. if ($id > 0) {
  141. $menuNode->link .= '&Itemid='.$id;
  142. }
  143. }
  144. break;
  145. case 'url':
  146. switch($this->addUrlItemidMode) {
  147. case 'local':
  148. if ((strpos(strtolower($menuNode->link), 'index.php?') !== FALSE) &&
  149. (($mosConfig_live_site == '') || (strpos($menuNode->link, ':') === FALSE) || (strpos($menuNode->link, $mosConfig_live_site) === 0))) {
  150. $menuNode->link = $this->addItemid($menuNode->link, $menuNode->id);
  151. }
  152. break;
  153. case 'default':
  154. default:
  155. if (strpos(strtolower($menuNode->link), 'index.php?') !== FALSE) {
  156. $menuNode->link = $this->addItemid($menuNode->link, $menuNode->id);
  157. }
  158. }
  159. break;
  160. case 'content_typed':
  161. default:
  162. $menuNode->link = $this->addItemid($menuNode->link, $menuNode->id);
  163. break;
  164. }
  165. // Active Menu highlighting
  166. // why reading the request parameter when there is a global variable?
  167. // $current_itemid = trim( mosGetParam( $_REQUEST, 'Itemid', 0 ) );
  168. $title = strip_tags($menuNode->name);
  169. // use a more meaningful name than "id": elementParameters
  170. $elementParameters = '';
  171. if (($this->hierarchyBasedIds) && (count($itemHierarchy) > 0)) {
  172. $elementParameters .= ' id="menulink_'.$this->getHierarchyString($itemHierarchy).$this->idSuffix.'"';
  173. } else if ($menuNode->isCurrent()) {
  174. $elementParameters .= ' id="active_menu'.$this->idSuffix.'"';
  175. }
  176. if ((isset($menuNode->accessKey)) && ($menuNode->accessKey != '')) {
  177. $elementParameters .= ' accesskey="'.$menuNode->accessKey.'"';
  178. $title .= ' ['.strtoupper($menuNode->accessKey).']';
  179. }
  180. if ($this->titleAttribute) {
  181. $elementParameters .= ' title="'.$title.'"';
  182. }
  183. $mitem->link = ampReplace( $mitem->link );
  184. if ( strcasecmp( substr( $mitem->link,0,4 ), 'http' ) ) {
  185. $mitem->link = sefRelToAbs( $mitem->link );
  186. }
  187. $menuclass = $this->getLinkMenuClassName($menuNode, $level);
  188. $linkBegin = '';
  189. $linkText = $mitem->name;
  190. $linkEnd = '';
  191. switch ($mitem->browserNav) {
  192. // cases are slightly different
  193. case 1:
  194. // open in a new window
  195. $linkBegin = '<a href="'. $mitem->link .'" target="_blank" class="'. $menuclass .'"'. $elementParameters .'>';
  196. $linkEnd = '</a>';
  197. // $txt = '<a href="'. $mitem->link .'" target="_blank" class="'. $menuclass .'"'. $elementParameters .'>'. $mitem->name .'</a>';
  198. break;
  199. case 2:
  200. // open in a popup window
  201. $linkBegin = "<a href=\"#\" onclick=\"javascript: window.open('". $mitem->link ."', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550'); return false\" class=\"$menuclass\"". $elementParameters .">";
  202. $linkEnd = "</a>\n";
  203. // $txt = "<a href=\"#\" onclick=\"javascript: window.open('". $mitem->link ."', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550'); return false\" class=\"$menuclass\"". $elementParameters .">". $mitem->name ."</a>\n";
  204. break;
  205. case 3:
  206. // don't link it
  207. $linkBegin = '<span class="'. $menuclass .'"'. $elementParameters .'>';
  208. $linkText = ($mitem->name != '' ? $mitem->name : '&nbsp;');
  209. $linkEnd = '</span>';
  210. // $txt = '<span class="'. $menuclass .'"'. $elementParameters .'>'. ($mitem->name != '' ? $mitem->name : '&nbsp;') .'</span>';
  211. break;
  212. default: // formerly case 2
  213. // open in parent window
  214. $linkBegin = '<a href="'. $mitem->link .'" class="'. $menuclass .'"'. $elementParameters .'>';
  215. $linkEnd = '</a>';
  216. // $txt = '<a href="'. $mitem->link .'" class="'. $menuclass .'"'. $elementParameters .'>'. $mitem->name .'</a>';
  217. break;
  218. }
  219. $txt = $linkBegin.$linkText.$linkEnd;
  220. if ($this->imageEnabled) {
  221. $menu_params = new stdClass();
  222. $menu_params =& new mosParameters( $mitem->params );
  223. $menu_image = $menu_params->def('menu_image', -1);
  224. if ( ( $menu_image <> '-1' ) && $menu_image ) {
  225. $image = '<img src="'. $mosConfig_live_site .'/images/stories/'. $menu_image .'" border="0" alt="'. $mitem->name .'"/>';
  226. switch($this->imageAlignment) {
  227. case 'image_only': // does not really make sense
  228. $txt = $image;
  229. break;
  230. case 'image_only_linked':
  231. $txt = $linkBegin.$image.$linkEnd;
  232. break;
  233. case 'right':
  234. $txt = $txt.' '.$image;
  235. break;
  236. case 'right_linked':
  237. $txt = $linkBegin.$linkText.' '.$image.$linkEnd;
  238. break;
  239. case 'left_linked':
  240. $txt = $linkBegin.$image.' '.$linkText.$linkEnd;
  241. break;
  242. case 'left':
  243. default:
  244. $txt = $image.' '.$txt;
  245. }
  246. }
  247. }
  248. $this->lastLinkBegin = $linkBegin;
  249. $this->lastLinkEnd = $linkEnd;
  250. return $txt;
  251. }
  252. }
  253. ?>