calendario_insert.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /* AJAX
  3. * Inserta datos del objeto para el calendario
  4. * Recibe:
  5. * json
  6. * Return:
  7. * id insertado o cadena de error
  8. */
  9. require_once("../../include/constantes.php");
  10. require_once("../../include/nocache.php");
  11. require_once("../../include/bd_pdo.php");
  12. require_once("../../include/util.php");
  13. require_once("../../classes/ValidaSesion.php");
  14. require_once("../classes/LogActividad.php");//die on error
  15. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  16. $objSesion = new ValidaSesion($pdo, 112, GEMA);
  17. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  18. $return["error"] = "Error! No tienes permisos para realizar esta acción.";
  19. }else if(!isset($_POST["json"])){
  20. $return["error"] = "Error! No se recibió la información del evento.";
  21. }else{
  22. $clase = json_decode($_POST["json"], true);
  23. $return["error"] = "";
  24. try {
  25. $pdo->beginTransaction();
  26. $error = false;
  27. //---- Insertar ----------
  28. //Inserta evento
  29. if($clase["todo_dia"])
  30. $stmt = $pdo->prepare('Select * from fi_calendarioevento(:titulo, :fecha, true, NULL, :per, :desc, NULL, NULL, NULL, true)');
  31. else{
  32. $stmt = $pdo->prepare('Select * from fi_calendarioevento(:titulo, :fecha, false, NULL, :per, :desc, :hora_i, :hora_f, NULL, true)');
  33. $stmt->bindParam(":hora_i", $clase["hora_ini"]);
  34. $stmt->bindParam(":hora_f", $clase["hora_fin"]);
  35. }
  36. $stmt->bindParam(":titulo", $clase["titulo"]);
  37. $stmt->bindParam(":fecha", $clase["fecha_ini"]);
  38. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  39. $stmt->bindParam(":desc", $clase["desc"]);
  40. //if($clase["periodo"] != 0){ $stmt->bindParam(":per", $_SESSION["periodo_id"]);}
  41. if(!$stmt->execute()){
  42. $t = $stmt->errorInfo();
  43. $return["error"] .= "Ocurrió un error al insertar el evento '".$clase["titulo"]."'".$t[2];
  44. $error = true;
  45. }
  46. $rs = $stmt->fetch();
  47. $id = intval($rs["fi_calendarioevento"]);
  48. $stmt->closeCursor();
  49. //Inserta insignia
  50. if($clase["tiene_evidencia"]){
  51. $stmt = $pdo->prepare('Select * from fi_insignia(:titulo, :desc, :tipo, :puesto, true, :evidencia, true)');
  52. $stmt->bindParam(":evidencia", $clase["evidencia"]);
  53. }else{
  54. $stmt = $pdo->prepare('Select * from fi_insignia(:titulo, :desc, :tipo, :puesto, false, NULL, true)');
  55. }
  56. $stmt->bindParam(":titulo", $clase["titulo"]);
  57. $stmt->bindParam(":desc", $clase["desc"]);
  58. $stmt->bindParam(":tipo", $clase["tipo"]);
  59. $stmt->bindParam(":puesto", $clase["puesto"]);
  60. if(!$stmt->execute()){
  61. $t = $stmt->errorInfo();
  62. $return["error"] .= "Ocurrió un error al insertar la insignia '".$clase["titulo"]."'".$t[2];
  63. $error = true;
  64. }
  65. $rs = $stmt->fetch();
  66. $id_insignia = intval($rs["fi_insignia"]);
  67. $stmt->closeCursor();
  68. //Inserta insignia General
  69. if($clase["tiene_inscripciones"]){
  70. $fecha_ini = fechaGuion($clase["insc_ini"]);
  71. $fecha_fin = fechaGuion($clase["insc_fin"])." ".trim($clase["insc_hora_fin"]).":00";
  72. $stmt = $pdo->prepare('Select * from fi_insigniageneral(:insignia, :evento, :fecha_ini, :fecha_fin)');
  73. $stmt->bindParam(":fecha_ini", $fecha_ini);
  74. $stmt->bindParam(":fecha_fin", $fecha_fin);
  75. }else{
  76. $stmt = $pdo->prepare('Select * from fi_insigniageneral(:insignia, :evento, NULL, NULL)');
  77. }
  78. $stmt->bindParam(":insignia", $id_insignia);
  79. $stmt->bindParam(":evento", $id);
  80. if(!$stmt->execute()){
  81. $t = $stmt->errorInfo();
  82. $return["error"] .= "Ocurrió un error al insertar la insignia general'".$clase["titulo"]."'".$t[2];
  83. $error = true;
  84. }
  85. $stmt->closeCursor();
  86. unset($rs);
  87. if($id == 0){
  88. $error = true;
  89. }
  90. if(!$error && isset($clase["rrule"]) && is_array($clase["rrule"])){//Revisa reglas
  91. $rruleObj = $clase["rrule"];
  92. if($rruleObj["rep"] != 0){
  93. switch($rruleObj["rep"]){
  94. case 1://diario
  95. $stmt = $pdo->prepare('Select * from fi_calendarioreglas(:id, 1, NULL, NULL, :fecha_f)');
  96. break;
  97. case 2://semanal
  98. $stmt = $pdo->prepare('Select * from fi_calendarioreglas(:id, 2, :dias, NULL, :fecha_f)');
  99. $stmt->bindParam(":dias", $rruleObj["dias"]);
  100. break;
  101. case 3://mensual
  102. $stmt = $pdo->prepare('Select * from fi_calendarioreglas(:id, 3, :dias, :semana, :fecha_f)');
  103. $stmt->bindParam(":dias", $rruleObj["dias"]);
  104. $stmt->bindParam(":semana", $rruleObj["semana"]);
  105. break;
  106. }
  107. $stmt->bindParam(":id", $id);
  108. $stmt->bindParam(":fecha_f", $rruleObj["fecha_fin"]);
  109. if(!$stmt->execute()){
  110. $t = $stmt->errorInfo();
  111. $return["error"] .= "Ocurrió un error al insertar las reglas de repetición del evento '".$clase["titulo"]."'".$t[2];
  112. $error = true;
  113. }
  114. }
  115. }//fin reglas
  116. //Inserta Perfiles
  117. $perfiles_arr = array(1,3,4);
  118. if(!$error && is_array($perfiles_arr) ){
  119. foreach($perfiles_arr as $perfil){
  120. if(!$error){
  121. $stmt = $pdo->prepare('Select * from fi_calendarioevento_perfil(:id, :perf)');
  122. $stmt->bindParam(":id", $id);
  123. $stmt->bindParam(":perf", $perfil);
  124. if(!$stmt->execute()){
  125. $t = $stmt->errorInfo();
  126. $return["error"] .= "Ocurrió un error al insertar los perfiles. ".$t[2];
  127. $error = true;
  128. }
  129. $stmt->closeCursor();
  130. }
  131. }
  132. }//fin perfiles
  133. //Inserta atributos
  134. if(!$error && !empty($clase["atributos"]) ){
  135. $stmt = $pdo->prepare('Select * from fi_insignia_atributoegreso(:id, :atr, :nivel)');
  136. $stmt->bindParam(":id", $id_insignia);
  137. for($i=0; $i< count($clase["atributos"]) && !$error; $i++){
  138. if( intval($clase["atributos"][$i]["id"]) != 0){
  139. $stmt->bindParam(":atr", $clase["atributos"][$i]["id"]);
  140. $stmt->bindParam(":nivel", $clase["atributos"][$i]["nivel"]);
  141. if(!$stmt->execute()){
  142. $t = $stmt->errorInfo();
  143. $return["error"] .= "Ocurrió un error al insertar los atributos. ".$t[2];
  144. $error = true;
  145. }
  146. }
  147. }
  148. $stmt->closeCursor();
  149. }
  150. if(!$error){
  151. $pdo->commit();
  152. unset($return["error"]);
  153. $return["ok"] = "El evento se guardó correctamente";
  154. $return["id"] = $id;
  155. //Inserta Log
  156. $log = new LogActividad();
  157. $desc_log = "Inserta en insignia general EventoID[".$id."] Insignia[".$id_insignia."] Titulo[".$clase["titulo"]."] Día[".$clase["fecha_ini"]."] HoraIni[".$clase["hora_ini"]."] HoraFin[".$clase["hora_fin"]."]";
  158. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  159. }else
  160. $pdo->rollBack();
  161. $stmt = null; // cierra conexion
  162. } catch(PDOException $e) {
  163. $pdo->rollBack();
  164. $return["error"] = "Ocurrió un error al insertar los datos del evento.". $e->getMessage();
  165. }
  166. }
  167. $return["json"] = json_encode($return);
  168. echo json_encode($return);
  169. ?>