materia_insert.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. /*
  3. * Inserta los datos de una nueva carrera
  4. * Recibe:
  5. * desc - Descripción
  6. * clave
  7. * area
  8. * plan
  9. * sem
  10. * horas_clase
  11. * horas_lab
  12. * tiposub
  13. * gpo
  14. * electiva[]
  15. * relacionada[]
  16. * Error:
  17. * 0 - No se recibieron los datos
  18. * 1 - Error de base de datos
  19. * Success:
  20. */
  21. require_once("../../include/constantes.php");
  22. require_once("../../include/bd_pdo.php");
  23. require_once("../../classes/ValidaSesion.php");
  24. require_once("../classes/LogActividad.php");//die on error
  25. $pag = "../materias_crear.php";
  26. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  27. $objSesion = new ValidaSesion($pdo, 65, APSA);
  28. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  29. header("Location: ../materias.php?error=3");
  30. exit();
  31. }
  32. unset($objValida);
  33. if(!isset($_POST["desc"]) || !isset($_POST["clave"]) || !isset($_POST["area"]) || !isset($_POST["plan"]) || !isset($_POST["sem"]) ){
  34. header("Location: ".$pag."?error=0");
  35. exit();
  36. }
  37. $desc = mb_strtoupper( trim(filter_input(INPUT_POST, "desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))) );//limpia texto
  38. $clave = trim(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  39. $gpo = trim(filter_input(INPUT_POST, "gpo", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  40. $area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  41. $plan = filter_input(INPUT_POST, "plan", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  42. $sem = filter_input(INPUT_POST, "sem", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  43. $horas_clase = filter_input(INPUT_POST, "horas_clase", FILTER_SANITIZE_NUMBER_FLOAT, array('flags' => FILTER_FLAG_ALLOW_FRACTION));//limpia texto
  44. //$horas_lab = filter_input(INPUT_POST, "horas_lab", FILTER_SANITIZE_NUMBER_FLOAT, array('flags' => FILTER_FLAG_ALLOW_FRACTION));//limpia texto
  45. $creditos = filter_input(INPUT_POST, "creditos", FILTER_SANITIZE_NUMBER_FLOAT, array('flags' => FILTER_FLAG_ALLOW_FRACTION));//limpia texto
  46. $ods = filter_input(INPUT_POST, "ods", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  47. $horas_lab = 0;
  48. $tiposub = 0;
  49. if(isset($_POST["tiposub"]))
  50. $tiposub = intval(filter_input(INPUT_POST, "tiposub", FILTER_SANITIZE_NUMBER_INT));//limpia texto
  51. if(isset($_POST["electiva"])){
  52. $electiva_arr = $_POST["electiva"];//arreglo de IDs enteros
  53. }
  54. if(isset($_POST["relacionada"]))
  55. $relacionada_arr = $_POST["relacionada"];//arreglo de IDs enteros
  56. if($tiposub != 0){
  57. if(count($electiva_arr) == 0){
  58. //echo "Debes elegir submat 1";
  59. header("Location: ".$pag."?error=4");//debe elegir submaterias
  60. exit();
  61. }
  62. }
  63. function in_arrayAsociativo($busca, $arreglo, $key ){
  64. for($i = 0; $i < count($arreglo); $i++){
  65. if($arreglo[$key] == $busca){
  66. return true;
  67. }
  68. }
  69. return false;
  70. }
  71. function ordenaAtributos($a, $b)//a<b -> return<0
  72. {
  73. $attrA = explode("|", $a);
  74. $attrB = explode("|", $b);
  75. if($attrA[1] > $attrB[1] || ($attrA[1] == $attrB[1] && $attrA[0] < $attrB[0])){
  76. return -1;
  77. }
  78. return 1;
  79. //$attrA[1]*100+$attrA[0] - $attrB[1]*100+$attrB[0]
  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 fi_materia(:desc, :area, :plan, :clave, :hclase, :hlab, :sem, :tipo, :cred, :gpo)');
  90. $stmt->bindParam(":tipo", $tiposub);
  91. }else{
  92. $stmt = $pdo->prepare('Select * from fi_materia(:desc, :area, :plan, :clave, :hclase, :hlab, :sem, NULL, :cred, :gpo)');
  93. }
  94. $stmt->bindParam(":desc", $desc);
  95. $stmt->bindParam(":area", $area);
  96. $stmt->bindParam(":plan", $plan);
  97. $stmt->bindParam(":clave", $clave);
  98. $stmt->bindParam(":hclase", $horas_clase);
  99. $stmt->bindParam(":hlab", $horas_lab);
  100. $stmt->bindParam(":sem", $sem);
  101. $stmt->bindParam(":cred", $creditos);
  102. $stmt->bindParam(":gpo", $gpo);
  103. if(!$stmt->execute()){
  104. $pdo->rollBack();
  105. //echo "fi_materia ";
  106. //print_r($stmt->errorInfo());
  107. header("Location:".$pag."?error=1");
  108. exit();
  109. }
  110. $rs = $stmt->fetch();
  111. $materia_id = $rs["fi_materia"];
  112. $stmt->closeCursor();
  113. unset($rs);
  114. //Inserta submaterias
  115. foreach($electiva_arr as $electiva){//recorre nuevos
  116. //no esta en la anterior, inserta
  117. $stmt = $pdo->prepare('Select * from fi_submateria(:mat, :sub)');
  118. $stmt->bindParam(":mat", $materia_id);
  119. $stmt->bindParam(":sub", $electiva);
  120. if(!$stmt->execute()){
  121. $pdo->rollBack();
  122. //echo "fi submateria";
  123. //print_r($stmt->errorInfo());
  124. header("Location:".$pag."?id=".$id."&error=5");
  125. exit();
  126. }
  127. $stmt->closeCursor();
  128. }
  129. //Inserta materias relacionadas
  130. if(isset($relacionada_arr)){
  131. foreach($relacionada_arr as $relacionada){
  132. $stmt = $pdo->prepare('Select * from fi_materiarelacionada(:mat, :mat_rel)');
  133. $stmt->bindParam(":mat", $materia_id);
  134. if(trim($relacionada) != "" && $materia_id != $relacionada){
  135. $stmt->bindParam(":mat_rel", $relacionada);
  136. if(!$stmt->execute()){
  137. $pdo->rollBack();
  138. //echo "fi_relacionada";
  139. //print_r($stmt->errorInfo());
  140. header("Location:".$pag."?error=6");
  141. exit();
  142. }
  143. }
  144. }
  145. $stmt->closeCursor();
  146. }
  147. //Inserta atributos
  148. if(isset($_POST["atributos"])){
  149. $atributos_arr = $_POST["atributos"];
  150. $i=0;
  151. usort($atributos_arr, "ordenaAtributos");
  152. foreach($atributos_arr as $atributo){
  153. $atributoMat = explode("|", $atributo);
  154. $stmt = $pdo->prepare('Select * from fi_materia_atributoegreso(:plan, :id, :mat, :contribuye, :orden)');
  155. $stmt->bindParam(":plan", $plan);
  156. $stmt->bindParam(":id", $atributoMat[0]);
  157. $stmt->bindParam(":mat", $materia_id);
  158. $stmt->bindParam(":contribuye", $atributoMat[1]);
  159. $stmt->bindParam(":orden", $i);
  160. $i++;
  161. if(!$stmt->execute()){
  162. $pdo->rollBack();
  163. //echo "fi_relacionada";
  164. //print_r($stmt->errorInfo());
  165. header("Location:".$pag."?error=7");
  166. exit();
  167. }
  168. }
  169. $stmt->closeCursor();
  170. }
  171. //Inserta ODs
  172. if(!empty($ods) && $ods>=1){
  173. $stmt = $pdo->prepare('Select * from fi_materia_ods(:id, :mat)');
  174. $stmt->bindParam(":id", $ods);
  175. $stmt->bindParam(":mat", $materia_id);
  176. if(!$stmt->execute()){
  177. $pdo->rollBack();
  178. //echo "fi_relacionada";
  179. //print_r($stmt->errorInfo());
  180. header("Location:".$pag."?error=9");
  181. exit();
  182. }
  183. }
  184. $stmt = null;
  185. $log = new LogActividad();
  186. $desc_log = "Inserta materia nueva ID[".$materia_id."] Nombre[".$desc."] Clave[".$clave."] Area[".$area."] Plan[".$plan."] Semestre[".$sem."] Horas de clase[".$horas_clase."] Créditos[".$creditos."]";
  187. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  188. $pdo->commit();
  189. header("Location: ".$pag."?ok=0&plan=".$plan."&sem=".$sem);
  190. }catch(PDOException $e) {
  191. $pdo->rollBack();
  192. header("Location:".$pag."?error=1");
  193. }
  194. ?>