MainMenu.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. <?php
  2. /*
  3. * Incluir en cada página para pintar el menú. Se necesita conexión de base de datos.
  4. * * @author Alejandro
  5. */
  6. class MainMenu {
  7. //put your code here
  8. private $usr, $selected, $pdo, $xtpl, $sistema, $titulo, $hasError, $error;
  9. private $menuEstatico = array();
  10. /**
  11. * @param int $usr_id Id del usuario actual
  12. * @param int $menu_selected Id del menú seleccionado
  13. * @param PDO $this->pdo Conexión de base de datos
  14. */
  15. function __construct($usr_id, $menu_selected, $pdo, $sistema, $titulo=""){
  16. $this->selected = $menu_selected;
  17. $this->usr = $usr_id;
  18. $this->pdo = $pdo;
  19. $this->sistema = $sistema;
  20. $this->titulo = trim($titulo);
  21. }
  22. //Agrega menú estático
  23. public function agregaMenu($texto, $link, $icono =""){
  24. $this->menuEstatico[] = array("nombre"=>$texto, "link"=>$link, "icono"=>$icono);
  25. }
  26. private function creaMenu($id, $nombre, $icono){
  27. $this->xtpl->assign("MENU_ID", $id);
  28. $this->xtpl->assign("MENU_NOMBRE", $nombre);
  29. if($icono != ""){
  30. $this->xtpl->assign("MENU_ICONO", $icono);
  31. $this->xtpl->parse("main.sidebar.menus.menu.icono");
  32. }
  33. if($this->selected == $id){
  34. $this->xtpl->parse("main.sidebar.menus.menu.activo");
  35. $this->xtpl->parse("main.sidebar.menus.menu.show");
  36. if($this->titulo == "")
  37. $this->xtpl->assign("TITULO", $nombre);
  38. }else{
  39. $this->xtpl->parse("main.sidebar.menus.menu.inactivo");
  40. $this->xtpl->parse("main.sidebar.menus.menu.collapsed");
  41. }
  42. }
  43. public function printMenu(){
  44. if(!is_null($this->sistema)){
  45. require_once("../include/xTemplate/xtemplate.class.php");
  46. $this->xtpl = new XTemplate('../tpl/main_menu.tpl.html');
  47. }else{
  48. require_once("./include/xTemplate/xtemplate.class.php");
  49. $this->xtpl = new XTemplate('./tpl/main_menu.tpl.html');
  50. }
  51. //$this->xtpl->assign("LOGO_LINK", "main.php");
  52. $rutaLogo = "/img/logo_lasalle.png";
  53. //$rutaLogo = '/img/60_logo.svg'; //logo60
  54. $this->xtpl->assign("LOGO_IMG", $rutaLogo);
  55. $stmt = $this->pdo->prepare('Select * from fs_sistemausuarioacceso(:usr)');
  56. $stmt->bindParam(":usr", $this->usr);
  57. if(!$stmt->execute()){
  58. echo "Error al imprimir los menus";
  59. print_r($stmt->errorInfo());
  60. exit();
  61. }
  62. $sistemasArr = $stmt->fetchAll();
  63. $stmt->closeCursor();
  64. $stmt = null;
  65. if(!is_null($this->sistema)){//Hay sistema
  66. $rutaLogo = "..".$rutaLogo;
  67. $this->xtpl->assign("LOGO_IMG", $rutaLogo);
  68. if(count($sistemasArr) > 1 || $_SESSION["sgi_administrador"]){
  69. $this->xtpl->assign("LINK", "../main.php");
  70. $this->xtpl->assign("TEXTO", "Inicio");
  71. $this->xtpl->assign("ICONO", "");
  72. $this->xtpl->parse("main.sistemas.list.link");
  73. $this->xtpl->parse("main.sistemas.list");
  74. $this->xtpl->parse("main.sidebar.sistemas.link");
  75. foreach($sistemasArr as $sistema){
  76. if(trim($sistema["Sistema_pagina"]) != ""){
  77. $pag = dirname($_SERVER['PHP_SELF']);
  78. if(!is_null($this->sistema)){
  79. $pag = dirname($pag);
  80. }
  81. $pag .= $sistema["Sistema_pagina"];
  82. $this->xtpl->assign("SISTEMA_LINK", $pag);
  83. $this->xtpl->assign("SISTEMA_NOMBRE", $sistema["Sistema_nombre"]);
  84. if(intval($sistema["Sistema_id"]) == intval($this->sistema)){
  85. $this->xtpl->parse("main.sidebar.sistemas.sistema.active");
  86. $this->xtpl->parse("main.sistemas.list.sistema.active");
  87. }
  88. $this->xtpl->parse("main.sidebar.sistemas.sistema");
  89. $this->xtpl->parse("main.sistemas.list.sistema");
  90. }
  91. }
  92. }
  93. $this->xtpl->assign("SALIR", "../salir.php");
  94. $this->xtpl->parse("main.sistemas.list");
  95. $this->xtpl->parse("main.sistemas");
  96. $this->xtpl->parse("main.sidebar.sistemas");
  97. $stmt = $this->pdo->prepare('SELECT * FROM fs_menuspagina (:usr, :sist)');
  98. $stmt->bindParam(":sist", $this->sistema);
  99. $stmt->bindParam(":usr", $this->usr);
  100. if(!$stmt->execute()){
  101. echo "Error al imprimir el submenú";
  102. print_r($stmt->errorInfo());
  103. exit();
  104. }
  105. $menuArr = $stmt->fetchAll();
  106. $stmt->closeCursor();
  107. $stmt = null;
  108. //Inicio por default
  109. $this->xtpl->assign("MENU_ID", 1);
  110. $this->xtpl->assign("MENU_LINK", "main.php");
  111. $this->xtpl->assign("MENU_NOMBRE", "Inicio");
  112. $this->xtpl->assign("MENU_ICONO", "ing-home");
  113. $this->xtpl->parse("main.sidebar.menus.menu_link.icono");
  114. if($this->selected == 1){
  115. $this->xtpl->parse("main.sidebar.menus.menu_link.activo");
  116. }
  117. $this->xtpl->parse("main.sidebar.menus.menu_link");
  118. if(count($this->menuEstatico)>0){
  119. foreach($this->menuEstatico as $menu){
  120. $this->xtpl->assign("MENU_LINK", $menu["link"]);
  121. $this->xtpl->assign("MENU_NOMBRE", $menu["nombre"]);
  122. if($menu["icono"] != ""){
  123. $this->xtpl->assign("MENU_ICONO", $menu["icono"]);
  124. $this->xtpl->parse("main.sidebar.menus.menu_link.icono");
  125. }
  126. $this->xtpl->parse("main.sidebar.menus.menu_link");
  127. }
  128. }
  129. //Recorre menus
  130. $lastMenu = -1;
  131. $numMenus = 0;
  132. foreach($menuArr as $menu){
  133. if($lastMenu == -1){//Sin menú anterior
  134. $lastMenu = $menu["Menu_id"];
  135. $numMenus++;
  136. $this->creaMenu($menu["Menu_id"], $menu["Menu_desc"], $menu["Menu_icono"]);
  137. }else if($lastMenu != $menu["Menu_id"]){//Cambio de menú
  138. $this->xtpl->parse("main.sidebar.menus.menu");//guarda menu anterior
  139. $lastMenu = $menu["Menu_id"];
  140. $numMenus++;
  141. $this->creaMenu($menu["Menu_id"], $menu["Menu_desc"], $menu["Menu_icono"]);
  142. }
  143. $this->xtpl->assign("MENU_ID", $menu["Menu_id"]);
  144. $this->xtpl->assign("SUBMENU_LINK", $menu["Submenu_pag_base"]);
  145. $this->xtpl->assign("SUBMENU_NOMBRE", $menu["Submenu_desc"]);
  146. $this->xtpl->assign("SUBMENU_ICONO", $menu["Submenu_icono"]);
  147. $this->xtpl->parse("main.sidebar.menus.menu.submenu");
  148. }
  149. if(count($menuArr)>0){
  150. $this->xtpl->parse("main.sidebar.menus.menu");
  151. }
  152. $this->xtpl->parse("main.sidebar.menus");
  153. $this->xtpl->parse("main.sidebar.menus");
  154. //'Compilar' resultados
  155. $this->xtpl->parse("main.sidebar.salir");
  156. $this->xtpl->parse("main.sidebar");
  157. $this->xtpl->parse("main.menu_sidebar");
  158. //carga datos de sistema
  159. $stmt = $this->pdo->prepare('Select * from fs_sistema(:sist)');//devuelve: permiso, edicion
  160. $stmt->bindParam(":sist", $this->sistema);
  161. if(!$stmt->execute()){
  162. $this->hasError = true;
  163. $this->error = $stmt->errorInfo();
  164. }else{
  165. $rs = $stmt->fetch();
  166. $stmt->closeCursor(); // cierra conexion de resultado
  167. $stmt = null; // cierra conexion
  168. $this->xtpl->assign("SISTEMA", $rs["Sistema_nombre"]);
  169. $this->xtpl->assign("SISTEMA_NOMBRE", $rs["Sistema_desc"]);
  170. $rs = null;
  171. }
  172. $this->xtpl->parse("main.sistema_barra");
  173. }else{// ---- Sin sistema -----
  174. $this->xtpl->assign("SISTEMA_LINK", "main.php");
  175. $this->xtpl->assign("SISTEMA_NOMBRE", "Inicio");
  176. $this->xtpl->parse("main.sidebar.sistemas.sistema.active");
  177. $this->xtpl->parse("main.sistemas.sistema.active");
  178. $this->xtpl->parse("main.sidebar.sistemas.sistema");
  179. $this->xtpl->parse("main.sistemas.list.sistema");
  180. foreach($sistemasArr as $sistema){
  181. if(trim($sistema["Sistema_pagina"]) != ""){
  182. $pag = dirname($_SERVER['PHP_SELF']);
  183. if(!is_null($this->sistema)){
  184. $pag = dirname($pag);
  185. }
  186. $pag .= $sistema["Sistema_pagina"];
  187. $this->xtpl->assign("SISTEMA_LINK", $pag);
  188. $this->xtpl->assign("SISTEMA_NOMBRE", $sistema["Sistema_nombre"]);
  189. if(intval($sistema["Sistema_id"]) == intval($this->sistema)){
  190. $this->xtpl->parse("main.sidebar.sistemas.sistema.active");
  191. $this->xtpl->parse("main.sistemas.sistema.active");
  192. }
  193. $this->xtpl->parse("main.sidebar.sistemas.sistema");
  194. $this->xtpl->parse("main.sistemas.list.sistema");
  195. }
  196. }
  197. $this->xtpl->assign("SALIR", "salir.php");
  198. $this->xtpl->parse("main.sistemas.list");
  199. $this->xtpl->parse("main.sistemas");
  200. $this->xtpl->parse("main.sidebar.sistemas");
  201. //Menus superadmin
  202. if($_SESSION["sgi_administrador"]){
  203. $this->xtpl->assign("MENU_LINK", "main.php");
  204. $this->xtpl->assign("MENU_NOMBRE", "Inicio");
  205. $this->xtpl->parse("main.sidebar.menus.menu_link");
  206. if(count($this->menuEstatico)>0){
  207. foreach($this->menuEstatico as $menu){
  208. $this->xtpl->assign("MENU_LINK", $menu["link"]);
  209. $this->xtpl->assign("MENU_NOMBRE", $menu["nombre"]);
  210. if($menu["icono"] != ""){
  211. $this->xtpl->assign("MENU_ICONO", $menu["icono"]);
  212. $this->xtpl->parse("main.sidebar.menus.menu_link.icono");
  213. }
  214. $this->xtpl->parse("main.sidebar.menus.menu_link");
  215. }
  216. }
  217. //Recorre menus
  218. /*$lastMenu = -1;
  219. $numMenus = 0;
  220. //$menuArr = array(
  221. // array("Menu_id" => 1, "Menu_desc" => "Configuración", "Menu_icono" => "ing-configuracion", "Submenu_pag_base" =>"sistemas.php", "Submenu_desc" => "Sistemas"),
  222. // array("Menu_id" => 1, "Menu_desc" => "Configuración", "Menu_icono" => "ing-configuracion", "Submenu_pag_base" =>"roles.php", "Submenu_desc" => "Roles de sistema"),
  223. //);
  224. $this->selected = $menuArr[0]["Menu_id"];
  225. foreach($menuArr as $menu){
  226. if($lastMenu == -1){//Sin menú anterior
  227. $lastMenu = $menu["Menu_id"];
  228. $numMenus++;
  229. $this->creaMenu($menu["Menu_id"], $menu["Menu_desc"], $menu["Menu_icono"]);
  230. }else if($lastMenu != $menu["Menu_id"]){//Cambio de menú
  231. $this->xtpl->parse("main.sidebar.menus.menu");//guarda menu anterior
  232. $lastMenu = $menu["Menu_id"];
  233. $numMenus++;
  234. $this->creaMenu($menu["Menu_id"], $menu["Menu_desc"], $menu["Menu_icono"]);
  235. }
  236. $this->xtpl->assign("MENU_ID", $menu["Menu_id"]);
  237. $this->xtpl->assign("SUBMENU_LINK", $menu["Submenu_pag_base"]);
  238. $this->xtpl->assign("SUBMENU_NOMBRE", $menu["Submenu_desc"]);
  239. $this->xtpl->parse("main.sidebar.menus.menu.submenu");
  240. }
  241. if(count($menuArr)>0){
  242. $this->xtpl->parse("main.sidebar.menus.menu");
  243. }*/
  244. $this->xtpl->parse("main.sidebar.menus");
  245. }else{
  246. $this->xtpl->assign("MENU_LINK", "salir.php");
  247. $this->xtpl->assign("MENU_NOMBRE", "Salir");
  248. $this->xtpl->parse("main.sidebar.menus.menu_link");
  249. $this->xtpl->parse("main.sidebar.menus");
  250. }
  251. $this->xtpl->parse("main.sidebar.salir");
  252. $this->xtpl->parse("main.sidebar");
  253. $this->xtpl->parse("main.menu_sidebar");
  254. }
  255. if($this->titulo != "")
  256. $this->xtpl->assign("TITULO", $this->titulo);
  257. $this->xtpl->parse("main");
  258. $this->xtpl->out("main");
  259. }
  260. public function printHead(){
  261. require_once("./include/xTemplate/xtemplate.class.php");
  262. $this->xtpl = new XTemplate('./tpl/main_menu.tpl.html');
  263. $rutaLogo = "/img/logo_lasalle.png";
  264. //$rutaLogo = 'img/60_logo.svg'; //logo 60
  265. $this->xtpl->assign("LOGO_IMG", $rutaLogo);
  266. $this->xtpl->assign("SALIR", "salir.php");
  267. $this->xtpl->parse("main.sistemas.list");
  268. $this->xtpl->parse("main.sistemas");
  269. $this->xtpl->parse("main.sidebar.sistemas");
  270. $this->xtpl->assign("MENU_LINK", "salir.php");
  271. $this->xtpl->assign("MENU_NOMBRE", "Salir");
  272. $this->xtpl->parse("main.sidebar.menus.menu_link");
  273. $this->xtpl->parse("main.sidebar.menus");
  274. $this->xtpl->parse("main.sidebar.salir");
  275. $this->xtpl->parse("main.sidebar");
  276. $this->xtpl->parse("main.menu_sidebar");
  277. if($this->titulo != "")
  278. $this->xtpl->assign("TITULO", $this->titulo);
  279. $this->xtpl->parse("main");
  280. $this->xtpl->out("main");
  281. }
  282. public function printMenuFooter($iconos = false){
  283. if(!is_null($this->sistema)){
  284. require_once("../include/xTemplate/xtemplate.class.php");
  285. $this->xtpl = new XTemplate('../tpl/footer_menu.tpl.html');
  286. }else{
  287. require_once("./include/xTemplate/xtemplate.class.php");
  288. $this->xtpl = new XTemplate('./tpl/footer_menu.tpl.html');
  289. }
  290. //$this->xtpl->assign("LOGO_LINK", "main.php");
  291. if(!is_null($this->sistema)){
  292. $stmt = $this->pdo->prepare('SELECT * FROM fs_menuspagina (:usr, :sist)');
  293. $stmt->bindParam(":sist", $this->sistema);
  294. $stmt->bindParam(":usr", $this->usr);
  295. if(!$stmt->execute()){
  296. echo "Error al imprimir el submenú en footer";
  297. print_r($stmt->errorInfo());
  298. exit();
  299. }
  300. $menuArr = $stmt->fetchAll();
  301. $stmt->closeCursor();
  302. $stmt = null;
  303. //Inicio por default
  304. $this->xtpl->assign("MENU_ID", 1);
  305. $this->xtpl->assign("MENU_LINK", "main.php");
  306. $this->xtpl->assign("MENU_NOMBRE", "Inicio");
  307. if($iconos){
  308. $this->xtpl->assign("MENU_ICONO", "fas fa-home");
  309. $this->xtpl->parse("main.menus.menu_link.icono");
  310. }
  311. $this->xtpl->parse("main.menus.menu_link");
  312. $this->xtpl->parse("main.menus");
  313. //Recorre menus
  314. $lastMenu = -1;
  315. $numMenus = 0;
  316. foreach($menuArr as $menu){
  317. if($lastMenu == -1){//Sin menú anterior
  318. $lastMenu = $menu["Menu_id"];
  319. $numMenus++;
  320. $this->xtpl->assign("MENU_NOMBRE", $menu["Menu_desc"]);
  321. if($iconos){
  322. $this->xtpl->assign("MENU_ICONO", $menu["Menu_icono"]);
  323. $this->xtpl->parse("main.menus.menu.icono");
  324. }
  325. }else if($lastMenu != $menu["Menu_id"]){//Cambio de menú
  326. $this->xtpl->parse("main.menus.submenus");
  327. $this->xtpl->parse("main.menus.menu");//guarda menu anterior
  328. $this->xtpl->parse("main.menus");
  329. $lastMenu = $menu["Menu_id"];
  330. $numMenus++;
  331. $this->xtpl->assign("MENU_NOMBRE", $menu["Menu_desc"]);
  332. if($iconos){
  333. $this->xtpl->assign("MENU_ICONO", $menu["Menu_icono"]);
  334. $this->xtpl->parse("main.menus.menu.icono");
  335. }
  336. }
  337. $this->xtpl->assign("SUBMENU_LINK", $menu["Submenu_pag_base"]);
  338. $this->xtpl->assign("SUBMENU_NOMBRE", $menu["Submenu_desc"]);
  339. //$this->xtpl->assign("SUBMENU_ICONO", $menu["Submenu_icono"]);
  340. //$this->xtpl->parse("main.menus.submenu.icono");
  341. $this->xtpl->parse("main.menus.submenus.submenu");
  342. }
  343. if(count($menuArr)>0){
  344. $this->xtpl->parse("main.menus.submenus");
  345. $this->xtpl->parse("main.menus.menu");
  346. }
  347. $this->xtpl->parse("main.menus");
  348. //Salir por default
  349. /*$this->xtpl->assign("MENU_ID", 1);
  350. $this->xtpl->assign("MENU_LINK", "../salir.php");
  351. $this->xtpl->assign("MENU_NOMBRE", "Salir");
  352. if($iconos){
  353. $this->xtpl->assign("MENU_ICONO", "fas fa-power-off");
  354. $this->xtpl->parse("main.menus.menu_link.icono");
  355. }
  356. if($this->selected == 1){
  357. $this->xtpl->parse("main.menus.menu_link.activo");
  358. }
  359. $this->xtpl->parse("main.menus.menu_link");
  360. $this->xtpl->parse("main.menus");*/
  361. $this->xtpl->parse("main");
  362. $this->xtpl->out("main");
  363. }
  364. }
  365. /*
  366. * @return string Texto con el código HTML del menú
  367. */
  368. public function textMenu(){
  369. return $this->xtpl->text("main");
  370. }
  371. private function getFirstDirectory($pag){
  372. if(dirname($pag) == '/'){
  373. return $pag;
  374. }
  375. return $this->getFirstDirectory(dirname($pag));
  376. }
  377. }