/system/classes/menu.php

https://gitlab.com/srueegger/1zu12bB · PHP · 251 lines · 157 code · 13 blank · 81 comment · 15 complexity · ff817d76813e58397a3824bb13b8f512 MD5 · raw file

  1. <?PHP
  2. class Menu{
  3. /**
  4. *
  5. * @param int $id
  6. * @param string $globalstart
  7. * @param string $globalend
  8. * @param string $elementstart
  9. * @param string $elementend
  10. * @param string $class
  11. */
  12. static function display($id, $globalstart,$globalend, $elementstart,$elementend,$class){
  13. echo self::getCode($id, $globalstart,$globalend, $elementstart,$elementend,$class);
  14. }
  15. /**
  16. *
  17. * @param int $id
  18. * @param string $globalstart
  19. * @param string $globalend
  20. * @param string $elementstart
  21. * @param string $elementend
  22. * @param string $class
  23. * @return string
  24. */
  25. static function getCode($id, $globalstart,$globalend, $elementstart,$elementend,$class){
  26. $res = "";
  27. if(SessionCache::contains("menu", $id."_".$globalstart."_".$globalend."_".$elementstart."_".$elementend."_".$class)){
  28. $res = SessionCache::getData("menu", $id."_".$globalstart."_".$globalend."_".$elementstart."_".$elementend."_".$class);
  29. }
  30. else{
  31. $res = $globalstart;
  32. $entries = self::getEntries($id);
  33. $i = 1;
  34. if($entries){
  35. foreach($entries as $entry){
  36. $res .= $entry->getCode($globalstart,$globalend, $elementstart,$elementend,$class,$i);
  37. $i++;
  38. }
  39. }
  40. $res .= $globalend;
  41. SessionCache::setData("menu", $id."_".$globalstart."_".$globalend."_".$elementstart."_".$elementend."_".$class, $res);
  42. }
  43. return $res;
  44. }
  45. /**
  46. *
  47. * @param string $name
  48. * @return int
  49. */
  50. function getIdByName($name){
  51. $name = DataBase::Current()->EscapeString(strtolower(trim($name)));
  52. return DataBase::Current()->ReadField("SELECT id FROM {'dbprefix'}menu_names WHERE lower(trim(name)) = '".$name."' LIMIT 0,1");;
  53. }
  54. /**
  55. *
  56. * @param int $id
  57. * @return string
  58. */
  59. public static function getEditableCode($id){
  60. $res = "";
  61. $entries = self::getEntries($id);
  62. if($entries){
  63. $actions = ActionList::get("menuedit");
  64. foreach($entries as $entry){
  65. $res .= $entry->getEditableCode($actions);
  66. }
  67. }
  68. return $res;
  69. }
  70. /**
  71. *
  72. * @param int $id
  73. */
  74. function displayEditable($id){
  75. echo $this->getEdiableCode($id);
  76. }
  77. /**
  78. *
  79. * @param int $menu
  80. * @param string $title
  81. * @param string $href
  82. * @return boolean
  83. */
  84. function addEntry($menu,$title,$href){
  85. $menu = DataBase::Current()->EscapeString($menu);
  86. $maxID = DataBase::Current()->ReadField("SELECT MAX(id) FROM {'dbprefix'}menu
  87. WHERE menuID = '".$menu."'");
  88. $id = $maxID + 1;
  89. $res = DataBase::Current()->Execute("INSERT INTO {'dbprefix'}menu (id,menuID,title,href)
  90. VALUES('".$id."','".$menu."',
  91. '".$title."','".$href."')");
  92. if($res){
  93. $args['menu'] = $menu;
  94. $args['title'] = $title;
  95. $args['href'] = $href;
  96. $args['id'] = $id;
  97. EventManager::RaiseEvent("menu_entry_added",$args);
  98. }
  99. SessionCache::clear();
  100. return $res;
  101. }
  102. /**
  103. *
  104. * @param int $menu
  105. * @param int $id
  106. * @param string $title
  107. * @param string $href
  108. * @return boolean
  109. */
  110. function editEntry($menu,$id,$title,$href){
  111. $menu = Database::Current()->EscapeString($menu);
  112. $id = Database::Current()->EscapeString($id);
  113. $title = Database::Current()->EscapeString($title);
  114. $href = Database::Current()->EscapeString($href);
  115. $res = DataBase::Current()->Execute("UPDATE {'dbprefix'}menu SET
  116. href = '".$href."',
  117. title = '".$title."'
  118. WHERE id = '".$id."'
  119. AND menuID = '".$menu."'");
  120. if($res){
  121. $args['menu'] = $menu;
  122. $args['title'] = $title;
  123. $args['href'] = $href;
  124. $args['id'] = $href;
  125. EventManager::RaiseEvent("menu_entry_edit",$args);
  126. }
  127. SessionCache::clear();
  128. return $res;
  129. }
  130. /**
  131. *
  132. * @param int $menu
  133. * @param int $id
  134. * @return boolean
  135. */
  136. public static function deleteEntry($menu,$id){
  137. $menu = DataBase::Current()->EscapeString($menu);
  138. $id = Database::Current()->EscapeString($id);
  139. $res = DataBase::Current()->Execute("DELETE FROM {'dbprefix'}menu WHERE menuID = '".$menu."' AND id = '".$id."'");
  140. if($res){
  141. $res = DataBase::Current()->Execute("UPDATE {'dbprefix'}menu SET id = id - 1 WHERE menuID = '".$menu."' AND id > ".$id."");
  142. if($res){
  143. $args['menu'] = $menu;
  144. $args['id'] = $id;
  145. EventManager::RaiseEvent("menu_entry_deleted",$args);
  146. }
  147. }
  148. SessionCache::clear();
  149. return $res;
  150. }
  151. /**
  152. *
  153. * @param string $name
  154. * @param string $dir
  155. * @return boolean
  156. */
  157. public static function create($name,$dir = ""){
  158. $name = DataBase::Current()->EscapeString($name);
  159. $dir = DataBase::Current()->EscapeString($dir);
  160. $res = DataBase::Current()->Execute("INSERT INTO {'dbprefix'}menu_names (name, dir) VALUES ('".$name."', '".$dir."')");
  161. if($res){
  162. $args['name'] = $name;
  163. EventManager::RaiseEvent("menu_created",$args);
  164. }
  165. SessionCache::clear();
  166. Cache::clear("menu");
  167. return DataBase::Current()->InsertID();
  168. }
  169. /**
  170. *
  171. * @param int $id
  172. * @return string
  173. */
  174. static function delete($id){
  175. $id = DataBase::Current()->EscapeString($id);
  176. $res = DataBase::Current()->Execute("DELETE FROM {'dbprefix'}menu_names WHERE id = '".$id."'");
  177. if($res){
  178. $res = DataBase::Current()->Execute("DELETE FROM {'dbprefix'}menu WHERE menuID = '".$id."'");
  179. if($res){
  180. $args['id'] = $id;
  181. EventManager::RaiseEvent("menu_deleted",$args);
  182. }
  183. }
  184. Cache::clear();
  185. SessionCache::clear();
  186. return $res;
  187. }
  188. /**
  189. *
  190. * @param int $id
  191. * @return MenuEntry
  192. */
  193. static function getEntries($id){
  194. $res = null;
  195. $id = DataBase::Current()->EscapeString($id);
  196. $rows = DataBase::Current()->ReadRows("SELECT * FROM {'dbprefix'}menu WHERE menuID = '".$id."' ORDER BY id");
  197. if($rows){
  198. foreach($rows as $row){
  199. $entry = new MenuEntry();
  200. $entry->id = $row->id;
  201. $entry->type = $row->type;
  202. $entry->href = $row->href;
  203. $entry->title = $row->title;
  204. $entry->menu = $id;
  205. $res[] = $entry;
  206. }
  207. }
  208. return $res;
  209. }
  210. /**
  211. *
  212. * @param int $menu
  213. * @return int
  214. */
  215. public static function countEntries($menu){
  216. $menu = DataBase::Current()->EscapeString($menu);
  217. return DataBase::Current()->ReadField("SELECT COUNT(*) FROM {'dbprefix'}menu WHERE menuID = '".$menu."'");
  218. }
  219. /**
  220. *
  221. * @param int $menu
  222. * @param string $item1
  223. * @param string $item2
  224. */
  225. public static function changePositions($menu, $item1, $item2){
  226. $entries = self::countEntries($menu);
  227. if($item1 > 0 && $item2 > 0 && $item1 < $entries + 1 && $item2 < $entries + 1){
  228. $item1 = DataBase::Current()->EscapeString($item1);
  229. $item2 = DataBase::Current()->EscapeString($item2);
  230. $menu = DataBase::Current()->EscapeString($menu);
  231. DataBase::Current()->Execute("UPDATE {'dbprefix'}menu SET id = -1 WHERE menuID = '".$menu."' AND id = ".$item1);
  232. DataBase::Current()->Execute("UPDATE {'dbprefix'}menu SET id = ".$item1." WHERE menuID = '".$menu."' AND id = ".$item2);
  233. DataBase::Current()->Execute("UPDATE {'dbprefix'}menu SET id = ".$item2." WHERE menuID = '".$menu."' AND id = -1");
  234. SessionCache::clear();
  235. }
  236. }
  237. }
  238. ?>