HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux aritmodecarnaval.es 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/www/torresncgolf/instalaciones/system_old/application/controllers/reservas.php
<?php

class Reservas extends Controller {

	function Reservas()
	{
		parent::Controller();	
		$this->load->helper(array('form','url', 'util'));
		$this->load->library('session');
	}
	
	function index()
	{
		$this->session->set_userdata('actividad_actual_id', '0');
		load_template('reservas/reservas_view');
	}

	function mostrar_menu(){
		if (!$this->session->userdata('user_logged_in')){
			redirect('login');
		}
		
		$actividad_seleccionada = dejar_numericos($this->input->post('actividad_id_seleccionada'));
		
		
		$actividades = $this->db->query('select * from actividad');
		$data_menu_view = array();
		$data_menu_view['actividades'] = $actividades;
		$data_menu_view['actividad_seleccionada'] = $actividad_seleccionada;
		$this->load->view('reservas/menu_view',$data_menu_view);
		

	}

	function mostrar_actividad (){
		if (!$this->session->userdata('user_logged_in')){
			redirect('login');
		}
		
		$data = array();
		
		// Desplazamiento en semanas
		if ($this->input->post('offset') != '') 
			$offset = dejar_numericos($this->input->post('offset'));
		else 
			$offset = 0;

		// Recupero la actividad elegida de la base de datos
		$actividad_id = dejar_numericos($this->input->post('id'));
		
		// La guardamos en sesión para saber cual está explorarndo ahora
		$this->session->set_userdata('actividad_actual_id', $actividad_id);
			
		$actividades = $this->db->query('select * from actividad where id='.$actividad_id);
		// Comprobamos que la actividad existe
		if ($actividades->num_rows()==0){
			echo 'La actividad indicada no existe.';
			return;
		}
		$actividad = $actividades->row();

		// Ahora tengo que establecer los límites horarios
		$data['hora_ini'] = $actividad->hora_ini;
		$data['hora_fin'] = $actividad->hora_fin;

		// Obtengo el dia de la semana
		$fecha_ahora = new DateTime("now", new DateTimeZone('Europe/Madrid'));
		$timestamp_ahora = $fecha_ahora->format('U') + $fecha_ahora->format('Z');
		$horario_verano = $fecha_ahora->format('I');
		if ($horario_verano == 1){
		  $timestamp_ahora+=3600;
		}
		$fecha_ahora_mysql = date('Y-m-d H:i:s',$timestamp_ahora);

		$dia_semana = $fecha_ahora->format("w");
		if ($dia_semana == 0) $dia_semana = 7 ;
		// Me muevo al primer dia de la semana
		for ($i=1;$i<$dia_semana;$i++)
			$fecha_ahora->modify("-1 day");		
		//$una_semana = new DateInterval('P7D');
		if ($offset > 0){		
			for ($i=0;$i<$offset;$i++){
				$fecha_ahora->modify("+7 day");
			}
			$dia_semana = 0;
		}
		if ($offset < 0){
			for ($i=0;$i>$offset;$i--){
				$fecha_ahora->modify("-7 day");
			}
			$dia_semana = 8;	
		}

		$data['dia_semana']=$dia_semana;
		$data['offset']=$offset;
		
		
		// Establezco las 7 fechas de la semana
		for ($j=1;$j<=7;$j++){
			$timestamp_temp = $fecha_ahora->format('U') + $fecha_ahora->format('Z');
            $horario_verano = $fecha_ahora->format('I');
            if ($horario_verano == 1){
                $timestamp_temp+=3600;
            }
			$data['D'.$j] = getdate($timestamp_temp);
			
			if ($data['D'.$j]['weekday'] == 'Monday' ){
				$data['D'.$j]['weekday'] = 'Lun';
			}
			else if ($data['D'.$j]['weekday'] == 'Tuesday' ){
                $data['D'.$j]['weekday'] = 'Mar';
            }
            else if ($data['D'.$j]['weekday'] == 'Wednesday' ){
                $data['D'.$j]['weekday'] = 'Mie';
            }
            else if ($data['D'.$j]['weekday'] == 'Thursday' ){
                $data['D'.$j]['weekday'] = 'Jue';
            }
            else if ($data['D'.$j]['weekday'] == 'Friday' ){
                $data['D'.$j]['weekday'] = 'Vie';
            }
            else if ($data['D'.$j]['weekday'] == 'Saturday' ){
                $data['D'.$j]['weekday'] = 'Sab';
            }
            else if ($data['D'.$j]['weekday'] == 'Sunday' ){
                $data['D'.$j]['weekday'] = 'Dom';
            }
           
		   
		    if ($data['D'.$j]['month'] == 'January' ){
                $data['D'.$j]['month'] = 'Enero';
            } else if ($data['D'.$j]['month'] == 'February' ){
                $data['D'.$j]['month'] = 'Febrero';
            } else if ($data['D'.$j]['month'] == 'March' ){
                $data['D'.$j]['month'] = 'Marzo';
            } else if ($data['D'.$j]['month'] == 'April' ){
                $data['D'.$j]['month'] = 'Abril';
            } else if ($data['D'.$j]['month'] == 'May' ){
                $data['D'.$j]['month'] = 'Mayo';
            } else if ($data['D'.$j]['month'] == 'June' ){
                $data['D'.$j]['month'] = 'Junio';
            } else if ($data['D'.$j]['month'] == 'July' ){
                $data['D'.$j]['month'] = 'Julio';
            } else if ($data['D'.$j]['month'] == 'August' ){
                $data['D'.$j]['month'] = 'Agosto';
            } else if ($data['D'.$j]['month'] == 'September' ){
                $data['D'.$j]['month'] = 'Septiembre';
            } else if ($data['D'.$j]['month'] == 'October' ){
                $data['D'.$j]['month'] = 'Octubre';
            } else if ($data['D'.$j]['month'] == 'November' ){
                $data['D'.$j]['month'] = 'Noviembre';
            } else if ($data['D'.$j]['month'] == 'December' ){
                $data['D'.$j]['month'] = 'Diciembre';
            } 
			
			$fecha_ahora->modify("+1 day");
		}
		

		
		$reservas = $this->db->query('
			select r.id as id, r.fecha as fecha, r.usuario_id as usuario_id, r.actividad_id as actividad_id, u.alias as alias, IF ( \''.$fecha_ahora_mysql.'\' > r.fecha , 1 ,0 ) as pasada 
			from reserva r, usuario u 
			where r.usuario_id=u.id and r.actividad_id='.$actividad_id.' 
				and r.fecha between \''. $data['D1']['year'].'-'.$data['D1']['mon'].'-'.$data['D1']['mday'] .' 00:00:00\' 
				and \''. $data['D7']['year'].'-'.$data['D7']['mon'].'-'.$data['D7']['mday'].' 23:59:59\'' );
		
		$data['reservas'] = $reservas;
		$data['actividad_id'] = $actividad_id;
		
		//print_r($data);
		
		$this->load->view('reservas/calendario_reservas_view', $data);

	}
	
	
	function mostrar_comentarios (){
		if (!$this->session->userdata('user_logged_in')){
			redirect('login');
		}

		$reserva_id = dejar_numericos($this->input->post('id'));
		
		$comentarios = $this->db->query('select * from comentario where reserva_id='.$reserva_id);
		
		echo '<h1>Reserva '. $reserva_id .'</h1>';
				
		if ($comentarios->num_rows() > 0){
						
			echo '<ul>';
			foreach ($comentarios->result() as $comentario)
			{
			     $usuarios = $this->db->query('select * from usuario where id='.$comentario->usuario_id);
				 $alias = $usuarios->row()->alias;
				 echo '<li><b>' . $alias . ':</b> ' .$comentario->texto . '</li>';
			}
					
			echo '</ul>';	
		}
	}	

	function hacer_reserva ($actividad_id){
		if (!$this->session->userdata('user_logged_in')){
			redirect('login');
		}

		$hora = dejar_numericos($this->input->post('hora'));
		$dia = dejar_numericos($this->input->post('dia'));
		$mes = dejar_numericos($this->input->post('mes'));
		$anyo = dejar_numericos($this->input->post('anyo'));
		
        $timeStamp = mktime($hora,0,0,$mes,$dia,$anyo);
        $fecha_mysql = date('Y-m-d H:i:s',$timeStamp); 
		
		$fecha_solicitada = new DateTime($fecha_mysql, new DateTimeZone('Europe/Madrid'));
		$fecha_ahora = new DateTime("now", new DateTimeZone('Europe/Madrid'));
		$timestamp_ahora = $fecha_ahora->format('U');
		$fecha_ahora_mysql = date('Y-m-d H:i:s',$timestamp_ahora);

        $user_id = $this->session->userdata('user_id'); 
		
		// Comprobar que no sea una fecha pasada
		if ($fecha_solicitada < $fecha_ahora) {
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero la fecha solicitada ya pasó', $user_id );			
			echo 'La fecha solicitada se encuentra en el pasado. No se pueden hacer reservas en el pasado.';
			return;
		}
		
		if (!$this->session->userdata('user_logged_in')){
			redirect('login');
		}
		// Comprobamos el número de reservas vigentes del usuario
		$reservas_vigentes = $this->db->query('
			select *
			from reserva
			where usuario_id='.$user_id.' and actividad_id='.$actividad_id.' and fecha > \''.$fecha_ahora_mysql.'\'' );
				
		$actividades = $this->db->query('select * from actividad where id='.$actividad_id);	
		// Comprobamos que la actividad existe
		if ($actividades->num_rows()==0){
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero la actividad '.$actividad_id.' no existe', $user_id );			
			echo 'La actividad indicada no existe.';
			return;
		}
		$actividad = $actividades->row();

		// Comprobar que no me salgo de los límites horarios
		if (($hora < $actividad->hora_ini) || ($hora > $actividad->hora_fin)){
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero eligió una hora fuera de horario', $user_id );
			echo 'Ha seleccionado una hora fuera del horario establecido. Seleccione otra hora dentro de los márgenes válidos.';
			return;						
		}
					
		if ($reservas_vigentes->num_rows() >= $actividad->max_reservas){
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero alcanzó el máximo de reservas', $user_id );
			echo 'Ha alcanzado el máximo de reservas. No puede realizar más reservas. Si quiere puede cancelar una de las que ya tiene hechas para poder reservar.';
			return;			
		}
				
		$ya_reservada = $this->db->query('SELECT * FROM reserva r, usuario u WHERE u.id=r.usuario_id and r.fecha=\''. $fecha_mysql .'\' and r.actividad_id='.$actividad_id );		
		if ($ya_reservada->num_rows() > 0){	
			echo 'El usuario '. $ya_reservada->row()->alias . ' ya tiene reservada esa hora. Seleccione otra distinta.' ;
			return;
		}
				
		if ($this->db->query('INSERT INTO reserva (fecha,usuario_id,actividad_id) VALUES(\''.$fecha_mysql .'\','. $user_id .','.$actividad_id.')' )) {
			$reserva_creada = $this->db->query('SELECT id FROM reserva WHERE fecha=\''.$fecha_mysql .'\' AND usuario_id='. $user_id .' AND actividad_id='.$actividad_id ); 
		
			if ($reserva_creada->num_rows()==0){
			    registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero no fue creada', $user_id );
				echo 'La reserva no se realizó por un problema extraño con la base de datos.';
				return;
			}
			registrar_evento('reservas', 'info', 'El usuario ['.$this->session->userdata('alias').'] ha reservado', $user_id, $reserva_creada->row()->id );
			echo 'La reserva se realizó correctamente.';
		}else{
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero falló la inserción SQL', $user_id );
			echo 'La reserva no se realizó por un problema con la base de datos.';
		}
	}


	function deshacer_reserva ($actividad_id){
		if (!$this->session->userdata('user_logged_in')){
			redirect('login');
		}
		
		$hora = dejar_numericos($this->input->post('hora'));
		$dia = dejar_numericos($this->input->post('dia'));
		$mes = dejar_numericos($this->input->post('mes'));
		$anyo = dejar_numericos($this->input->post('anyo'));

        $timeStamp = mktime($hora,0,0,$mes,$dia,$anyo);    //Create time stamp of the first day from the give date.
        $fecha_mysql = date('Y-m-d H:i:s',$timeStamp);    //get first day of the given month

		$fecha_solicitada = new DateTime($fecha_mysql, new DateTimeZone('Europe/Madrid'));
		$fecha_ahora = new DateTime("now", new DateTimeZone('Europe/Madrid'));
		
		if ($fecha_solicitada < $fecha_ahora) {
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó deshacer una reserva pero era pasada', $user_id );		
			echo 'La reserva que intentó cancelar ya se encuentra en el pasado. No puede cancelarse. Tenga en cuenta que las reservas pasadas ya no cuentan como reservas vigentes.';
			return;
		}

		$user_id = $this->session->userdata('user_id');	
				
		$es_mia = $this->db->query('SELECT r.id FROM reserva r, usuario u WHERE r.usuario_id='.$user_id.' and u.id=r.usuario_id and r.fecha=\''. $fecha_mysql .'\' and r.actividad_id='.$actividad_id );		
		if ($es_mia->num_rows() > 0){	
			if ($this->db->query('DELETE FROM reserva WHERE usuario_id='.$user_id.' and fecha=\''. $fecha_mysql .'\' and actividad_id='.$actividad_id ) ){
			    registrar_evento('reservas', 'info', 'El usuario ['.$this->session->userdata('alias').'] ha cancelado una reserva', $user_id, $es_mia->row()->id );		
				echo 'La reserva se ha cancelado sin problemas.';
			}else{
			    registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó cancelar una reserva pero falló la sentencia SQL', $user_id, $es_mia->row()->id );
				echo 'La reserva no se ha podido cancelar porque la base de datos ha fallado.';
			}
		}
		else {
			registrar_evento('reservas', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero no era suya', $user_id );
			echo "La reserva no se ha podido cancelar.";
		}
	}


}








/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */