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 evento."; }else{ $clase = json_decode($_POST["json"], true); $clase["todo_dia"] = filter_var($clase["todo_dia"], FILTER_VALIDATE_BOOLEAN); $return["error"] = ""; try { $pdo->beginTransaction(); $error = false; //---- Insertar ---------- //Actualiza evento $stmt = $pdo->prepare('Select * from fu_calendarioevento(:id, :titulo, NULL, :per, :desc, NULL, true)'); $stmt->bindParam(":id", $clase["id_db"]); $stmt->bindParam(":titulo", $clase["titulo"]); $stmt->bindParam(":desc", $clase["desc"]); //if($clase["periodo"] != 0){ $stmt->bindParam(":per", $_SESSION["periodo_id"]);} $stmt->bindParam(":per", $_SESSION["periodo_id"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al actualizar el evento '".$clase["titulo"]."'".$t[2]; $error = true; } $stmt->closeCursor(); //Borra perfiles /*$stmt = $pdo->prepare('Select * from fd_calendarioevento_perfil(:id)'); $stmt->bindParam(":id", $clase["id_db"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al borrar los perfiles del evento '".$clase["titulo"]."'".$t[2]; $error = true; } $stmt->closeCursor(); //Inserta Perfiles if(!$error && is_array($clase["perfiles"]) ){ foreach($clase["perfiles"] as $perfil){ if(!$error){ $stmt = $pdo->prepare('Select * from fi_calendarioevento_perfil(:id, :perf)'); $stmt->bindParam(":id", $clase["id_db"]); $stmt->bindParam(":perf", $perfil); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al insertar los perfiles. ".$t[2]; $error = true; } $stmt->closeCursor(); } } }//fin profesores*/ //Actualiza insignia if($clase["tiene_evidencia"]){ $stmt = $pdo->prepare('Select * from fu_insignia(:id, :titulo, :desc, :tipo, :puesto, true, :evidencia)'); $stmt->bindParam(":evidencia", $clase["evidencia"]); }else{ $stmt = $pdo->prepare('Select * from fu_insignia(:id, :titulo, :desc, :tipo, :puesto, false, NULL)'); } $stmt->bindParam(":id", $clase["insignia_id"]); $stmt->bindParam(":titulo", $clase["titulo"]); $stmt->bindParam(":desc", $clase["desc"]); $stmt->bindParam(":tipo", $clase["tipo"]); $stmt->bindParam(":puesto", $clase["puesto"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al actualizar la insignia '".$clase["titulo"]."'".$t[2]; $error = true; } $stmt->closeCursor(); //Inserta insignia General if($clase["tiene_inscripciones"]){ $fecha_ini = fechaGuion($clase["insc_ini"]); $fecha_fin = fechaGuion($clase["insc_fin"])." ".$clase["insc_hora_fin"].":00"; $stmt = $pdo->prepare('Select * from fu_insigniageneral(:insignia, :evento, :fecha_ini, :fecha_fin)'); $stmt->bindParam(":fecha_ini", $fecha_ini); $stmt->bindParam(":fecha_fin", $fecha_fin); }else{ $stmt = $pdo->prepare('Select * from fu_insigniageneral(:insignia, :evento, NULL, NULL)'); } $stmt->bindParam(":insignia", $clase["insignia_id"]); $stmt->bindParam(":evento", $clase["id_db"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al actualizar la insignia general'".$clase["titulo"]."'".$t[2]; $error = true; } $stmt->closeCursor(); // //Borra e Inserta atributos if(!$error && !empty($clase["atributos"]) ){ $stmt = $pdo->prepare('Select * from fd_insignia_atributoegreso(:id, NULL)'); $stmt->bindParam(":id", $clase["insignia_id"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al actualizar los atributos. ".$t[2]; $error = true; }else{ $stmt->closeCursor(); //Inserta atributos $stmt = $pdo->prepare('Select * from fi_insignia_atributoegreso(:id, :atr, :nivel)'); $stmt->bindParam(":id", $clase["insignia_id"]); for($i=0; $i< count($clase["atributos"]) && !$error; $i++){ if($clase["atributos"][$i]["id"] != 0){ $stmt->bindParam(":atr", $clase["atributos"][$i]["id"]); $stmt->bindParam(":nivel", $clase["atributos"][$i]["nivel"]); $return["query"] = "[Select * from fi_insignia_atributoegreso(".$clase["insignia_id"].", ".$clase["atributos"][$i]["id"].", ".$clase["atributos"][$i]["nivel"].")] "; if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al insertar los atributos. ".$t[2]; $error = true; } } } $stmt->closeCursor(); } } //Revisa cambio de día if(!$error && $clase["cambio_fecha"]){ //--Obtiene todos los eventos dentro del rango del periodo para los perfiles indicados $stmt = $pdo->prepare('Select * from fs_calendarioevento_reglas(:id)'); $stmt->bindParam(":id", $clase["id_db"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al obtener los eventos.".$t[2]; $error = true; } $unico = false; if(!$error){ $evento = $stmt->fetch(); $stmt->closeCursor(); //Recorre eventos $eventoObj = new Evento($evento["CalendarioEvento_id"], $evento["CalendarioEvento_titulo"],$evento["CalendarioEvento_desc"], $evento["Periodo_id"] ,$evento["CalendarioEvento_fecha"], $evento["CalendarioEvento_todo_dia"], $evento["CalendarioEvento_hora_inicial"],$evento["CalendarioEvento_hora_final"]); //-- Calcular posibles fechas e insertar fechas en objeto -- $fecha = fechaGuion($evento["CalendarioEvento_fecha"]); switch($evento["CalendarioRepeticion_id"]){ case 1: //diario while (strtotime($fecha) <= strtotime($evento["CalendarioReglas_fecha_final"])) { $eventoObj->addFecha($fecha); $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha))); } break; case 2: //semanal $diasArr = explode(",", $evento["CalendarioReglas_dias_str"]); while (strtotime($fecha) <= strtotime($evento["CalendarioReglas_fecha_final"])) { if(in_array(date("w", strtotime($fecha)), $diasArr) ){//si es el día que quiero $eventoObj->addFecha($fecha); } $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha))); } break; case 3://mensual $diasArr = explode(",", $evento["CalendarioReglas_dias_str"]); //reglas $weekTxt = array(1=>"first", 2=>"second", 3=>"third", 4=>"fourth", -1=>"last"); $dayname = array("sun", "mon", "tue", "wed", "thu", "fri", "sat"); $fecha = date ("Y-m-01", strtotime($fecha));//empieza a revisar en el primer día del mes $semana = $evento["CalendarioReglas_semana"]; while (strtotime($fecha) <= strtotime($evento["CalendarioReglas_fecha_final"])) { foreach($diasArr as $d){ //echo "-->". intval(date("w", strtotime($fecha)))." == ". intval($d)."[".$fecha."]"; if($semana == 1 && intval(date("w", strtotime($fecha))) == intval($d) ){//si el día actual es el que quiero lo guarda $eventoObj->addFecha($fecha); }else{//si no calcula siguiente día if(intval(date("w", strtotime($fecha))) == intval($d)){ $fechaTmp = date ("Y-m-d", strtotime($weekTxt[$semana-1]." ".$dayname[$d], strtotime($fecha))); }else{ $fechaTmp = date ("Y-m-d", strtotime($weekTxt[$semana]." ".$dayname[$d], strtotime($fecha))); } $eventoObj->addFecha($fechaTmp); } } $fecha = date ("Y-m-01", strtotime("+1 month", strtotime($fecha)));//siguiente mes primer día } break; default: //no se repite $unico = true; $eventoObj->addFecha($fecha); } if($unico){ if($clase["todo_dia"]){ $stmt = $pdo->prepare('Select * from fu_calendarioevento_fecha(:id, :fecha, NULL, NULL)'); }else{ $stmt = $pdo->prepare('Select * from fu_calendarioevento_fecha(:id, :fecha, :hora_i, :hora_f)'); $stmt->bindParam(":hora_i", $clase["hora_ini"]); $stmt->bindParam(":hora_f", $clase["hora_fin"]); } $stmt->bindParam(":id", $clase["id_db"]); $stmt->bindParam(":fecha", $clase["fecha_nueva"]); //$return["debug"] = "Select * from fu_calendarioevento_fecha(".$clase["id_db"].", ".$clase["fecha_nueva"].", :hora_i, :hora_f)"; if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al editar la fecha.".$t[2]; $error = true; } }else{ //Obtiene eventos modificados (fechas que cambiaron) $stmt = $pdo->prepare('Select * from fs_calendarioeventoeditado(:id)'); $stmt->bindParam(":id", $clase["id_db"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al obtener las fechas editadas.".$t[2]; $error = true; } if(!$error){ //modifica fechas $eventosEditados_rs = $stmt->fetchAll(); $stmt->closeCursor(); foreach($eventosEditados_rs as $modif){ $eventoObj->replaceFecha($modif["CalendarioEventoEditado_fecha_origen"], $modif["CalendarioEventoEditado_fecha_nueva"], $modif["CalendarioEventoEditado_hora_inicial"], $modif["CalendarioEventoEditado_hora_final"]); } //Quitar fechas de excepción foreach(explode(",", $evento["CalendarioEvento_excepcion_str"]) as $ex){ $eventoObj->removeFecha($ex); } //revisa que la fecha del evento nueva no se repita con las fechas que ya tenía el evento /*if($eventoObj->hasFecha($clase["fecha_nueva"])){ $return["error"] .= "El evento ya ocurre en esa fecha y no se puede duplicar."; $error = true; }else{*/ //modifica la fecha if($clase["todo_dia"]){ $stmt = $pdo->prepare('Select * from fi_calendarioeventoeditado(:id, :fecha_o, :fecha_n, NULL, NULL)'); }else{ $stmt = $pdo->prepare('Select * from fi_calendarioeventoeditado(:id, :fecha_o, :fecha_n, :hora_i, :hora_f)'); $stmt->bindParam(":hora_i", $clase["hora_ini"]); $stmt->bindParam(":hora_f", $clase["hora_fin"]); } $stmt->bindParam(":id", $eventoObj->id_db); $stmt->bindParam(":fecha_o", $clase["fecha_orig"]); $stmt->bindParam(":fecha_n", $clase["fecha_nueva"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al editar la fecha.".$t[2]; $error = true; } //} } }//fin no unico } }//fin hay cambio de fecha if(!$error){ $pdo->commit(); unset($return["error"]); $return["ok"] = "El evento se editó correctamente"; //Inserta Log $log = new LogActividad(); $desc_log = "Actualiza evento EventoID[".$clase["id_db"]."] Titulo[".$clase["titulo"]."] Original[".$clase["fecha_orig"]."] Día[".$clase["fecha_nueva"]."] HoraIni[".$clase["hora_ini"]."] HoraFin[".$clase["hora_fin"]."]"; $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 actualizar los datos del evento.". $e->getMessage();; } } $return["json"] = json_encode($return); echo json_encode($return); ?>