permisos_puesto.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/bd_pdo.php");
  4. require_once("../classes/ValidaSesion.php");
  5. require_once("../classes/MainMenu.php");
  6. $menu = 8;
  7. $submenu = 87;
  8. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  9. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  10. if(!$objSesion->tieneAcceso()){
  11. $objSesion->terminaSesion();
  12. }
  13. /*
  14. if(!$_SESSION["administrativo"]){
  15. header("Location: main.php");
  16. exit();
  17. }*/
  18. if(!isset($_GET["id"]) || is_null($_GET["id"]) || empty($_GET["id"])){
  19. header("Location: puestos.php");
  20. exit();
  21. }
  22. $stmt = $pdo->prepare('Select * from fs_sistemausuarioacceso(:usr)');
  23. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  24. if(!$stmt->execute()){
  25. header("Location: main.php");
  26. exit();
  27. }
  28. $sistemasArr = $stmt->fetchAll();
  29. $stmt->closeCursor();
  30. $stmt = null;
  31. ?>
  32. <!DOCTYPE html>
  33. <html lang="es" prefix="og: http://ogp.me/ns#">
  34. <head>
  35. <title>APSA - Facultad de Ingeniería</title>
  36. <meta charset="utf-8">
  37. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  38. <link rel="icon" type="image/png" href="../img/favicon.png" />
  39. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  40. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  41. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  42. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  43. </head>
  44. <body>
  45. <div>
  46. <?php
  47. //--- Objeto que pinta menu
  48. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, APSA, "Permisos del puesto");//usr, menu, pdo, sist
  49. $menuObj->printMenu();
  50. $puesto = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  51. $stmt = $pdo->prepare('Select * from fs_puesto(:id)');
  52. $stmt->bindParam(":id", $puesto);
  53. if(!$stmt->execute()){
  54. //print_r($stmt->errorInfo());
  55. $errorDesc = "Ocurrió un error al cargar el puesto";
  56. }else{
  57. $puestoActual_rs = $stmt->fetch();
  58. $stmt->closeCursor();
  59. }
  60. //Obtiene datos del puesto
  61. $stmt = $pdo->prepare('Select * from fs_puesto(NULL)');
  62. if(!$stmt->execute()){
  63. //print_r($stmt->errorInfo());
  64. $errorDesc = "Ocurrió un error al cargar el puesto";
  65. }else{
  66. $puesto_rs = $stmt->fetchAll();
  67. $stmt->closeCursor();
  68. }
  69. //--Manejo de errores y mensajes de exito
  70. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  71. switch ($_GET["error"]){
  72. case 0: $errorDesc = "No se reciberon los datos de los permisos."; break;
  73. case 1: $errorDesc = "Ocurrió un error al borrar los permisos actuales."; break;
  74. case 2: $errorDesc = "Ocurrió un error al actualizar los permisos."; break;
  75. case 3: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  76. }
  77. }
  78. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  79. switch ($_GET["ok"]){
  80. case 0: $successDesc = "Los permisos se actualizaron correctamente."; break;
  81. }
  82. }
  83. ?>
  84. <main class="container-fluid content marco">
  85. <div class="row mb-4">
  86. <div class="col-8">
  87. <form action="permisos_puesto.php" method="get" id="forma_puesto">
  88. <select name="id" class="form-control mt-2" id="puesto_select">
  89. <?php foreach($puesto_rs as $puesto_data){ ?>
  90. <?php if($puestoActual_rs["Usuario_id"] != $_SESSION["usuario_id"]){?>
  91. <option value="<?php echo $puesto_data["Puesto_id"];?>" <?php if(intval($puesto_data["Puesto_id"]) == $puesto){?> selected="selected"<?php }?>><?php echo $puesto_data["Puesto_desc"];?> - <?php echo $puesto_data["Usuario_apellidos"]." ".$puesto_data["Usuario_nombre"]; ?></option>
  92. <?php } ?>
  93. <?php } ?>
  94. </select>
  95. </form>
  96. </div>
  97. <div class="col-4 text-right">
  98. <p class="col text-right my-2">
  99. <a href="puestos.php" class="btn btn-outline-danger"><?php echo $ICO["cancelar"];?> Regresar</a>
  100. </p>
  101. </div>
  102. </div>
  103. <?php include_once("../include/errorMessage.php"); ?>
  104. <?php
  105. if(count($sistemasArr) > 1){//más de 1 sistema
  106. ?>
  107. <ul class="nav nav-tabs" id="myTab" role="tablist">
  108. <?php
  109. $i=1;
  110. foreach($sistemasArr as $sistema){ ?>
  111. <li class="nav-item">
  112. <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">Permisos en <?php echo $sistema["Sistema_nombre"];?></a>
  113. </li>
  114. <?php
  115. $i++;
  116. } ?>
  117. </ul>
  118. <div class="tab-content" id="rolesTabContent">
  119. <?php
  120. }
  121. $i = 1;
  122. $check = 0;
  123. foreach($sistemasArr as $sistema){
  124. if(isset($puesto_rs)){
  125. //Obtiene roles
  126. $stmt = $pdo->prepare('Select * from fs_rolusuario(:sist, NULL)');
  127. $stmt->bindParam(":sist", $sistema["Sistema_id"]);
  128. if(!$stmt->execute()){
  129. //print_r($stmt->errorInfo());
  130. $errorDesc = "Ocurrió un error al cargar los roles de usuario";
  131. }else
  132. $tipoUsr_rs = $stmt->fetchAll();
  133. $stmt->closeCursor();
  134. //Obtiene módulos que puede asignar el usuario actual
  135. $stmt = $pdo->prepare('Select * from fs_submenupuesto(:usr, :puesto, :sist)');
  136. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  137. $stmt->bindParam(":puesto", $puesto);
  138. $stmt->bindParam(":sist", $sistema["Sistema_id"]);
  139. if(!$stmt->execute()){
  140. print_r($stmt->errorInfo());
  141. $errorDesc = "Ocurrió un error al cargar los módulos";
  142. }else
  143. $modulo_rs = $stmt->fetchAll();
  144. $stmt->closeCursor();
  145. }
  146. if(isset($modulo_rs)){
  147. $tipos="";
  148. ?>
  149. <div class="tab-pane fade pt-5 <?php if($i==1) echo "show active"; ?>" id="tab<?php echo $sistema["Sistema_id"];?>" role="tabpanel" aria-labelledby="tab<?php echo $sistema["Sistema_id"];?>-tab">
  150. <div class="row">
  151. <div class="col-6 col-md-4">
  152. <?php if(count($tipoUsr_rs) > 0 && $puestoActual_rs["Usuario_id"] != $_SESSION["usuario_id"]){ ?>
  153. <form>
  154. <div class="form-group">
  155. <label for="inputRol">Cargar permisos de rol</label>
  156. <select class="form-control inputRol">
  157. <option value="0"></option>
  158. <?php foreach($tipoUsr_rs as $tipoUsr){?>
  159. <option value="<?php echo $tipoUsr["RolUsuario_id"];?>"><?php echo $tipoUsr["RolUsuario_desc"];?></option>
  160. <?php }?>
  161. </select>
  162. </div>
  163. <div class="form-group">
  164. <button type="button" class="btn btn-primary load-permisos" data-sist="<?php echo $sistema["Sistema_id"];?>">Cargar permisos </button>
  165. </div>
  166. </form>
  167. <?php } ?>
  168. </div>
  169. <div class="col-12 col-md-8 table-responsive">
  170. <form action="./action/permisospuesto_update.php" method="post">
  171. <input type="hidden" name="id" value="<?php echo $puesto;?>">
  172. <input type="hidden" name="sist" value="<?php echo $sistema["Sistema_id"];?>">
  173. <table class="table table-sm table-striped table-white">
  174. <thead class="thead-dark">
  175. <tr >
  176. <th>Menú</th>
  177. <th>Módulo</th>
  178. <th>Permisos</th>
  179. </tr>
  180. </thead>
  181. <tbody>
  182. <?php
  183. $permiso = "";
  184. if(!$objSesion->puedeEditar() || $puestoActual_rs["Usuario_id"] == $_SESSION["usuario_id"]){
  185. $permiso = 'disabled="true"';
  186. }
  187. foreach($modulo_rs as $modulo){
  188. /*$readonly = '';
  189. if(!$objSesion->puedeEditar()){
  190. $readonly = 'disabled="true"';
  191. }*/
  192. ?>
  193. <tr>
  194. <th scope="row" ><span class="<?php echo $modulo["Menu_icono"];?> ing-fw"></span> <?php echo $modulo["Menu_desc"];?></th>
  195. <th scope="row" ><?php echo $modulo["Submenu_desc"];?></th>
  196. <td class="text-center">
  197. <div class="custom-control custom-checkbox checkbox-ver">
  198. <input type="checkbox" class="custom-control-input" name="permisosArr[]" <?php echo $permiso;?> id="customCheck_v_<?php echo $modulo["Submenu_id"];?>" value="<?php echo $modulo["Submenu_id"];?>" <?php if(!is_null($modulo["Permiso_edicion"])){ echo "checked='true'";} ?>>
  199. <label class="custom-control-label" for="customCheck_v_<?php echo $modulo["Submenu_id"];?>"><span title="Ver"><?php echo $ICO["ojo"];?></span></label>
  200. </div>
  201. <div class="custom-control custom-checkbox checkbox-editar">
  202. <input type="checkbox" class="custom-control-input" name="editarArr[]" <?php echo $permiso;?> id="customCheck_e_<?php echo $modulo["Submenu_id"];?>" value="<?php echo $modulo["Submenu_id"];?>" <?php if(!is_null($modulo["Permiso_edicion"]) && $modulo["Permiso_edicion"]){ echo "checked='true'";} ?>>
  203. <label class="custom-control-label" for="customCheck_e_<?php echo $modulo["Submenu_id"];?>"><span title="Editar"><?php echo $ICO["editar"];?></span></label>
  204. </div>
  205. </td>
  206. </tr>
  207. <?php
  208. }
  209. ?>
  210. </tbody>
  211. </table>
  212. <?php if($objSesion->puedeEditar() && $puestoActual_rs["Usuario_id"] != $_SESSION["usuario_id"]){
  213. if(strlen($tipos) > 1)
  214. $tipos = substr($tipos, 0, -1);
  215. ?>
  216. <input type="hidden" name="tipo" value="<?php echo $tipos;?>">
  217. <div class="form-group row">
  218. <div class="col">
  219. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><?php echo $ICO["aceptar"];?> Guardar permisos <?php echo $sistema["Sistema_nombre"];?></button>
  220. <a href="puestos.php" class="btn btn-outline-danger"><?php echo $ICO["cancelar"];?> Regresar</a>
  221. </div>
  222. </div>
  223. <?php } ?>
  224. </form>
  225. </div><!-- right -->
  226. </div>
  227. </div><!-- tab -->
  228. <?php }
  229. $i++;
  230. }//fin sistemas
  231. ?>
  232. </main>
  233. <!--- FOOTER--->
  234. <?php require_once("../include/footer.php"); ?>
  235. </div>
  236. <script src="../js/jquery.min.js"></script>
  237. <script src="../js/bootstrap/popper.min.js"></script>
  238. <script src="../js/bootstrap/bootstrap.min.js"></script>
  239. <script src="../js/sidebarmenu.js"></script>
  240. <?php if($objSesion->puedeEditar() && $puestoActual_rs["Usuario_id"] != $_SESSION["usuario_id"]){ ?>
  241. <script>
  242. $(document).ready(function(){
  243. $("#puesto_select").change(function(){
  244. $("#forma_puesto").submit();
  245. });
  246. $(".checkbox-ver").change(function(){
  247. var check_edita = $(this).parents("td").find(".checkbox-editar input[type=checkbox]");
  248. if(!$(this).find("input[type=checkbox]").prop("disabled")){
  249. if(!$(this).find("input[type=checkbox]").prop("checked")){
  250. check_edita.prop("checked",false).prop("disabled", true);
  251. }else
  252. check_edita.prop("disabled", false);
  253. }
  254. }).change();
  255. $(".load-permisos").click(function(){
  256. if($(this).parents("form").find('.inputRol').val() > 0){
  257. $.ajax({
  258. url: './action/permisos_select.php',
  259. type: 'POST',
  260. dataType: 'json',
  261. data: { id: $(this).parents("form").find('.inputRol').val(), sist: $(this).data("sist") },
  262. success: function(result) {
  263. if(result["error"]!= "" && result["error"] !== undefined){
  264. console.log("Ocurrió un error de load");
  265. $("#errorBox").collapse('show');
  266. $("#errorBox_text").html(result["error"]);
  267. $('#messageBox')[0].scrollIntoView({ block: "end" });
  268. }else{
  269. if(result["permisosArr"] !== undefined){
  270. $(this).parents(".tab-pane").find(".checkbox-ver input").prop("checked", false).change();
  271. $(this).parents(".tab-pane").find(".checkbox-editar input").prop("checked", false);
  272. for(var i = 0; i < result["permisosArr"].length; i++){
  273. $("#customCheck_v_"+result["permisosArr"][i]["Submenu_id"]).prop("checked", true).change();
  274. if(result["permisosArr"][i]["Permiso_edicion"])
  275. $("#customCheck_e_"+result["permisosArr"][i]["Submenu_id"]).prop("checked", true);
  276. }
  277. }
  278. }
  279. },
  280. error: function(jqXHR, textStatus, errorThrown ){
  281. $("#errorBox").collapse('show');
  282. $("#errorBox_text").html("Error al obtener profesores.<br>"+errorThrown);
  283. $('#messageBox')[0].scrollIntoView({ block: "end" });
  284. //alert("ERROR! " + textStatus+ " - "+errorThrown);
  285. }
  286. });//ajax
  287. }
  288. });
  289. });
  290. </script>
  291. <?php } ?>
  292. </body>
  293. </html>