materiasalumnos_importar_old.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. ini_set ( 'max_execution_time' , '300' );//5 min
  3. require_once("../../include/constantes.php");
  4. require_once("../../include/nocache.php");
  5. require_once("../../include/util.php");
  6. require_once("../../include/bd_pdo.php");
  7. require_once("../../classes/ValidaSesion.php");
  8. require "../../include/phpSpreadsheet/autoload.php";
  9. use PhpOffice\PhpSpreadsheet\IOFactory;
  10. function valoresCompletos($data, $max){
  11. for($i = 0; $i<$max; $i++){
  12. if(!isset($data[$i]) || (trim($data[$i]) == "" || strlen(trim($data[$i])) <= 1))
  13. return false;
  14. }
  15. return true;
  16. }
  17. function obtieneNumeros ($texto) {
  18. preg_match_all('/\d+/', $texto, $matches);
  19. return implode($matches[0]);
  20. }
  21. function obtieneLetras ($texto) {
  22. preg_match_all('/[a-zA-Z]+/', $texto, $matches);
  23. return implode($matches[0]);
  24. }
  25. function quitaCarrera($plan_rs, $shortname){
  26. foreach($plan_rs AS $plan){
  27. if( mb_strpos($shortname, $plan["Carrera_prefijo"]) !== false){
  28. return str_replace($plan["Carrera_prefijo"], "",$shortname);
  29. }
  30. }
  31. }
  32. $pag = "../materiasalumnos_moodle.php";
  33. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  34. $objSesion = new ValidaSesion($pdo, 102, GEMA);
  35. if(!$objSesion->tieneAcceso()){
  36. $return["error"] = "No tienes permisos para acceder a esa sección o la sesión caducó.";
  37. }else if(!isset($_FILES['archivo']['name'][0])){
  38. $return["error"] = "No se recibieron los datos de los alumnos.";
  39. }else{
  40. //$inputFileName =__DIR__. '/tmp/alumnos_tmp.xlsx';
  41. $archivo = $_FILES['archivo']['name'][0];
  42. // Check file size
  43. if ($_FILES["archivo"]["size"][0] > 10 * 1024 * 1024) {//en bytes
  44. $return["error"] = "El archivo supera los 10MB y no se puede cargar.";
  45. $return["json"] = json_encode($return);
  46. echo json_encode($return);
  47. exit();
  48. }
  49. $exts_arr = array("xls","xlsx");
  50. $dot_arr = explode('.', $archivo);
  51. $ext = end($dot_arr);
  52. if(!in_array($ext, $exts_arr)){
  53. $return["error"] = "No es una extensión válida. Solo se permiten archivos XLS o XLSX.";
  54. $return["json"] = json_encode($return);
  55. echo json_encode($return);
  56. exit();
  57. }
  58. //--------
  59. $stmt = $pdo->prepare('Select DISTINCT "Carrera_prefijo", "Carrera_id" from fs_planestudio(:nivel, NULL, NULL, true, 0, NULL) ORDER BY "Carrera_prefijo"');
  60. $stmt->bindParam(":nivel", $_SESSION["nivel_id"]);
  61. if(!$stmt->execute()){
  62. $return["error"] = "Ocurrió un error al cargar los planes de estudios";
  63. $return["json"] = json_encode($return);
  64. echo json_encode($return);
  65. exit();
  66. }else{
  67. $plan_rs = $stmt->fetchAll();
  68. }
  69. $stmt->closeCursor();
  70. //---------
  71. //$newfilename = "tmp_al_".$_SESSION["gpo_id"].".".$ext;
  72. $inputFileName = $_FILES["archivo"]["tmp_name"][0];
  73. $inputFileType = IOFactory::identify($inputFileName);
  74. $reader = IOFactory::createReader($inputFileType);
  75. $spreadsheet = $reader->load($inputFileName);
  76. $spreadsheet->setActiveSheetIndex(0);
  77. $sheetData = $spreadsheet->getActiveSheet()->toArray();
  78. try {
  79. $pdo->beginTransaction();
  80. $alumnoArr = array();
  81. $row = 1;
  82. $omitidoArr = array();
  83. $insertada = 0;
  84. $debug = "";
  85. $i=0;
  86. $al_old;
  87. foreach($sheetData as $data){//Carrera / Clave / Nombre completo
  88. if($row > 1){//ignora header
  89. //if(trim($data[0]) != "" && trim($data[1]) != "" && trim($data[2]) != "" && trim($data[3]) != ""){
  90. if(valoresCompletos($data, 2)){
  91. if(strpos( $data[1], "ELECTIVA") ===false){
  92. $clave = $data[0];//OK
  93. $tmpArr = explode("-", $data[1]);
  94. $shortname = $tmpArr[0];
  95. $mat_id = $tmpArr[3];//OK
  96. $grupo = quitaCarrera($plan_rs, $shortname );//OK
  97. //echo "SELECT * from fi_alumnomaterias_excel($clave, ".$_SESSION["periodo_id"].", $grupo, $mat_id) ||";
  98. $stmt = $pdo->prepare('SELECT * from fi_alumnomaterias_excel(:clave, :per, :gpo, :mat)');
  99. $stmt->bindParam(":clave", $clave);
  100. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  101. $stmt->bindParam(":gpo", $grupo);
  102. $stmt->bindParam(":mat", $mat_id);
  103. if(!$stmt->execute()){
  104. $pdo->rollBack();
  105. $return["error"] = "Ocurrió un error al cargar los planes de estudios";
  106. $return["json"] = json_encode($return);
  107. echo json_encode($return);
  108. exit();
  109. }else{
  110. $mat_rs = $stmt->fetch();
  111. }
  112. $stmt->closeCursor();
  113. if($mat_rs["Materia_insertada"]){
  114. $insertada++;
  115. }else{
  116. if($mat_rs["Materia_repetida"]){
  117. $omitidoArr[] = array("clave"=>$clave, "shortname"=>$data[1], "desc"=> $row.". La materia <b>$mat_id</b> ya estaba asignada");
  118. }else{
  119. $omitidoArr[] = array("clave"=>$clave, "shortname"=>$data[1], "desc"=> $row.". Error al insertar la materia <b>$mat_id</b> para el alumno <b>$clave</b> en el grupo <b>$grupo</b>");
  120. }
  121. $debug .= 'SELECT * from fi_alumnomaterias_excel(\''.$clave.'\', '.$_SESSION["periodo_id"].', '.$grupo.', '.$mat_id.')'." |";
  122. }
  123. }
  124. }else{
  125. $omitidoArr[] = array("clave"=>$clave, "shortname"=>$data[1], "desc"=> $row.". El renglón no tiene los datos requeridos");
  126. }
  127. }
  128. $row++;
  129. }
  130. //$pdo->commit();
  131. /*$stmt = null; // cierra conexion
  132. if($repetido == 0){
  133. header("Location: ".$pag."?ok=0");
  134. }else if($repetido < count($apellidos)){
  135. header("Location: ".$pag."?ok=1&rep=".$repetido);
  136. }else{
  137. header("Location: ".$pag."?error=4");
  138. }*/
  139. //$alumnoArr;
  140. $return["insertados"] = $insertada;
  141. $return["omitidosArr"] = $omitidoArr;
  142. //$return["debug"] = $debug;
  143. } catch(PDOException $e) {
  144. //$pdo->rollBack();
  145. //header("Location:".$pag."?error=1");
  146. print_r($e);
  147. }
  148. }
  149. $return["json"] = json_encode($return);
  150. echo json_encode($return);