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); ?>