123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670 |
- <?php
- /* AJAX
- * Selecciona los datos de la carrera
- * Recibe:
- * id - ID de grupo,
- * json
- * Return:
- * resultado o cadena de error
- */
- require_once("../../include/constantes.php");
- require_once("../../include/nocache.php");
- require_once("../../include/bd_pdo.php");
- require_once("../../include/util.php");
- require_once("../include/validacionesHorario.php");
- require_once("../../classes/ValidaSesion.php");
- require_once("../classes/LogActividad.php");//die on error
- function in_arrayAsociativo($busca, $arreglo, $key ){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key] == $busca){
- return true;
- }
- }
- return false;
- }
- function pos_arrayAsociativo($busca, $arreglo, $key ){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key] == $busca){
- return $i;
- }
- }
- return -1;
- }
- function in_arrayProfesoresHorario($busca, $arreglo, $key, $sub=false ){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key] == $busca && ((!$sub && ($arreglo[$i]["submateria"] == "" || $arreglo[$i]["submateria"] == 0) ) || ($sub == true && intval($arreglo[$i]["submateria"]) > 0 ))){
- return true;
- }
- }
- return false;
- }
- function in_arraySubmateriaProfesoresHorario($busca1, $busca2, $arreglo, $key1, $key2){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key1] == $busca1 && $arreglo[$i][$key2] == $busca2){
- return true;
- }
- }
- return false;
- }
- function pos_arraySubmateriaProfesoresHorario($busca1, $busca2, $arreglo, $key1, $key2){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key1] == $busca1 && $arreglo[$i][$key2] == $busca2){
- return $i;
- }
- }
- return -1;
- }
- function in_arrayProfesoresNuevo($busca, $arreglo, $key2, $key1, $sub=false ){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key2] == $busca[$key1] && ((!$sub && ($busca["submateria"] == "" || $busca["submateria"] == 0) ) || ($sub == true && intval($busca["submateria"]) > 0 ))){
- return true;
- }
- }
- return false;
- }
- function in_arraySubmateriaNueva($busca, $arreglo, $key = "submateria", $activa=true ){
- for($i = 0; $i < count($arreglo); $i++){
- if($arreglo[$i][$key] == $busca && $arreglo[$i]["activa"] == $activa){
- return true;
- }
- }
- return false;
- }
- function submateriaTieneProfesor($sub_id, $profesoresArr){
- foreach($profesoresArr as $prof){
- if(intval($prof["submateria"]) == intval($sub_id)){
- return true;
- }
- }
- return false;
- }
- $ok_tmp = "";
- //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
- $objSesion = new ValidaSesion($pdo, 51, APSA);
- if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
- $return["error"] = "Error! No tienes permisos para realizar esta acción.";
- }else if(!isset($_POST["json"])){
- $return["error"] = "Error! No se recibió la información del grupo.";
- }else{
- //$grupo = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $move = filter_input(INPUT_POST, "move", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $clase = json_decode($_POST["json"], true);
- $submateria = $clase["submaterias"];
-
- $return["error"] = "";
- $return["debug"] = "";
-
- try {
- $pdo->beginTransaction();
- $error = false;
- $arregloQuery = array();
- $grupo = $clase["grupo"];
-
- if(!isset($clase["vinculos"]) || count($clase["vinculos"]) == 0){
- //---- Valida que no haya conflicto de horas ----------
- $errorTxt = validaConflictoHoras($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de salones ----------
- $errorTxt = validaConflictoSalon($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["salon"], $clase["profesores"], $clase["submaterias"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de profesores ----------
- $errorTxt = validaConflictoProfesor($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de profesores con salón ----------
- $errorTxt = validaConflictoProfesorSalon($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["salon"], $clase["salon_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- }
-
- //Si tiene vinculos, revisa que no haya conflictos en su grupo
- if(count($clase["vinculos"]) > 0){
- foreach($clase["vinculos"] as $vinculo){
- $grupo = $vinculo["grupo"];
- //---- Valida que no haya conflicto de horas ----------
- $errorTxt = validaConflictoHoras($pdo, $grupo, $clase["dia"], $clase["hora"], $vinculo["materia"], $vinculo["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de salon en mismo dia hora ----------
- $errorTxt = validaConflictoSalon($pdo, $grupo, $clase["dia"], $clase["hora"], $vinculo["materia"], $vinculo["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["salon"], $clase["profesores"], $clase["submaterias"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de profesores ----------
- $errorTxt = validaConflictoProfesor($pdo, $grupo, $clase["dia"], $clase["hora"], $vinculo["materia"], $vinculo["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
-
- //---- Valida que no haya conflicto de profesores con salón ----------
- $errorTxt = validaConflictoProfesorSalon($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $vinculo["materia"], $clase["salon"], $clase["salon_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- }
- }
-
- //---- Actualiza ----------
- if(!$error){
- //Actualiza Horario grupo
- if($clase["salon"] == "" || is_null($clase["salon"]) || !is_int($clase["salon"])){
- $stmt = $pdo->prepare('Select * from fu_horariogrupo(:id, :mat, :dia, :hora, NULL, :usr, :fecha_ini, :fecha_fin, :duracion)');
- }else{
- $stmt = $pdo->prepare('Select * from fu_horariogrupo(:id, :mat, :dia, :hora, :salon, :usr, :fecha_ini, :fecha_fin, :duracion)');
- $stmt->bindParam(":salon", $clase["salon"]);
- }
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":dia", $clase["dia"]);
- $stmt->bindParam(":hora", $clase["hora"]);
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- $fecha_tmpI = fechaGuion($clase["fecha_inicial"]);
- $stmt->bindParam(":fecha_ini", $fecha_tmpI);
- $fecha_tmpF = fechaGuion($clase["fecha_final"]);
- $stmt->bindParam(":fecha_fin", $fecha_tmpF);
- $stmt->bindParam(":duracion", $clase["duracion"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar el horario de la materia '".$clase["materia_nombre"]."'. ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- if(intval($move) != 1){//No fue sólo movimiento
- //--------- NEW ---- v
- //Profesores de materia
- $stmt = $pdo->prepare('Select * from fs_profesorhorariogrupo(:id)');
- $stmt->bindParam(":id", $clase["id_db"]);//horario grupo id
- $stmt->execute();
- $profesor_rs = $stmt->fetchAll();//materias que están actualmente
- $stmt->closeCursor();
-
- foreach($profesor_rs as $profesor){//recorre actuales
- if(!in_arrayProfesoresHorario($profesor["Usuario_id"], $clase["profesores"], "profesor", false) && !$error){
- //no esta en la nueva, borra
- $stmt = $pdo->prepare('Select * from fd_profesorhorariogrupo(:id, :prof)');
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":prof", $profesor["Usuario_id"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al remover los profesores de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- foreach($clase["profesores"] as $profesor_new){//recorre nuevos
- if($profesor_new["submateria"] =="" && !in_arrayProfesoresNuevo($profesor_new, $profesor_rs, "Usuario_id", "profesor", false) && !$error){
- //no esta en la anterior, inserta
- $stmt = $pdo->prepare('Select * from fi_profesorhorariogrupo(:id, :prof)');
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":prof", $profesor_new["profesor"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar los profesores de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
-
- //--Submaterias --
- $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupo(:id) WHERE "Submateria_activa" = true; ');//se trae todas
- $stmt->bindParam(":id", $clase["id_db"]);//horario grupo id
- $stmt->execute();
- $submateriaOld_rs = $stmt->fetchAll();//materias que están actualmente
- $stmt->closeCursor();
- //$subInserted = "**";
- foreach($submateriaOld_rs as $submateriaOld){//recorre actuales
- $pos = pos_arrayAsociativo($submateriaOld["Submateria_id"], $clase["submaterias"], "submateria"); //$clase["submaterias"] trae todas las posibilidades
- if( $clase["submaterias"][$pos]["activa"] == false && !$error){
- //no esta activa en la nueva, borra
- $stmt = $pdo->prepare('Select * from fd_submateriahorariogrupo(:id, :sub)');//cambiar DELETE, cambiar fd_profesorsubmateriahorariogrupo por fd_submateriaprofesorhorariogrupo
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":sub", $submateriaOld["Submateria_id"]);
- //$subInserted .= "Borra [".$clase["id_db"].", ".$submateriaOld["Submateria_id"]."] ";
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al remover la submateria de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }//no hay else, porque no hay update
- }
- foreach($clase["submaterias"] as $submateriaNew){//recorre nuevos
- //if(!in_arrayProfesoresNuevo($submateriaNew, $profesor_rs, "Usuario_id", "profesor", true) && !$error){
- //$subInserted.="Checa[ ".boolval($submateriaNew["activa"])." | ".pos_arrayAsociativo(intval($submateriaNew["submateria"]), $submateriaOld_rs, "Submateria_id")."]";
- if( boolval($submateriaNew["activa"]) == true && !in_arrayAsociativo(intval($submateriaNew["submateria"]), $submateriaOld_rs, "Submateria_id") && !$error){
-
- //Inserta submateria
- $query = ":id, :mat, :sub, ";
- if(isset($submateriaNew["fecha_inicial"]) && isset($submateriaNew["fecha_final"]) && $submateriaNew["fecha_inicial"] != "" && $submateriaNew["fecha_final"] != ""){
- $query .=":fecha_ini, :fecha_fin ";
- }else{
- $query .="NULL, NULL ";
- }
- //$subInserted .= "Inserta[".$clase["id_db"].", ".$submateriaNew["submateria"]."] ";
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupo('.$query.')');//submateria
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":sub", $submateriaNew["submateria"]);
- if($submateriaNew["fecha_inicial"] != "" && $submateriaNew["fecha_final"] != ""){
- $stmt->bindParam(":fecha_ini", $submateriaNew["fecha_inicial"]);
- $stmt->bindParam(":fecha_fin", $submateriaNew["fecha_final"]);
- }
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar la submateria '".$submateriaNew["submateria_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
-
- }
- }
- //$subInserted .= "**";
-
- //--Profesores de submateria
- $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupoprofesor(:id, NULL)');
- $stmt->bindParam(":id", $clase["id_db"]);//horario grupo id
- $stmt->execute();
- $profesor_rs = $stmt->fetchAll();//materias que están actualmente
- $stmt->closeCursor();
-
- foreach($profesor_rs as $profesor_old){//recorre actuales
- //if(!in_arrayProfesoresHorario($profesor["Usuario_id"], $clase["profesores"], "profesor", true) && !$error){
- if(!in_arraySubmateriaProfesoresHorario($profesor_old["Submateria_id"], $profesor_old["Usuario_id"], $clase["profesores"], "submateria" , "profesor") && !$error){
- //no esta en la nueva, borra
- $stmt = $pdo->prepare('Select * from fd_submateriaprofesorhorariogrupo(:id, :sub, :prof)');//cambiar DELETE, cambiar fd_profesorsubmateriahorariogrupo por fd_submateriaprofesorhorariogrupo
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":sub", $profesor_old["Submateria_id"]);
- $stmt->bindParam(":prof", $profesor_old["Usuario_id"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al remover los profesores de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }else{
- //actualiza actuales
- $pos = pos_arraySubmateriaProfesoresHorario($profesor_old["Submateria_id"], $profesor_old["Usuario_id"], $clase["profesores"], "submateria" , "profesor");
- if($pos >=0 && $profesor_old["Salon_id"] != $clase["profesores"][$pos]["salon"] ){//salones diferentes
- //Inserta submateria
- $query = ":id, :sub, :usr, ";
- if(isset($clase["profesores"][$pos]["salon"]) && $clase["profesores"][$pos]["salon"] != "" && $clase["profesores"][$pos]["salon"] != 0){
- $query .=":salon";
- }else{
- $query .="NULL";
- }
-
- $stmt = $pdo->prepare('Select * from fu_submateriaprofesorhorariogrupo('.$query.')');//submateria
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":sub", $clase["profesores"][$pos]["submateria"]);
- $stmt->bindParam(":usr", $clase["profesores"][$pos]["profesor"]);
- if(isset($clase["profesores"][$pos]["salon"]) && $clase["profesores"][$pos]["salon"] != "" && $clase["profesores"][$pos]["salon"] != 0) $stmt->bindParam(":salon", $clase["profesores"][$pos]["salon"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar el salón de la submateria '".$profesor_old["submaterias"][$pos]["submateria_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }//fin existe submateria
- }
- }
- foreach($clase["profesores"] as $profesor_new){//recorre nuevos
- //if(!in_arrayProfesoresNuevo($profesor_new, $profesor_rs, "Usuario_id", "profesor", true) && !$error){
- if(!in_arraySubmateriaProfesoresHorario($profesor_new["submateria"], $profesor_new["profesor"], $profesor_rs, "Submateria_id" , "Usuario_id") && !$error){
- //inserta submateria
- //Buscar datos de la submateria con los del profesor
- //$pos = pos_arrayAsociativo($profesor_new["submateria"], $clase["submaterias"], "submateria");
-
- //if($pos >=0 ){//existe en submaterias
-
- //no esta en la anterior, inserta prof
- if($profesor_new["salon"] != ""){
- $query =":salon";
- }else{
- $query ="NULL";
- }
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupoprofesor(:id, :mat, :sub, :prof,'. $query.')');
- $stmt->bindParam(":id", $clase["id_db"]);
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":sub", $profesor_new["submateria"]);
- $stmt->bindParam(":prof", $profesor_new["profesor"]);
- if($profesor_new["salon"] != "") $stmt->bindParam(":salon", $profesor_new["salon"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar los profesores de submateria de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- //}//fin existe submateria
- }
- }
-
- //----------- FIN NEW -----^
-
- }//fin move
- }//no error
-
- //---Actualiza vinculos
- if(!$error && count($clase["vinculos"]) > 0){
- //$return["horariogrupo"] = array();//tmp debug
- //Submaterias posibles en materia original NEW
- $stmt = $pdo->prepare('Select * from fs_submateria(:mat, NULL)');
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->execute();
- $submateriaPosibleOriginal_rs = $stmt->fetchAll();//submaterias que se pueden asignar
- $stmt->closeCursor();
-
- foreach($clase["vinculos"] as $vinculo){
- if($clase["salon"] == ""){
- $stmt = $pdo->prepare('Select * from fu_horariogrupo(:id, :mat, :dia, :hora, NULL, :usr, :fecha_ini, :fecha_fin, :duracion)');
- }else{
- $stmt = $pdo->prepare('Select * from fu_horariogrupo(:id, :mat, :dia, :hora, :salon, :usr, :fecha_ini, :fecha_fin, :duracion)');
- $stmt->bindParam(":salon", $clase["salon"]);
- }
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":dia", $clase["dia"]);
- $stmt->bindParam(":hora", $clase["hora"]);
- $stmt->bindParam(":mat", $vinculo["materia"]);
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- $fecha_tmpI = fechaGuion($clase["fecha_inicial"]);
- $stmt->bindParam(":fecha_ini", $fecha_tmpI);
- $fecha_tmpF = fechaGuion($clase["fecha_final"]);
- $stmt->bindParam(":fecha_fin", $fecha_tmpF);
- $stmt->bindParam(":duracion", $clase["duracion"]);
-
- //$return["horariogrupo"][] = 'Select * from fu_horariogrupo('.$vinculo["id_db"].', '.$vinculo["materia"].', '.$clase["dia"].', '.$clase["hora"].', '.$clase["salon"].', '.$_SESSION["usuario_id"].', '.$fecha_tmpI.', '.$fecha_tmpF.', '.$clase["duracion"].')';
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar el horario de la materia '".$clase["materia_nombre"]."'. ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
-
- // No se puede actualizar submaterias de materia vinculada porque no se conoce el ID
- if(intval($move) != 1){//No fue sólo movimiento
- //Obtiene ids de horarios vinculados
- //Borra profesores y submaterias
- if(!$error){
-
- //--------- NEW ---- v
- //Profesores de materia
- $stmt = $pdo->prepare('Select * from fs_profesorhorariogrupo(:id)');
- $stmt->bindParam(":id", $vinculo["id_db"]);//horario grupo id
- $stmt->execute();
- $profesor_rs = $stmt->fetchAll();//materias que están actualmente
- $stmt->closeCursor();
- foreach($profesor_rs as $profesor){//recorre actuales
- if(!in_arrayProfesoresHorario($profesor["Usuario_id"], $clase["profesores"], "profesor", false) && !$error){
- //no esta en la nueva, borra
- $stmt = $pdo->prepare('Select * from fd_profesorhorariogrupo(:id, :prof)');
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":prof", $profesor["Usuario_id"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al remover los profesores de '".$vinculo["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- foreach($clase["profesores"] as $profesor_new){//recorre nuevos
- if($profesor_new["submateria"] =="" && !in_arrayProfesoresNuevo($profesor_new, $profesor_rs, "Usuario_id", "profesor", false) && !$error){
- //no esta en la anterior, inserta
- $stmt = $pdo->prepare('Select * from fi_profesorhorariogrupo(:id, :prof)');
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":prof", $profesor_new["profesor"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar los profesores vinculados de '".$vinculo["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
-
- /*
- //Profesores actuales de submateria vinculada
- $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupoprofesor(:id, NULL)');
- $stmt->bindParam(":id", $vinculo["id_db"]);//horario grupo id
- $stmt->execute();
- $profesor_rs = $stmt->fetchAll();//profesores que están actualmente en vinculo
- $stmt->closeCursor();
-
- //Submaterias posibles en materia vinculada
- $stmt = $pdo->prepare('Select * from fs_submateria(:mat, NULL)');
- $stmt->bindParam(":mat", $vinculo["materia"]);//horario grupo id TODO vinculo o clase?
- $stmt->execute();
- $submateriaPosibleVinculo_rs = $stmt->fetchAll();//submaterias que se pueden asignar
- $stmt->closeCursor();
-
- //Submaterias en materia vinculada
- $stmt = $pdo->prepare('Select * from fs_submateriahorariogrupo(:id) WHERE "Submateria_activa" = true; ');
- $stmt->bindParam(":id", $vinculo["id_db"]);//horario grupo id
- $stmt->execute();
- $submateriaOld_rs = $stmt->fetchAll();//submaterias que están actualmente
- $stmt->closeCursor();
-
- //Nuevo
- foreach($submateriaOld_rs as $submateriaOld){//recorre actuales
- $pos = pos_arrayAsociativo($submateriaOld["Submateria_id"], $clase["submaterias"], "submateria"); //$clase["submaterias"] trae todas las posibilidades
- if( $clase["submaterias"][$pos]["activa"] == false && !$error){
- //no esta activa en la nueva
- $stmt = $pdo->prepare('Select * from fd_submateriahorariogrupo(:id, :sub)');//cambiar DELETE, cambiar fd_profesorsubmateriahorariogrupo por fd_submateriaprofesorhorariogrupo
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":sub", $submateriaOld["Submateria_id"]);
- //$subInserted .= "Borra [".$clase["id_db"].", ".$submateriaOld["Submateria_id"]."] ";
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al remover la submateria de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }//no hay else, porque no hay update
- }
- foreach($clase["submaterias"] as $submateriaNew){//recorre nuevos
-
- if( boolval($submateriaNew["activa"]) == true && !in_arrayAsociativo(intval($submateriaNew["submateria"]), $submateriaOld_rs, "Submateria_id")
- && in_arrayAsociativo(intval($submateriaNew["submateria"]), $submateriaPosibleVinculo_rs, "Submateria_id") && !$error){
- //Inserta submateria
- $query = ":id, :mat, :sub, ";
- if(isset($submateriaNew["fecha_inicial"]) && isset($submateriaNew["fecha_final"]) && $submateriaNew["fecha_inicial"] != "" && $submateriaNew["fecha_final"] != ""){
- $query .=":fecha_ini, :fecha_fin ";
- }else{
- $query .="NULL, NULL ";
- }
- //$subInserted .= "Inserta[".$clase["id_db"].", ".$submateriaNew["submateria"]."] ";
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupo('.$query.')');//submateria
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":sub", $submateriaNew["submateria"]);
- if($submateriaNew["fecha_inicial"] != "" && $submateriaNew["fecha_final"] != ""){
- $stmt->bindParam(":fecha_ini", $submateriaNew["fecha_inicial"]);
- $stmt->bindParam(":fecha_fin", $submateriaNew["fecha_final"]);
- }
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar la submateria '".$submateriaNew["submateria_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- //--
-
- foreach($profesor_rs as $profesor_old){//recorre actuales en vínculo
- if(in_arrayAsociativo($profesor_old["Submateria_id"], $submateriaPosibleOriginal_rs, "Submateria_id") && !$error){//prof de vinculada tiene área de submateria afectada original
- if(!in_arrayProfesoresHorario($profesor_old["Usuario_id"], $clase["profesores"], "profesor", true)){
- //está en las submaterias actuales, pero no esta en la nueva, borra
- $stmt = $pdo->prepare('Select * from fd_submateriaprofesorhorariogrupo(:id, :sub, :prof)');//cambiar DELETE, cambiar fd_profesorsubmateriahorariogrupo por fd_submateriaprofesorhorariogrupo
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":sub", $profesor_old["Submateria_id"]);
- $stmt->bindParam(":prof", $profesor_old["Usuario_id"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al remover los profesores vinculados de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }//Si el profesor
- else{//actualiza actuales
- //$pos = pos_arrayAsociativo((int)$profesor_old["Submateria_id"], $clase["submaterias"], "submateria");
- $pos = pos_arraySubmateriaProfesoresHorario($profesor_old["Submateria_id"], $profesor_old["Usuario_id"], $clase["profesores"], "submateria" , "profesor");
- $return["debug"] .= "inserta sub vinculada ".$profesor_old["Submateria_id"]."[$pos]";
- if($pos >=0 ){//existe en submaterias
- //Inserta submateria
- $query = ":id, :sub, :usr, ";
- if(isset($clase["profesores"][$pos]["salon"]) && $clase["profesores"][$pos]["salon"] != "" && $clase["profesores"][$pos]["salon"] != 0){
- $query .=":salon";
- }else{
- $query .="NULL";
- }
- $stmt = $pdo->prepare('Select * from fu_submateriaprofesorhorariogrupo('.$query.')');//submateria
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":sub", $clase["profesores"][$pos]["submateria"]);
- $stmt->bindParam(":usr", $clase["profesores"][$pos]["profesor"]);
- if(isset($clase["profesores"][$pos]["salon"]) && $clase["profesores"][$pos]["salon"] != "" && $clase["profesores"][$pos]["salon"] != 0) $stmt->bindParam(":salon", $clase["profesores"][$pos]["salon"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar el salón de la submateria vinculada '".$profesor_old["submaterias"][$pos]["submateria_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
-
- }//fin existe submateria
- }
- }
- }
- foreach($clase["profesores"] as $profesor_new){//recorre nuevos
- if(in_arrayAsociativo($profesor_new["submateria"], $submateriaPosibleVinculo_rs, "Submateria_id") && !$error){//prof nuevo tiene área de submateria vinculada
- //inserta submateria
- //if(!in_arrayProfesoresNuevo($profesor_new, $profesor_rs, "Usuario_id", "profesor", true) && !$error){
- if(!in_arraySubmateriaProfesoresHorario($profesor_new["submateria"], $profesor_new["profesor"], $profesor_rs, "Submateria_id" , "Usuario_id") && !$error){
- if($profesor_new["salon"] != ""){
- $query =":salon";
- }else{
- $query ="NULL";
- }
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupoprofesor(:id, :mat, :sub, :prof,'. $query.')');
- $stmt->bindParam(":id", $vinculo["id_db"]);
- $stmt->bindParam(":mat", $vinculo["materia"]);
- $stmt->bindParam(":sub", $profesor_new["submateria"]);
- $stmt->bindParam(":prof", $profesor_new["profesor"]);
- if($profesor_new["salon"] != "") $stmt->bindParam(":salon", $profesor_new["salon"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al actualizar los profesores de submateria de '".$clase["materia_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
-
- }
- }//fin submateria
- }*/
- //----------- FIN NEW -----^
-
- }//fin horarios vinculados
- }//fin move
-
- }//fin foreach
- }//Fin vinculos
-
- if(!$error){
- $pdo->commit();
- unset($return["error"]);
- $return["ok"] = "El horario se guardó correctamente. ".$ok_tmp;
-
- //Inserta Log
- $log = new LogActividad();
- /*if(isset($vinculo["grupo"]))
- $desc_log = "Actualiza horario GrupoID[".$vinculo["grupo"]."] [".$clase["materia"]."] Nombre[".$clase["materia_nombre"]."] antes[".$clase["materia_orig"]."] Día[".$clase["dia"]."] antes[".$clase["dia_orig"]."] Hora[".$clase["hora"]."] antes[".$clase["hora_orig"]."] Duración[".$clase["duracion"]."] Fecha de inicio[".$clase["fecha_inicial"]."] Fecha de fin[".$clase["fecha_final"]."]";
- else*/
- $desc_log = "Actualiza horario GrupoID[".$clase["materia"]."] Nombre[".$clase["materia_nombre"]."] antes[".$clase["materia_orig"]."] Día[".$clase["dia"]."] antes[".$clase["dia_orig"]."] Hora[".$clase["hora"]."] antes[".$clase["hora_orig"]."] Duración[".$clase["duracion"]."] Fecha de inicio[".$clase["fecha_inicial"]."] Fecha de fin[".$clase["fecha_final"]."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
-
- //---Inserta vinculos
- if(count($clase["vinculos"]) > 0){
- foreach($clase["vinculos"] as $vinculo){
- $desc_log = "Actualiza horario por vínculo [".$vinculo["materia"]."] Nombre[".$vinculo["materia_nombre"]."] Día[".$clase["dia"]."] antes[".$clase["dia_orig"]."] Hora[".$clase["hora"]."] antes[".$clase["hora_orig"]."] Duración[".$clase["duracion"]."] Fecha de inicio[".$clase["fecha_inicial"]."] Fecha de fin[".$clase["fecha_final"]."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
- }
- }else
- $pdo->rollBack();
- $stmt = null; // cierra conexion
- } catch(PDOException $e) {
- $pdo->rollBack();
- $return["error"] = "Ocurrió un error al insertar los datos de los horarios.".$e->getMessage();
- }
- }
- $return["json"] = json_encode($return);
- echo json_encode($return);
- ?>
|