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();
}
}
}