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 */