roles.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. <?php
  2. require_once("./include/constantes.php");
  3. require_once("./include/bd_pdo.php");
  4. require_once("./classes/MainMenu.php");
  5. session_start();
  6. //--- Valida que el usuaro tenga permisos de superadministrador
  7. if(!isset($_SESSION) || !$_SESSION["sgi_administrador"]){
  8. header("Location: main.php");
  9. exit();
  10. }
  11. $session_life = 1*60*60;//convertido a segundos
  12. if (isset($_SESSION["timeout"])) {
  13. // calculate the session's "time to live"
  14. $sessionTTL = time() - $_SESSION["timeout"];
  15. if ($sessionTTL > $session_life) {
  16. $_SESSION = array();
  17. session_destroy();
  18. $pag = $_SERVER['SERVER_NAME']."/salir.php?expired=1";
  19. header("Location: http://".$pag);
  20. exit();
  21. }
  22. }else{
  23. $_SESSION = array();
  24. session_destroy();
  25. $pag = $_SERVER['SERVER_NAME']."/salir.php?expired=1";
  26. header("Location: http://".$pag);
  27. exit();
  28. }
  29. $_SESSION["timeout"] = time();
  30. $stmt = $pdo->prepare('Select * from fs_sistema(NULL)');
  31. if(!$stmt->execute()){
  32. header("Location: main.php");
  33. exit();
  34. }
  35. $sistemasArr = $stmt->fetchAll();
  36. $stmt->closeCursor();
  37. $stmt = null;
  38. ?>
  39. <!DOCTYPE html>
  40. <html lang="es" prefix="og: http://ogp.me/ns#">
  41. <head>
  42. <title>APSA - Facultad de Ingeniería</title>
  43. <meta charset="utf-8">
  44. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  45. <link rel="icon" type="image/png" href="../img/favicon.png" />
  46. <link rel="stylesheet" href="./css/bootstrap-ulsa.min.css" type="text/css">
  47. <link rel="stylesheet" href="./css/indivisa.css" type="text/css">
  48. <link rel="stylesheet" href="./css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  49. <link rel="stylesheet" href="./css/fa_all.css" type="text/css">
  50. </head>
  51. <body>
  52. <div>
  53. <?php
  54. //--- Objeto que pinta menu
  55. $menuObj = new MainMenu($_SESSION["usuario_id"], NULL, $pdo, NULL, "Roles de usuario");//usr, menu, pdo, sist
  56. require_once("./include/main_menus.php");
  57. if(isset($_MAIN_MENU)){
  58. foreach($_MAIN_MENU as $menu){
  59. $menuObj->agregaMenu($menu["nombre"], $menu["pag"], $menu["ico"]);
  60. }
  61. $menuObj->printMenu();
  62. }
  63. //--Manejo de errores y mensajes de exito
  64. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  65. switch ($_GET["error"]){
  66. case 0: $errorDesc = "No se reciberon los datos necesarios."; break;
  67. case 1: $errorDesc = "Ocurrió un error al borrar los permisos actuales."; break;
  68. case 2: $errorDesc = "Ocurrió un error al actualizar los permisos."; break;
  69. case 3: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  70. case 4: $errorDesc = "Ocurrió un error al insertar el rol nuevo."; break;
  71. case 5: $errorDesc = "Ocurrió un error al actualizar el rol."; break;
  72. case 6: $errorDesc = "Ocurrió un error al borrar el rol."; break;
  73. }
  74. }
  75. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  76. switch ($_GET["ok"]){
  77. case 0: $successDesc = "Los permisos se actualizaron correctamente."; break;
  78. case 1: $successDesc = "El rol se creó correctamente."; break;
  79. case 2: $successDesc = "El rol se actualizó correctamente."; break;
  80. case 3: $successDesc = "El rol se borró correctamente."; break;
  81. }
  82. }
  83. ?>
  84. <main class="container content marco">
  85. <div class="row">
  86. <div class="col-12 text-right">
  87. <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><?php echo $ICO["mas"];?> Crear rol</button>
  88. </div>
  89. </div>
  90. <?php include_once("./include/errorMessage.php"); ?>
  91. <!--</div>
  92. <main class="container content marco-wide">-->
  93. <?php
  94. if(count($sistemasArr) > 1){//más de 1 sistema
  95. ?>
  96. <ul class="nav nav-tabs" id="myTab" role="tablist">
  97. <?php
  98. $i=1;
  99. foreach($sistemasArr as $sistema){ ?>
  100. <li class="nav-item">
  101. <a class="nav-link <?php if($i==1) echo "active"; ?>" id="tab<?php echo $sistema["Sistema_id"];?>-tab" data-toggle="tab" href="#tab<?php echo $sistema["Sistema_id"];?>" role="tab" aria-controls="lista" aria-selected="false">Roles en <?php echo $sistema["Sistema_nombre"];?></a>
  102. </li>
  103. <?php
  104. $i++;
  105. } ?>
  106. </ul>
  107. <div class="tab-content" id="rolesTabContent">
  108. <?php
  109. }
  110. $first = true;
  111. $check = 0;
  112. foreach($sistemasArr as $sistema){
  113. //Obtiene roles
  114. $stmt = $pdo->prepare('Select * from fs_rolusuario(:sist, NULL)');
  115. $stmt->bindPAram(":sist", $sistema["Sistema_id"]);
  116. if(!$stmt->execute()){
  117. print_r($stmt->errorInfo());
  118. $errorDesc = "Ocurrió un error al cargar los roles de usuario";
  119. }else
  120. $tipoUsr_rs = $stmt->fetchAll();
  121. $stmt->closeCursor();
  122. $stmt = $pdo->prepare('Select * from fs_submenurol(:sist)');
  123. $stmt->bindPAram(":sist", $sistema["Sistema_id"]);
  124. if(!$stmt->execute()){
  125. $errorDesc = "Ocurrió un error al cargar los datos de los submenús";
  126. }else
  127. $modulo_rs = $stmt->fetchAll();
  128. $stmt->closeCursor();
  129. if(isset($tipoUsr_rs) && isset($modulo_rs)){
  130. $tipos="";
  131. ?>
  132. <div class="tab-pane fade pt-4 <?php if($first) echo "show active"; ?>" id="tab<?php echo $sistema["Sistema_id"];?>" role="tabpanel" aria-labelledby="tab<?php echo $sistema["Sistema_id"];?>-tab">
  133. <div class="row ">
  134. <div class="col-12 table-responsive">
  135. <form action="./action/roles_update.php" method="post">
  136. <table class="table table-sm table-striped table-white">
  137. <thead class="thead-dark">
  138. <tr>
  139. <th colspan="2" style="vertical-align:middle"><?php echo $sistema["Sistema_nombre"];?><br><small><?php echo $sistema["Sistema_desc"];?></small></th>
  140. <?php foreach($tipoUsr_rs as $tipo){?>
  141. <th class="pt-3" style="width:80px;">
  142. <div class="d-lg-block">
  143. <?php
  144. $tipos.=$tipo["RolUsuario_id"]."_";
  145. echo '<span class="rotate-text">'.$tipo["RolUsuario_desc"].'</span>';
  146. ?></div>
  147. </th>
  148. <?php } ?>
  149. </tr>
  150. <tr>
  151. <th>Menú</th>
  152. <th>Módulo</th>
  153. <?php foreach($tipoUsr_rs as $tipo){?>
  154. <th class="icono-acciones" data-id="<?php echo $tipo["RolUsuario_id"];?>">
  155. <a class="text-white" href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><?php echo $ICO["editar"];?></a>
  156. <a class="text-white" href="#" data-toggle="modal" data-target="#modal_confirm"><?php echo $ICO["borrar2"];?></a>
  157. </th>
  158. <?php } ?>
  159. </tr>
  160. </thead>
  161. <tbody>
  162. <?php
  163. $permiso = "";
  164. $menu_old = 0;
  165. $col = 0;
  166. for($i = 0; $i < count($modulo_rs); ){
  167. if($menu_old != $modulo_rs[$i]["Submenu_id"]){
  168. if($menu_old != 0){//cierra renglón en el cambio de submenu
  169. while($col < count($tipoUsr_rs)){
  170. //vacio
  171. ?>
  172. <td class="text-center">
  173. <div class="custom-control custom-checkbox checkbox-ver">
  174. <input type="checkbox" class="custom-control-input" name="permisosArr[]" <?php echo $permiso;?> id="customCheck_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>">
  175. <label class="custom-control-label" for="customCheck_<?php echo $check;?>" title="Ver"><?php echo $ICO["ojo"];?></label>
  176. </div>
  177. <div class="custom-control custom-checkbox checkbox-editar">
  178. <input type="checkbox" class="custom-control-input" name="editarArr[]" <?php echo $permiso;?> id="customCheck2_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>">
  179. <label class="custom-control-label" for="customCheck2_<?php echo $check;?>" title="Editar"><?php echo $ICO["editar"];?></label>
  180. </div>
  181. </td>
  182. <?php
  183. $col++;
  184. $check++;
  185. }
  186. echo "</tr>";
  187. }
  188. $col = 0;
  189. $menu_old = $modulo_rs[$i]["Submenu_id"];
  190. $activo_class = $modulo_rs[$i]["Menu_mostrar"]?"":"text-info";
  191. ?>
  192. <tr>
  193. <th class="<?php echo $activo_class;?>"><span class="<?php echo $modulo_rs[$i]["Menu_icono"];?> fa-fw"></span> <?php echo $modulo_rs[$i]["Menu_desc"];?></th>
  194. <th><?php echo $modulo_rs[$i]["Submenu_desc"];?></th>
  195. <?php
  196. }
  197. while($col < count($tipoUsr_rs) && $modulo_rs[$i]["RolUsuario_id"] != $tipoUsr_rs[$col]["RolUsuario_id"]){
  198. //vacio
  199. ?>
  200. <td class="text-center">
  201. <div class="custom-control custom-checkbox checkbox-ver">
  202. <input type="checkbox" class="custom-control-input" name="permisosArr[]" <?php echo $permiso;?> id="customCheck_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>">
  203. <label class="custom-control-label" for="customCheck_<?php echo $check;?>" title="Ver"><?php echo $ICO["ojo"];?></label>
  204. </div>
  205. <div class="custom-control custom-checkbox checkbox-editar">
  206. <input type="checkbox" class="custom-control-input" name="editarArr[]" <?php echo $permiso;?> id="customCheck2_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>">
  207. <label class="custom-control-label" for="customCheck2_<?php echo $check;?>" title="Editar"><?php echo $ICO["editar"];?></label>
  208. </div>
  209. </td>
  210. <?php
  211. $col++;
  212. $check++;
  213. }
  214. //no hay nada que pintar
  215. if($i < count($modulo_rs) && $modulo_rs[$i]["RolUsuario_id"] == ""){
  216. $i++;
  217. }else{
  218. //Imprime checkbox marcado
  219. if($col < count($tipoUsr_rs) && $modulo_rs[$i]["RolUsuario_id"] == $tipoUsr_rs[$col]["RolUsuario_id"] && $modulo_rs[$i]["RolUsuario_id"] != ""){
  220. //checked
  221. ?>
  222. <td class="text-center">
  223. <div class="custom-control custom-checkbox checkbox-ver">
  224. <input type="checkbox" class="custom-control-input" name="permisosArr[]" <?php echo $permiso;?> id="customCheck_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>" checked="true">
  225. <label class="custom-control-label" for="customCheck_<?php echo $check;?>" title="Ver"><?php echo $ICO["ojo"];?></label>
  226. </div>
  227. <div class="custom-control custom-checkbox checkbox-editar">
  228. <input type="checkbox" class="custom-control-input" name="editarArr[]" <?php echo $permiso;?> id="customCheck2_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>" <?php if($modulo_rs[$i]["Permiso_edicion"]){ echo 'checked="true"'; }?>>
  229. <label class="custom-control-label" for="customCheck2_<?php echo $check;?>" title="Editar"><?php echo $ICO["editar"];?></label>
  230. </div>
  231. </td>
  232. <?php
  233. $check++;
  234. $col++;
  235. $i++;
  236. }
  237. }//fin si hay
  238. }//fin for
  239. if($menu_old != 0){//cierra renglón si se quedaron abiertos
  240. while($col < count($tipoUsr_rs)){
  241. //vacio
  242. /*$readonly = '';
  243. if($submenu == $menu_old && $tipoUsr_rs[$col]["RolUsuario_id"] == 1 && $objSesion->puedeEditar()){//este menu deshabilitado para super-admin
  244. $readonly = 'disabled="true"';
  245. }*/
  246. ?>
  247. <td class="text-center">
  248. <div class="custom-control custom-checkbox checkbox-ver">
  249. <input type="checkbox" class="custom-control-input" name="permisosArr[]" <?php echo $permiso;?> id="customCheck_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>">
  250. <label class="custom-control-label" for="customCheck_<?php echo $check;?>" title="Ver"><?php echo $ICO["ojo"];?></label>
  251. </div>
  252. <div class="custom-control custom-checkbox checkbox-editar">
  253. <input type="checkbox" class="custom-control-input" name="editarArr[]" <?php echo $permiso;?> id="customCheck2_<?php echo $check;?>" value="<?php echo $menu_old."_".$tipoUsr_rs[$col]["RolUsuario_id"];?>">
  254. <label class="custom-control-label" for="customCheck2_<?php echo $check;?>" title="Editar"><?php echo $ICO["editar"];?></label>
  255. </div>
  256. </td>
  257. <?php
  258. $col++;
  259. $check++;
  260. }
  261. echo "</tr>";
  262. }
  263. ?>
  264. </tbody>
  265. </table>
  266. <?php
  267. if(strlen($tipos) > 1)
  268. $tipos = substr($tipos, 0, -1);
  269. ?>
  270. <p class="text-center"><span class="alerta"><?php echo $ICO["alerta"];?></span> El cambio de los permisos en el rol no actualiza los permisos de los usuarios individuales.</p>
  271. <input type="hidden" name="tipo" value="<?php echo $tipos;?>">
  272. <div class="form-group row">
  273. <div class="col-12 text-center">
  274. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1" name="sistema" value="<?php echo $sistema["Sistema_id"];?>"><?php echo $ICO["aceptar"];?> Guardar roles de <?php echo $sistema["Sistema_nombre"];?></button>
  275. </div>
  276. </div>
  277. </form>
  278. </div>
  279. </div>
  280. </div><!-- tab -->
  281. <?php }
  282. $first = false;
  283. }//fin sistemas
  284. ?>
  285. </div>
  286. </main>
  287. <!-- Modal -->
  288. <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  289. <div class="modal-dialog" role="document">
  290. <div class="modal-content">
  291. <div class="modal-header">
  292. <h4 class="col-12 modal-title text-center"><span id="modalLabel">Crear rol</span>
  293. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  294. <span aria-hidden="true">&times;</span>
  295. </button></h4>
  296. </div>
  297. <div class="modal-body">
  298. <form action="./action/submenu_insert.php" method="post" id="formaModal" onsubmit="submitForm()">
  299. <input type="hidden" name="id" id="id">
  300. <div class="form-box">
  301. <div class="form-group row">
  302. <label for="desc" class="col-4 col-form-label">Sistema *</label>
  303. <div class="col-8">
  304. <div class="datalist datalist-select mb-1 w-100">
  305. <div class="datalist-input">&nbsp;</div>
  306. <span class="ing-buscar icono"></span>
  307. <ul style="display:none">
  308. <?php foreach($sistemasArr as $sistema){?>
  309. <li data-id="<?php echo $sistema["Sistema_id"];?>" ><?php echo $sistema["Sistema_nombre"];?></li>
  310. <?php }?>
  311. </ul>
  312. <input type="hidden" id="sist" name="sist" value="">
  313. </div>
  314. </div>
  315. </div>
  316. <div class="form-group row">
  317. <label for="desc" class="col-4 col-form-label">Nombre *</label>
  318. <div class="col-8">
  319. <input id="desc" name="desc" type="text" class="form-control" required="required" maxlength="25">
  320. </div>
  321. </div>
  322. </div>
  323. <div class="form-group row">
  324. <div class="offset-4 col-8">
  325. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><?php echo $ICO["aceptar"];?> Guardar</button>
  326. <button type="reset" class="btn btn-outline-danger" data-dismiss="modal"><?php echo $ICO["cancelar"];?> Cancelar</button>
  327. </div>
  328. </div>
  329. </form>
  330. </div>
  331. </div>
  332. </div>
  333. </div>
  334. <div class="modal fade" id="modal_confirm" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  335. <div class="modal-dialog modal-dialog-centered" role="document">
  336. <div class="modal-content">
  337. <div class="modal-body">
  338. <div class="row">
  339. <div class="col">
  340. <p class="font-weight-bold">¿Estás seguro de que quieres borrar el rol?</p>
  341. <p>Esta acción no se puede deshacer.</p>
  342. </div>
  343. </div>
  344. </div>
  345. <div class="modal-footer">
  346. <form action="./action/rol_delete.php" method="post" id="formaBorrar">
  347. <input type="hidden" id="id_borrar" name="id" value="">
  348. <button type="submit" class="btn btn-outline-primary"><?php echo $ICO["aceptar"];?> Borrar</button>
  349. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  350. </form>
  351. </div>
  352. </div>
  353. </div>
  354. </div>
  355. <!--- FOOTER--->
  356. <?php require_once("./include/footer.php"); ?>
  357. </div>
  358. <script src="./js/jquery.min.js"></script>
  359. <script src="./js/bootstrap/popper.min.js"></script>
  360. <script src="./js/bootstrap/bootstrap.min.js"></script>
  361. <script src="./js/sidebarmenu.js"></script>
  362. <script src="./js/datalist.js"></script>
  363. <script>
  364. function submitForm(){
  365. var myBtn = $('#submitBtn');
  366. if(myBtn.data("tipo") == 2 ) $('#formaModal').prop("action", "./action/rol_update.php");
  367. else $('#formaModal').prop("action", "./action/rol_insert.php");
  368. return true;
  369. }
  370. $(document).ready(function(){
  371. $(".checkbox-ver").change(function(){
  372. var check_edita = $(this).parents("td").find(".checkbox-editar input[type=checkbox]");
  373. if(!$(this).find("input[type=checkbox]").prop("disabled")){
  374. if(!$(this).find("input[type=checkbox]").prop("checked")){
  375. check_edita.prop("checked",false).prop("disabled", true);
  376. }else
  377. check_edita.prop("disabled", false);
  378. }
  379. }).change();
  380. $('#modal_confirm').on('show.bs.modal', function (event) {
  381. var button = $(event.relatedTarget); // Button that triggered the modal
  382. var id = button.parents(".icono-acciones").data("id");
  383. $("#id_borrar").val(id);
  384. });
  385. $(".btn-borrar").click(function(){
  386. $('#formaBorrar').submit();
  387. });
  388. $('#modal').on('show.bs.modal', function (event) {
  389. var button = $(event.relatedTarget); // Button that triggered the modal
  390. var tipo = button.data('tipo'); // 1 alta, 2 edicion
  391. var modal = $(this);
  392. //$(this).find(".form-control:first-child").focus();
  393. $("#errorBox").collapse('hide');
  394. $("#errorBox_text").html("");
  395. if(tipo == 1){//alta
  396. $("#submitBtn").data('tipo', 1);
  397. $("#modalLabel").html("Crear Rol");
  398. modal.find("input[type=text]").val("");
  399. setDatalistFirst("#sist");
  400. disableDatalist("#sist", false);
  401. //$('#nivel').get(0).selectedIndex = 0;
  402. }else{//editar
  403. $("#submitBtn").data('tipo', 2);
  404. $("#modalLabel").html("Editar Rol");
  405. disableDatalist("#sist", true);
  406. //obtiene datos de preg
  407. var cid = button.parents(".icono-acciones").data("id");
  408. $("#id").val(cid);
  409. $.ajax({
  410. url: './action/rol_select.php',
  411. type: 'POST',
  412. dataType: 'json',
  413. data: { id: cid},
  414. success: function(result) {
  415. if(result["error"]!= "" && result["error"] !== undefined){
  416. modal.modal('hide');
  417. $("#errorBox").collapse('show');
  418. $("#errorBox_text").html(result["error"]);
  419. $('#messageBox')[0].scrollIntoView({ block: "end" });
  420. }else{
  421. $("#desc").val(result["desc"]);
  422. setDatalist('#sist', result["sist"]);
  423. }
  424. },
  425. error: function(jqXHR, textStatus, errorThrown ){
  426. modal.modal('hide');
  427. $("#errorBox").collapse('show');
  428. $("#errorBox_text").html("Error al cargar la página");
  429. $('#messageBox')[0].scrollIntoView({ block: "end" });
  430. }
  431. });//ajax
  432. }
  433. });//show
  434. });
  435. </script>
  436. </body>
  437. </html>