| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 | 
							- <?php
 
- /*
 
-  * Recibe los perfiles y periodo por GET.
 
-  */
 
- require_once("./include/nocache.php");
 
- require_once("./include/bd_pdo.php");
 
- require_once("./include/util.php");
 
- include_once("./include/iCalcreator/autoload.php");
 
- include_once("./classes/LogICal.php");
 
- use Kigkonsult\Icalcreator\Vcalendar;
 
- function getVcalDia($diaNum){
 
-     switch($diaNum){
 
-         case 0: return Vcalendar::SU;
 
-         case 1: return Vcalendar::MO;
 
-         case 2: return Vcalendar::TU;
 
-         case 3: return Vcalendar::WE;
 
-         case 4: return Vcalendar::TH;
 
-         case 5: return Vcalendar::FR;
 
-         case 6: return Vcalendar::SA;
 
-     }
 
- }
 
- function getDiasArray($diasStr, $week_num = false, $freq = 0){
 
-     $diasArr = explode(",", $diasStr);
 
-     $final_arr = array();
 
-     foreach($diasArr as $dia){
 
-         if(!$week_num)
 
-             $final_arr[] = array(Vcalendar::DAY => getVcalDia($dia));
 
-         else
 
-             $final_arr[] = array($freq, Vcalendar::DAY => getVcalDia($dia));
 
-     }
 
-     return $final_arr;
 
- }
 
- function fechaICal($fecha, $hora="", $tz=""){
 
-     $fecha = fechaGuion($fecha);
 
-     if($hora!= ""){
 
-         if($tz != ""){
 
-             return str_replace('-', '', $fecha).'T'.str_replace(':', '', $hora)." ".$tz;
 
-         }else{
 
-             return str_replace('-', '', $fecha).'T'.str_replace(':', '', $hora);
 
-         }
 
-     }
 
-     return str_replace('-', '', $fecha);
 
- }
 
- if(!isset($_GET["per"], $_GET["valida"]) ){
 
-     echo "Error! La liga proporcionada no es válida.";
 
-     exit();
 
- }
 
