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/foro.php
<?php

class Foro extends Controller {

    function Foro()
    {
        parent::Controller();   
        $this->load->helper(array('date','text','url','util'));
        $this->load->library('session');
    }
    
    function index()
    {
        if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }

		$data = array ('login'=> $this->session->userdata('alias') );
        $data['user_id'] = $this->session->userdata('user_id');
        $data['last_login'] = $this->session->userdata('user_last_login'); 
				
        load_template ('foro/foro_view', $data);
    }
	
    function mostrar_listado_temas(){
        if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }

        if ($this->input->post('pagina') != '') 
            $pagina = dejar_numericos($this->input->post('pagina'));
        else 
            $pagina = 0;
        
        $temas = $this->db->query('
            SELECT t.id as id1, t.titulo as titulo, t.texto as texto, t.fecha_creacion as fecha_creacion, t.fecha_modificacion as fecha_modificacion, t.usuario_id as usuario_id, u.alias as alias, u.id as user_id,(select count(*) from foro_comentario fc where fc.tema_id = id1 ) as reply
            FROM foro_tema t, usuario u 
            WHERE t.usuario_id=u.id
            ORDER BY fecha_modificacion DESC');     
        
		$data = array();
		
        $data['temas'] = $temas->result();
        $data['user_id'] = $this->session->userdata('user_id');
	$data['user_is_admin'] = $this->session->userdata('user_is_admin');
		$data['last_login'] = $this->session->userdata('user_last_login');
        
        $this->load->view('foro/lista_temas_view', $data);    
    }

    function tema($tid){    
        if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }       
        
        $tid = dejar_numericos($tid);
        
        $temas = $this->db->query('
            SELECT t.id as id, t.titulo as titulo, t.texto as texto, t.fecha_creacion as fecha_creacion, t.fecha_modificacion as fecha_modificacion, t.usuario_id as usuario_id, u.alias as alias
            FROM foro_tema t, usuario u
            WHERE t.usuario_id=u.id AND t.id='.$tid);       

        if ($temas->num_rows()==0){
            echo 'El tema indicado no existe.';
            return;
        }
                

        $data = array();
        
        $data['tema'] = $temas->row();
        
        $data['user_id'] = $this->session->userdata('user_id');
        $data['login'] = $this->session->userdata('alias');
        $data['last_login'] = $this->session->userdata('user_last_login');   
             
        load_template ('foro/tema_view', $data);        
    }

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

        if ($this->input->post('tema') != '') 
            $tid = dejar_numericos($this->input->post('tema'));
        else {
            echo 'No se ha indicado tema.';
            return;
		}
        if ($this->input->post('pagina') != '') 
            $pagina = dejar_numericos($this->input->post('pagina'));
        else 
            $pagina = 0;
        
       
        $comentarios = $this->db->query('
            SELECT c.id as id, c.texto as texto, c.fecha as fecha, t.usuario_id as usuario_id, u.alias as alias, u.id as user_id
            FROM foro_tema t, foro_comentario c, usuario u
            WHERE t.id=c.tema_id AND u.id=c.usuario_id AND t.id='.$tid.'
            ORDER BY fecha ASC');       

        $data = array();
          
        $data['comentarios'] = $comentarios->result();
        
		$data['user_id'] = $this->session->userdata('user_id');
        $data['login'] = $this->session->userdata('alias');
        $data['last_login'] = $this->session->userdata('user_last_login'); 
		        
        $this->load->view('foro/lista_comentarios_view', $data);  
    }
    	
	function crear_tema(){
		if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }
        
        // Titulo tema
        if ($this->input->post('titulo') != '') 
            $titulo = strip_tags($this->input->post('titulo'));
        else 
            $titulo = 'Sin título';
		
        // Texto contenido del tema
        if ($this->input->post('texto') != '') 
            $texto = strip_tags($this->input->post('texto'));
        else 
            $texto = 'Sin texto';		
		
		// Obtengo la fecha y hora actual
		$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);
		
		$usuario_id = $this->session->userdata('user_id');
		
        if ($this->db->query('INSERT INTO foro_tema (titulo, texto, fecha_creacion, fecha_modificacion, usuario_id) VALUES(\''.$titulo .'\',\''.$texto .'\',\''.$fecha_ahora_mysql .'\',\''.$fecha_ahora_mysql .'\','. $usuario_id .')' )) {
            $tema_creado = $this->db->query('SELECT id FROM foro_tema WHERE fecha_creacion=\''.$fecha_ahora_mysql .'\' AND usuario_id='. $usuario_id ); 
        
            if ($tema_creado->num_rows()==0){
                registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó crear un tema nuevo pero no fue creado', $usuario_id );
                echo 'El tema no se ha podido crear por un problema extraño con la base de datos.';
                
				$this->mostrar_listado_temas();
				return;
            }
            registrar_evento('foro', 'info', 'El usuario ['.$this->session->userdata('alias').'] ha creado un nuevo tema', $usuario_id, $tema_creado->row()->id );
			$this->mostrar_listado_temas();
        }else{
            registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó reservar pero falló la inserción SQL', $usuario_id );
            echo 'El tema no se ha podido crear por un problema con la base de datos.';
			$this->mostrar_listado_temas();
        }		
		
	}



    function borrar_tema(){
        if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }
        
        if ($this->input->post('tema') != '') 
            $tema_id = dejar_numericos($this->input->post('tema'));
        else {
            echo 'No se ha indicado tema.';
            return;
        }
               
        $usuario_id = $this->session->userdata('user_id');

	$is_admin = $this->session->userdata('user_is_admin');	

	if ($is_admin){
		$tema_a_borrar = $this->db->query('SELECT t.id as id FROM foro_tema t WHERE t.id='.$tema_id );
	}
	else {
        	$tema_a_borrar = $this->db->query('SELECT t.id as id FROM foro_tema t WHERE t.id='.$tema_id.' AND t.usuario_id='.$usuario_id );        
        }
	if ($tema_a_borrar->num_rows() > 0){   
            if ($this->db->query('DELETE FROM foro_tema WHERE id='. $tema_id ) ){
                $this->db->query('DELETE FROM foro_comentario WHERE tema_id='. $tema_id );
				registrar_evento('foro', 'info', 'El usuario ['.$this->session->userdata('alias').'] ha borrado un tema y '.mysql_affected_rows().' comentarios asociados', $usuario_id, $tema_id);     
                $this->mostrar_listado_temas();
            }else{
                registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó borrar un tema pero falló la sentencia SQL', $usuario_id, $tema_id );
                echo 'El tema no se ha podido borrar porque la base de datos ha fallado.';
                $this->mostrar_listado_temas();
            }
        }
        else {
            registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó borrar un tema que no era suyo', $usuario_id , $tema_id);
            echo "El tema no se ha podido borrar.";
            $this->mostrar_listado_temas();
        }
        
    }
	

	
    function crear_comentario(){
        if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }
        
        if ($this->input->post('tema') != '') 
            $tid = dejar_numericos($this->input->post('tema'));
        else {
            echo 'No se ha indicado tema.';
            return;
        }
        
        // Texto contenido del tema
        if ($this->input->post('texto') != '') 
            $texto = strip_tags($this->input->post('texto'));
        else 
            $texto = 'Sin texto';       
        
        // Obtengo la fecha y hora actual
        $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);
        
        $usuario_id = $this->session->userdata('user_id');
        
        if ($this->db->query('INSERT INTO foro_comentario (texto, fecha, usuario_id, tema_id) VALUES(\''.$texto .'\',\''.$fecha_ahora_mysql .'\','. $usuario_id .','. $tid .')' )) {
            $comentario_creado = $this->db->query('SELECT id FROM foro_comentario WHERE fecha=\''.$fecha_ahora_mysql .'\' AND usuario_id='. $usuario_id. ' AND tema_id='.$tid ); 
        
            if ($comentario_creado->num_rows()==0){
                registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó crear un comentario nuevo pero no fue creado', $usuario_id, $tid );
                echo 'El comentario no se ha podido crear por un problema extraño con la base de datos.';

                $this->mostrar_listado_comentarios();
                return;
            }
			
            // Cambiar fecha de ultima modificacion del tema al que se le ha añadido un comentario
            $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);

            $this->db->query('update foro_tema set fecha_modificacion=\''. $fecha_ahora_mysql . '\' where id='.$tid);
		
            registrar_evento('foro', 'info', 'El usuario ['.$this->session->userdata('alias').'] ha creado un nuevo comentario', $usuario_id, $tid, $comentario_creado->row()->id );
            $this->mostrar_listado_comentarios();
        }else{
            registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó crear un comentario nuevo pero falló la inserción SQL', $usuario_id, $tid );
            echo 'El comentario no se ha podido crear por un problema con la base de datos.';
            $this->mostrar_listado_comentarios();
        }       
        
    }
	

    function borrar_comentario(){
        if (!$this->session->userdata('user_logged_in')){
            redirect('login');
        }
        
        if ($this->input->post('cid') != '') 
            $cid = dejar_numericos($this->input->post('cid'));
        else {
            echo 'No se ha indicado comentario.';
            return;
        }
              
        $usuario_id = $this->session->userdata('user_id');

        $comentario_a_borrar = $this->db->query('SELECT c.id as id, c.tema_id as tema_id FROM foro_comentario c WHERE c.id='.$cid.' AND c.usuario_id='.$usuario_id );        
        if ($comentario_a_borrar->num_rows() > 0){   
            if ($this->db->query('DELETE FROM foro_comentario WHERE id='. $cid .' AND usuario_id='.$usuario_id ) ){
                registrar_evento('foro', 'info', 'El usuario ['.$this->session->userdata('alias').'] ha borrado un comentario', $usuario_id, $comentario_a_borrar->row()->tema_id, $cid );     
                $this->mostrar_listado_comentarios();
            }else{
                registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó borrar un comentario pero falló la sentencia SQL', $usuario_id, $comentario_a_borrar->row()->tema_id, $cid );
                echo 'El comentario no se ha podido borrar porque la base de datos ha fallado.';
				$this->mostrar_listado_comentarios();
            }
        }
        else {
            $comentario_a_borrar = $this->db->query('SELECT c.id as id, c.tema_id as tema_id FROM foro_comentario c WHERE c.if='.$cid );
			registrar_evento('foro', 'error', 'El usuario ['.$this->session->userdata('alias').'] intentó borrar un comentario que no era suyo', $usuario_id , $comentario_a_borrar->row()->tema_id, $cid);
            echo "El comentario no se ha podido borrar.";
			$this->mostrar_listado_comentarios();
        }
        
    }


}