materia_update.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <?php
  2. /*
  3. * Inserta los datos de una nueva carrera
  4. * Recibe:
  5. * id
  6. * desc - Descripción
  7. * clave
  8. * area
  9. * plan
  10. * sem
  11. * horas_clase
  12. * horas_lab
  13. * tiposub
  14. * desc_sub[]
  15. * relacionada[]
  16. * gpo
  17. * Error:
  18. * 0 - No se recibieron los datos
  19. * 1 - Error de base de datos
  20. * Success:
  21. */
  22. require_once("../../include/constantes.php");
  23. require_once("../../include/bd_pdo.php");
  24. require_once("../../classes/ValidaSesion.php");
  25. require_once("../classes/LogActividad.php");//die on error
  26. $pag = "../materias_editar.php";
  27. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  28. $objSesion = new ValidaSesion($pdo, 65, APSA);
  29. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  30. header("Location: ../materias.php?error=3");
  31. exit();
  32. }
  33. unset($objValida);
  34. if(!isset($_POST["id"]) || !isset($_POST["desc"]) || !isset($_POST["clave"]) || !isset($_POST["area"]) || !isset($_POST["plan"]) || !isset($_POST["sem"]) ){
  35. header("Location: ../materias.php?error=0");
  36. exit();
  37. }
  38. $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  39. $desc = mb_strtoupper( trim(filter_input(INPUT_POST, "desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))) );//limpia texto
  40. $clave = trim(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  41. $gpo = trim(filter_input(INPUT_POST, "gpo", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  42. $area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  43. $plan = filter_input(INPUT_POST, "plan", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  44. $sem = filter_input(INPUT_POST, "sem", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  45. $horas_clase = filter_input(INPUT_POST, "horas_clase", FILTER_SANITIZE_NUMBER_FLOAT, array('flags' => FILTER_FLAG_ALLOW_FRACTION));//limpia texto
  46. //$horas_lab = filter_input(INPUT_POST, "horas_lab", FILTER_SANITIZE_NUMBER_FLOAT, array('flags' => FILTER_FLAG_ALLOW_FRACTION));//limpia texto
  47. $creditos = filter_input(INPUT_POST, "creditos", FILTER_SANITIZE_NUMBER_FLOAT, array('flags' => FILTER_FLAG_ALLOW_FRACTION));//limpia texto
  48. $ods = filter_input(INPUT_POST, "ods", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  49. $horas_lab = 0;
  50. $tiposub = 0;
  51. if(isset($_POST["tiposub"]))
  52. $tiposub = intval(filter_input(INPUT_POST, "tiposub", FILTER_SANITIZE_NUMBER_INT));//limpia texto
  53. if(isset($_POST["electiva"])){
  54. $electiva_arr = $_POST["electiva"];//arreglo de IDs enteros
  55. }
  56. if(isset($_POST["relacionada"]))
  57. $relacionada_arr = $_POST["relacionada"];//arreglo de IDs enteros
  58. if($tiposub != 0){
  59. if(count($electiva_arr) == 0){
  60. header("Location: ".$pag."?id=".$id."&error=4");//debe elegir submaterias
  61. exit();
  62. }
  63. }
  64. function in_arrayAsociativo($busca, $arreglo, $key ){
  65. for($i = 0; $i < count($arreglo); $i++){
  66. if($arreglo[$i][$key] == $busca){
  67. return true;
  68. }
  69. }
  70. return false;
  71. }
  72. function ordenaAtributos($a, $b)//a<b -> return<0
  73. {
  74. $attrA = explode("|", $a);
  75. $attrB = explode("|", $b);
  76. if($attrA[1] > $attrB[1] || ($attrA[1] == $attrB[1] && $attrA[0] < $attrB[0])){
  77. return -1;
  78. }
  79. return 1;
  80. }
  81. if(isset($_POST["atributos"])){
  82. $atributos_arr = $_POST["atributos"];
  83. $i=0;
  84. usort($atributos_arr, "ordenaAtributos");
  85. }
  86. try {
  87. $pdo->beginTransaction();
  88. if($tiposub != 0){
  89. $stmt = $pdo->prepare('Select * from fu_materia(:id, :desc, :area, :plan, :clave, :hclase, :hlab, :sem, :tipo, :cred, :gpo)');
  90. $stmt->bindParam(":tipo", $tiposub);
  91. }else{
  92. $stmt = $pdo->prepare('Select * from fu_materia(:id, :desc, :area, :plan, :clave, :hclase, :hlab, :sem, NULL, :cred, :gpo)');
  93. }
  94. $stmt->bindParam(":id", $id);
  95. $stmt->bindParam(":desc", $desc);
  96. $stmt->bindParam(":gpo", $gpo);
  97. $stmt->bindParam(":area", $area);
  98. $stmt->bindParam(":plan", $plan);
  99. $stmt->bindParam(":clave", $clave);
  100. $stmt->bindParam(":hclase", $horas_clase);
  101. $stmt->bindParam(":hlab", $horas_lab);
  102. $stmt->bindParam(":sem", $sem);
  103. $stmt->bindParam(":cred", $creditos);
  104. if(!$stmt->execute()){
  105. $pdo->rollBack();
  106. //echo "fu_materia ";
  107. //print_r($stmt->errorInfo());
  108. header("Location:".$pag."?id=".$id."&error=1");
  109. exit();
  110. }
  111. $rs = $stmt->fetch();
  112. $stmt->closeCursor();
  113. unset($rs);
  114. //Actualiza submaterias
  115. if($tiposub != 0 && isset($electiva_arr)){
  116. //Obtiene arreglo de submaterias anteriores
  117. $stmt = $pdo->prepare('Select * from fs_submateria(:id, NULL)');
  118. $stmt->bindParam(":id", $id);
  119. $stmt->execute();
  120. $submateria_rs = $stmt->fetchAll();//materias que están actualmente
  121. $stmt->closeCursor();
  122. $i = 0;
  123. foreach($submateria_rs as $submateria){//recorre actuales
  124. if(!in_array($submateria["Submateria_id"], $electiva_arr)){
  125. //no esta en la nueva, borra
  126. $stmt = $pdo->prepare('Select * from fd_submateria(:mat, :sub)');
  127. $stmt->bindParam(":mat", $id);
  128. $stmt->bindParam(":sub", $submateria["Submateria_id"]);
  129. if(!$stmt->execute()){
  130. $pdo->rollBack();
  131. //echo "fd submateria";
  132. //print_r($stmt->errorInfo());
  133. header("Location:".$pag."?id=".$id."&error=5");
  134. exit();
  135. }
  136. $stmt->closeCursor();
  137. }
  138. }
  139. foreach($electiva_arr as $electiva){//recorre nuevos
  140. if(!in_arrayAsociativo($electiva, $submateria_rs, "Submateria_id")){
  141. //no esta en la anterior, inserta
  142. $stmt = $pdo->prepare('Select * from fi_submateria(:mat, :sub)');
  143. $stmt->bindParam(":mat", $id);
  144. $stmt->bindParam(":sub", $electiva);
  145. if(!$stmt->execute()){
  146. $pdo->rollBack();
  147. //echo "fi electiva";
  148. //print_r($stmt->errorInfo());
  149. header("Location:".$pag."?id=".$id."&error=5");
  150. exit();
  151. }
  152. $stmt->closeCursor();
  153. }
  154. }
  155. }//fin submaterias
  156. if($tiposub == 0){
  157. $stmt = $pdo->prepare('Select * from fd_submateria(:mat, NULL)');
  158. $stmt->bindParam(":mat", $id);
  159. if(!$stmt->execute()){
  160. $pdo->rollBack();
  161. //echo "fd_relacionada";
  162. //print_r($stmt->errorInfo());
  163. header("Location:".$pag."?id=".$id."&error=5");
  164. exit();
  165. }
  166. }
  167. //Borra materias relacionadas y reinserta
  168. $stmt = $pdo->prepare('Select * from fd_materiarelacionada(:mat, NULL)');
  169. $stmt->bindParam(":mat", $id);
  170. if(!$stmt->execute()){
  171. $pdo->rollBack();
  172. //echo "fd_mat_relacionada";
  173. //print_r($stmt->errorInfo());
  174. header("Location:".$pag."?id=".$id."&error=6");
  175. exit();
  176. }
  177. //Inserta materias relacionadas
  178. if(isset($relacionada_arr)){
  179. foreach($relacionada_arr as $relacionada){
  180. $stmt = $pdo->prepare('Select * from fi_materiarelacionada(:mat, :mat_rel)');
  181. $stmt->bindParam(":mat", $id);
  182. if(trim($relacionada) != "" && $id != $relacionada){
  183. $stmt->bindParam(":mat_rel", $relacionada);
  184. if(!$stmt->execute()){
  185. $pdo->rollBack();
  186. //echo "fi_relacionada";
  187. //print_r($stmt->errorInfo());
  188. header("Location:".$pag."?id=".$id."&error=6");
  189. exit();
  190. }
  191. }
  192. }
  193. $stmt->closeCursor();
  194. }
  195. //Borra atributos
  196. $stmt = $pdo->prepare('Select * from fd_materia_atributoegreso(NULL, :mat)');
  197. $stmt->bindParam(":mat", $id);
  198. if(!$stmt->execute()){
  199. $pdo->rollBack();
  200. //echo "fi_relacionada";
  201. //print_r($stmt->errorInfo());
  202. header("Location:".$pag."?error=8");
  203. exit();
  204. }
  205. //Inserta atributos
  206. if(isset($_POST["atributos"])){
  207. $atributos_arr = $_POST["atributos"];
  208. $i=0;
  209. usort($atributos_arr, "ordenaAtributos");
  210. foreach($atributos_arr as $atributo){
  211. $atributoMat = explode("|", $atributo);
  212. $stmt = $pdo->prepare('Select * from fi_materia_atributoegreso(:plan, :id, :mat, :contribuye ,:orden)');
  213. $stmt->bindParam(":plan", $plan);
  214. $stmt->bindParam(":id", $atributoMat[0]);
  215. $stmt->bindParam(":mat", $id);
  216. $stmt->bindParam(":contribuye", $atributoMat[1]);
  217. $stmt->bindParam(":orden", $i);
  218. $i++;
  219. if(!$stmt->execute()){
  220. $pdo->rollBack();
  221. //echo "fi_relacionada";
  222. //print_r($stmt->errorInfo());
  223. header("Location:".$pag."?error=7");
  224. exit();
  225. }
  226. }
  227. $stmt->closeCursor();
  228. }
  229. //Borra ODs
  230. $stmt = $pdo->prepare('Select * from fd_materia_ods(NULL, :mat)');
  231. $stmt->bindParam(":mat", $id);
  232. if(!$stmt->execute()){
  233. $pdo->rollBack();
  234. //echo "fi_relacionada";
  235. //print_r($stmt->errorInfo());
  236. header("Location:".$pag."?error=9");
  237. exit();
  238. }
  239. //Inserta ODs
  240. if(!empty($ods) && $ods>=1){
  241. $stmt = $pdo->prepare('Select * from fi_materia_ods(:id, :mat)');
  242. $stmt->bindParam(":id", $ods);
  243. $stmt->bindParam(":mat", $id);
  244. if(!$stmt->execute()){
  245. $pdo->rollBack();
  246. //echo "fi_relacionada";
  247. //print_r($stmt->errorInfo());
  248. header("Location:".$pag."?error=9");
  249. exit();
  250. }
  251. }
  252. $stmt = null;
  253. $log = new LogActividad();
  254. $desc_log = "Actualiza materia ID[".$id."] Nombre[".$desc."] Clave[".$clave."] Area[".$area."] Plan[".$plan."] Semestre[".$sem."] Horas de clase[".$horas_clase."] Créditos[".$creditos."]";
  255. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  256. $pdo->commit();
  257. header("Location: ../materias.php?ok=1");
  258. }catch(PDOException $e) {
  259. $pdo->rollBack();
  260. //print_r($e);exit();
  261. header("Location:".$pag."?id=".$id."&error=1");
  262. }
  263. ?>