- if(isset($_GET["perf"])){
 
-     $perfiles = trim(filter_input(INPUT_GET, "perf", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
 
- }else{
 
-     $perfiles = "4";
 
- }
 
- $periodo = filter_input(INPUT_GET, "per", FILTER_SANITIZE_NUMBER_INT);//limpia texto
 
- if(crypt($periodo.$perfiles, "ps") != $_GET["valida"]){
 
-     echo "Error! La liga proporcionada no es válida.";
 
-     exit();
 
- }
 
- // Obtiene fecha máxima y min
 
- $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 3)');//periodo
 
- $stmt->bindParam(":periodo", $periodo);
 
- if(!$stmt->execute()){
 
-     echo "Ocurrió un error al cargar las fechas del periodo";
 
-     exit();
 
- }
 
- $fecha_rs = $stmt->fetch();
 
- $fecha_min = date('d/m/Y', strtotime($fecha_rs["FechaImportante_inicial"].' - 1 month '));
 
- $fecha_max = date('d/m/Y', strtotime($fecha_rs["FechaImportante_final"].' + 1 month '));
 
- $stmt->closeCursor();
 
- $stmt = null;
 
- //Obtiene datos de periodo
 
- $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
 
- $stmt->bindParam(":periodo", $periodo);
 
- if(!$stmt->execute()){
 
-     //print_r($stmt->errorInfo());
 
-     echo "Ocurrió un error al cargar los datos del periodo";
 
-     exit();
 
- }
 
- $periodo_rs = $stmt->fetch();
 
- $stmt->closeCursor();
 
- $eventos_display = array();//todos los eventos para exportar
 
- $stmt = $pdo->prepare('Select * from fs_calendarioevento(:per, :fecha_i, :fecha_f, :perf, false)');
 
- $stmt->bindParam(":per", $periodo);
 
- $stmt->bindParam(":fecha_i", $fecha_min);
 
- $stmt->bindParam(":fecha_f", $fecha_max);
 
- $stmt->bindParam(":perf", $perfiles);
 
- unset($perfiles);
 
- if(!$stmt->execute()){
 
-     echo "Ocurrió un error al obtener los eventos.";
 
-     exit();
 
- }
 
- $eventos_rs = $stmt->fetchAll();
 
- $stmt->closeCursor();
 
- //-------------------------
 
- //Obtiene fechas de periodo
 
- $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
 
- $stmt->bindParam(":periodo", $periodo);
 
- if(!$stmt->execute()){
 
-     echo "Ocurrió un error al cargar los datos del periodo";
 
-     exit();
 
- }
 
- $periodo_rs = $stmt->fetch();
 
- $stmt->closeCursor();
 
- //Configuración de calendario
 
- $tz = "America/Mexico_City";
 
- $config = [
 
-     Vcalendar::UNIQUE_ID => "IngenieriaLaSalle",
 
-     Vcalendar::LANGUAGE=> "es",
 
- ];
 
- $calendar = Vcalendar::factory( $config )
 
-         // required of some calendar software
 
-     ->setMethod( Vcalendar::PUBLISH )
 
-     ->setXprop(  Vcalendar::X_WR_CALNAME,  "Ingeniería La Salle ".date('Y,m', strtotime($periodo_rs["Periodo_fecha_inicial"])) )
 
-     ->setXprop(  Vcalendar::X_WR_CALDESC,  "Calendario de Ingeniería ".$periodo_rs["Periodo_desc"] )
 
-     ->setXprop(  Vcalendar::X_WR_RELCALID,"3E26604A-50F4-4449-8B3E-E4F4932D05B5" )
 
-     ->setXprop(  Vcalendar::X_WR_TIMEZONE, $tz );
 
- $calendar->VtimezonePopulate( $tz );
 
- $fecha = $periodo_rs["Periodo_fecha_inicial"];
 
- $next_day = date('Y-m-d', strtotime($fecha.' + 1 day '));
 
- //Crea evento iCal
 
- $calendar->newVevent()
 
-         ->setSequence( 0 )
 
-         ->setSummary("Inicio de cursos")
 
-         ->setDtstart($fecha, [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-         ->setDtend( $next_day, [ Vcalendar::VALUE => Vcalendar::DATE ]);
 
- $fecha = $periodo_rs["Periodo_fecha_final"];
 
- $next_day = date('Y-m-d', strtotime($fecha.' + 1 day '));
 
- //Crea evento iCal
 
- $calendar->newVevent()
 
-         ->setSequence( 0 )
 
-         ->setSummary("Fin de cursos")
 
-         ->setDtstart($fecha, [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-         ->setDtend( $next_day, [ Vcalendar::VALUE => Vcalendar::DATE ]);
 
- $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 2)');//extras
 
- $stmt->bindParam(":periodo", $periodo);
 
- if(!$stmt->execute()){
 
-     echo "Ocurrió un error al cargar las fechas del periodo";
 
-     exit();
 
- }
 
- $fecha_rs = $stmt->fetch();
 
- if( is_array($fecha_rs) && count($fecha_rs) > 0){
 
-     $fecha = $fecha_rs["FechaImportante_inicial"];
 
-     $next_day = date('Y-m-d', strtotime($fecha.' + 1 day '));
 
-     //Crea evento iCal
 
-     $calendar->newVevent()
 
-             ->setSequence( 0 )
 
-             ->setSummary("Exámenes Extraordinarios")
 
-             ->setDtstart($fecha, [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-             ->setDtend( $next_day, [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-             ->setRrule( 
 
-                 [
 
-                     Vcalendar::FREQ  => Vcalendar::WEEKLY,
 
-                     Vcalendar::BYDAY => getDiasArray("1,2,3,4,5", false),
 
-                     Vcalendar::UNTIL  => new DateTime($fecha_rs["FechaImportante_final"] ),
 
-                 ]
 
-             );
 
- }
 
- $stmt->closeCursor();
 
- $stmt = null;
 
- //-------------------------
 
- //Recorre eventos
 
- foreach($eventos_rs as $evento){
 
-     $id_db = $evento["CalendarioEvento_id"];
 
-     $fecha = fechaGuion($evento["CalendarioEvento_fecha"]);
 
-     //Crea evento iCal
 
-     $icalEvent = $calendar->newVevent()
 
-             ->setSequence( 0 )
 
-             ->setSummary($evento["CalendarioEvento_titulo"]);
 
-     if(trim($evento["CalendarioEvento_desc"]) != ""){
 
-         $icalEvent->setDescription(trim($evento["CalendarioEvento_desc"]));
 
-     }
 
-     if($evento["CalendarioEvento_todo_dia"]){//sin hora
 
-         $next_day = date('Y-m-d', strtotime($fecha.' + 1 day '));
 
-         $icalEvent->setDtstart($fecha, [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-             ->setDtend( $next_day, [ Vcalendar::VALUE => Vcalendar::DATE ]);
 
-     }else{//con horas
 
-         $icalEvent->setDtstart( new DateTime( $fecha.' '.$evento["CalendarioEvento_hora_inicial"], new DateTimezone( $tz )))
 
-             ->setDtend(  new DateTime( $fecha.' '.$evento["CalendarioEvento_hora_final"], new DateTimezone( $tz )));
 
-     }
 
-     //-- Calcular posibles fechas e insertar fechas en objeto --
 
-     switch($evento["CalendarioRepeticion_id"]){
 
-         case 1: //diario
 
-             $icalEvent->setRrule( 
 
-                 [
 
-                     Vcalendar::FREQ  => Vcalendar::DAILY,
 
-                     Vcalendar::UNTIL  => new DateTime($evento["CalendarioReglas_fecha_final"] ),//no incluyente
 
-                 ]
 
-             );
 
-         break;
 
-         case 2: //semanal
 
-             $icalEvent->setRrule( 
 
-                 [
 
-                     Vcalendar::FREQ  => Vcalendar::WEEKLY,
 
-                     Vcalendar::BYDAY => getDiasArray($evento["CalendarioReglas_dias_str"], false),
 
-                     /*Vcalendar::BYDAY => [
 
-                         [ -1, Vcalendar::DAY => Vcalendar::WE ], // last WE
 
-                         [  3, Vcalendar::DAY => Vcalendar::TH ], // third TH
 
-                         [  5, Vcalendar::DAY => Vcalendar::FR ], // fifth FR
 
-                         [     Vcalendar::DAY => Vcalendar::MO ]  // every MO
 
-                     ],*/
 
-                     Vcalendar::UNTIL  => new DateTime($evento["CalendarioReglas_fecha_final"] ),//no incluyente
 
-                 ]
 
-             );
 
-         break;
 
-         case 3://mensual
 
-             $icalEvent->setRrule( 
 
-                 [
 
-                     Vcalendar::FREQ  => Vcalendar::MONTHLY,
 
-                     Vcalendar::BYDAY => getDiasArray($evento["CalendarioReglas_dias_str"], true, $evento["CalendarioReglas_semana"]),
 
-                     Vcalendar::UNTIL  => new DateTime($evento["CalendarioReglas_fecha_final"] ),//no incluyente
 
-                 ]
 
-             );
 
-         break;
 
-     }
 
-     //Obtiene eventos modificados (fechas que cambiaron)
 
-     $stmt = $pdo->prepare('Select * from fs_calendarioeventoeditado(:id)');
 
-     $stmt->bindParam(":id", $id_db);
 
-     if(!$stmt->execute()){
 
-         echo "Ocurrió un error al obtener las fechas editadas.";
 
-         exit();
 
-     }
 
-     //--Modifica fechas
 
-     $eventosEditados_rs = $stmt->fetchAll();
 
-     $stmt->closeCursor();
 
-     foreach($eventosEditados_rs as $modif){
 
-         $eventoEdit = $calendar->newVevent()
 
-             ->setUid( $icalEvent->getUid())
 
-             ->setSequence( 1 )
 
-             ->setSummary( $icalEvent->getSummary() )
 
-             ->setDescription($icalEvent->getDescription());
 
-         if($evento["CalendarioEvento_todo_dia"]){//sin hora
 
-             $next_day = date('Y-m-d', strtotime($modif["CalendarioEventoEditado_fecha_nueva"].' + 1 day '));
 
-             $eventoEdit->setDtstart($modif["CalendarioEventoEditado_fecha_nueva"], [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-                 ->setDtend( $next_day, [ Vcalendar::VALUE => Vcalendar::DATE ])
 
-                 ->setRecurrenceid( $modif["CalendarioEventoEditado_fecha_origen"], [ Vcalendar::VALUE => Vcalendar::DATE ] );//obtiene fecha que se cambia;
 
-         }else{//con horas
 
-             $eventoEdit->setDtstart(
 
-                     new DateTime(fechaICal($modif["CalendarioEventoEditado_fecha_nueva"], $modif["CalendarioEventoEditado_hora_inicial"]), new DateTimezone( $tz ))
 
-                 )
 
-                     ->setDtend(
 
-                     new DateTime(fechaICal($modif["CalendarioEventoEditado_fecha_nueva"], $modif["CalendarioEventoEditado_hora_final"]), new DateTimezone( $tz ))
 
-                 )
 
-                     ->setRecurrenceid( fechaICal($modif["CalendarioEventoEditado_fecha_origen"], $evento["CalendarioEvento_hora_inicial"],$tz) );//obtiene fecha que se cambia;
 
-         }
 
-     }
 
-     //--Quitar fechas de excepción
 
-     if($evento["CalendarioEvento_excepcion_str"] != ""){
 
-         foreach(explode(",", $evento["CalendarioEvento_excepcion_str"]) as $ex){
 
-             $exArr = explode(" ", $ex);
 
-             if($evento["CalendarioEvento_todo_dia"]){//sin hora
 
-                 $icalEvent->setExdate( fechaICal($exArr[0]), [ Vcalendar::VALUE => Vcalendar::DATE ] );
 
-             }else{
 
-                 $icalEvent->setExdate( $ex, new DateTimezone( $tz ) );
 
-             }
 
-         }
 
-     }
 
- }//foreach
 
- unset($eventos_rs);
 
- $data = "[ REMOTE_ADDR = ".$_SERVER['REMOTE_ADDR']." ]";
 
- $data .= "[ QUERY_STRING = ".$_SERVER['QUERY_STRING']." ]";
 
- $logObj = new LogICal();
 
- $logObj->appendLog($data);
 
- echo $calendar->vtimezonePopulate()->createCalendar();
 
 
  |