/iCagenda/admin/utilities/menus/menus.php

https://gitlab.com/Alzakath/icagenda · PHP · 286 lines · 191 code · 33 blank · 62 comment · 32 complexity · 43c857c38a8376737faac06edf362be3 MD5 · raw file

  1. <?php
  2. /**
  3. *------------------------------------------------------------------------------
  4. * iCagenda v3 by Jooml!C - Events Management Extension for Joomla! 2.5 / 3.x
  5. *------------------------------------------------------------------------------
  6. * @package iCagenda
  7. * @subpackage utilities
  8. * @copyright Copyright (c)2014-2015 Cyril Rezé, Jooml!C - All rights reserved
  9. *
  10. * @license GNU General Public License version 3 or later; see LICENSE.txt
  11. * @author Cyril Rezé (Lyr!C)
  12. * @link http://www.joomlic.com
  13. *
  14. * @version 3.5.9 2015-07-22
  15. * @since 3.4.0
  16. *------------------------------------------------------------------------------
  17. */
  18. // No direct access to this file
  19. defined('_JEXEC') or die();
  20. /**
  21. * class icagendaCategories
  22. */
  23. class icagendaMenus
  24. {
  25. /**
  26. * Function to return all published 'List of Events' menu items
  27. *
  28. * @access public static
  29. * @param none
  30. * @return array of menu item info this way : Itemid-mcatid-lang
  31. *
  32. * @since 3.4.0
  33. */
  34. static public function iClistMenuItemsInfo()
  35. {
  36. $app = JFactory::getApplication();
  37. $params = $app->getParams();
  38. // List all menu items linking to list of events
  39. $db = JFactory::getDbo();
  40. $query = $db->getQuery(true);
  41. $query->select('m.title, m.published, m.id, m.params, m.language')
  42. ->from('`#__menu` AS m')
  43. ->where( "(m.link = 'index.php?option=com_icagenda&view=list') AND (m.published = 1)" );
  44. if (JLanguageMultilang::isEnabled())
  45. {
  46. $query->where('m.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')');
  47. }
  48. $db->setQuery($query);
  49. $link = $db->loadObjectList();
  50. $iC_list_menus = array();
  51. foreach ($link as $iClistMenu)
  52. {
  53. $menuitemid = $iClistMenu->id;
  54. // $menulang = $iClistMenu->language;
  55. if ($menuitemid)
  56. {
  57. $menu = $app->getMenu();
  58. $menuparams = $menu->getParams($menuitemid);
  59. }
  60. $mcatid = $menuparams->get('mcatid');
  61. $menufilter = $menuparams->get('time') ? $menuparams->get('time') : $params->get('time', '0');
  62. if (is_array($mcatid))
  63. {
  64. $mcatid = implode(',', $mcatid);
  65. }
  66. // array_push($iC_list_menus, $menuitemid . '_' . $mcatid . '_' . $menulang . '_' . $menufilter);
  67. array_push($iC_list_menus, $menuitemid . '_' . $mcatid . '_' . $menufilter);
  68. }
  69. return $iC_list_menus;
  70. }
  71. /**
  72. * Function to return all published 'List of Events' menu items
  73. *
  74. * @access public static
  75. * @param none
  76. * @return array of menu item info this way : Itemid-mcatid-lang
  77. *
  78. * @since 3.4.0
  79. */
  80. static public function iClistMenuItems()
  81. {
  82. $app = JFactory::getApplication();
  83. // List all menu items linking to list of events
  84. $db = JFactory::getDbo();
  85. $query = $db->getQuery(true);
  86. $query->select('m.title, m.published, m.id, m.params, m.language')
  87. ->from('`#__menu` AS m')
  88. ->where( "(m.link = 'index.php?option=com_icagenda&view=list') AND (m.published = 1)" );
  89. if (JLanguageMultilang::isEnabled())
  90. {
  91. $query->where('m.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')');
  92. }
  93. $query->order('m.id ASC');
  94. $db->setQuery($query);
  95. $iC_list_menu_items = $db->loadObjectList();
  96. if ($iC_list_menu_items)
  97. {
  98. return $iC_list_menu_items;
  99. }
  100. else
  101. {
  102. return array();
  103. }
  104. }
  105. /**
  106. * Function to return menu Itemid to display an event
  107. *
  108. * @access public static
  109. * @return menu Itemid
  110. *
  111. * @since 3.5.7
  112. */
  113. static public function thisEventItemid($date, $category)
  114. {
  115. $iC_list_menus = self::iClistMenuItemsInfo();
  116. $datetime_today = JHtml::date('now', 'Y-m-d H:i');
  117. $date_today = JHtml::date('now', 'Y-m-d');
  118. // set menu link for each event (itemID) depending of category and/or language
  119. $onecat = $multicat = '0';
  120. $link_one = $link_multi = '';
  121. $menu_IDs_category = array();
  122. $menu_IDs_all = array();
  123. $itemID_is_set = 0;
  124. foreach ($iC_list_menus AS $iCm)
  125. {
  126. $value = explode('_', $iCm);
  127. $iCmenu_id = $value['0'];
  128. $iCmenu_mcatid = $value['1'];
  129. $iCmenu_filter = $value['2'];
  130. $iCmenu_mcatid_array = ! is_array($iCmenu_mcatid) ? explode(',', $iCmenu_mcatid) : array();
  131. // Menu can display past events
  132. if ($iCmenu_filter == 2
  133. && strtotime($date) < strtotime($datetime_today)
  134. && ! $itemID_is_set)
  135. {
  136. // If menu category filter is set, and item category is in filtered categories
  137. if (in_array($category, $iCmenu_mcatid_array))
  138. {
  139. $menu_IDs_category[] = $iCmenu_id;
  140. $itemID_is_set = $itemID_is_set + 1;
  141. }
  142. elseif ( ! $iCmenu_mcatid)
  143. {
  144. $menu_IDs_all[] = $iCmenu_id;
  145. }
  146. }
  147. // Menu can display today's events
  148. elseif ($iCmenu_filter == 4
  149. && strtotime($date) > strtotime($date_today)
  150. && strtotime($date) < strtotime("+1 DAY", strtotime($date_today))
  151. && ! $itemID_is_set)
  152. {
  153. // If menu category filter is set, and item category is in filtered categories
  154. if (in_array($category, $iCmenu_mcatid_array))
  155. {
  156. $menu_IDs_category[] = $iCmenu_id;
  157. $itemID_is_set = $itemID_is_set + 1;
  158. }
  159. elseif ( ! $iCmenu_mcatid)
  160. {
  161. $menu_IDs_all[] = $iCmenu_id;
  162. }
  163. }
  164. // Menu can display today's events and upcoming events
  165. elseif ($iCmenu_filter == 1
  166. && strtotime($date) > strtotime($date_today)
  167. && ! $itemID_is_set)
  168. {
  169. // If menu category filter is set, and item category is in filtered categories
  170. if (in_array($category, $iCmenu_mcatid_array))
  171. {
  172. $menu_IDs_category[] = $iCmenu_id;
  173. $itemID_is_set = $itemID_is_set + 1;
  174. }
  175. elseif ( ! $iCmenu_mcatid)
  176. {
  177. $menu_IDs_all[] = $iCmenu_id;
  178. }
  179. }
  180. // Menu can display upcoming events
  181. elseif ($iCmenu_filter == 3
  182. && strtotime($date) > strtotime($datetime_today)
  183. && ! $itemID_is_set)
  184. {
  185. // If menu category filter is set, and item category is in filtered categories
  186. if (in_array($category, $iCmenu_mcatid_array))
  187. {
  188. $menu_IDs_category[] = $iCmenu_id;
  189. $itemID_is_set = $itemID_is_set + 1;
  190. }
  191. elseif ( ! $iCmenu_mcatid)
  192. {
  193. $menu_IDs_all[] = $iCmenu_id;
  194. }
  195. }
  196. // Menu can display all events
  197. elseif ($iCmenu_filter == '0'
  198. && ! $itemID_is_set)
  199. {
  200. // If menu category filter is set, and item category is in filtered categories
  201. if (in_array($category, $iCmenu_mcatid_array))
  202. {
  203. $menu_IDs_category[] = $iCmenu_id;
  204. $itemID_is_set = $itemID_is_set + 1;
  205. }
  206. elseif ( ! $iCmenu_mcatid)
  207. {
  208. $menu_IDs_all[] = $iCmenu_id;
  209. }
  210. }
  211. if ($iCmenu_mcatid)
  212. {
  213. $nb_cat_filter = count($iCmenu_mcatid_array);
  214. for ($i = $category; in_array($i, $iCmenu_mcatid_array); $i++)
  215. {
  216. if ($nb_cat_filter == 1)
  217. {
  218. $link_one = $iCmenu_id;
  219. }
  220. elseif ($nb_cat_filter > 1)
  221. {
  222. $link_multi = $iCmenu_id;
  223. }
  224. }
  225. }
  226. }
  227. if (count($menu_IDs_category))
  228. {
  229. if ($link_one)
  230. {
  231. $linkid = $link_one;
  232. }
  233. elseif ($link_multi)
  234. {
  235. $linkid = $link_multi;
  236. }
  237. else
  238. {
  239. $linkid = $menu_IDs_category[0];
  240. }
  241. }
  242. elseif (count($menu_IDs_all))
  243. {
  244. $linkid = $menu_IDs_all[0];
  245. }
  246. else
  247. {
  248. // $linkid = '#';
  249. $linkid = null;
  250. }
  251. return $linkid;
  252. }
  253. }