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/fotospedroj/application/controllers/navegador.php
<?php

class Navegador extends CI_Controller {

	function __construct()
	{
		parent::__construct();	
		$this->load->helper(array('controlacceso','form','url','util'));
	}
	
	function index()
	{	
		redirect('navegador/grupo/1');	
	}
	
	
	function sobremi() {
		
		$breadcrumb = array();
		$breadcrumb = array_merge(array("Sobre mi"=>base_url()."navedador/sobremi"),$breadcrumb);
		$breadcrumb = array_merge(array("Inicio"=>base_url()),$breadcrumb);
		
		
		$data= array();
		$data['breadcrumb'] = $breadcrumb;
		
		load_template ('navegador/sobremi_view', $data); 		
	}


	function contacto() {
		
		$breadcrumb = array();
		$breadcrumb = array_merge(array("Contacto"=>base_url()."navedador/contacto"),$breadcrumb);
		$breadcrumb = array_merge(array("Inicio"=>base_url()),$breadcrumb);
		
		
		$data= array();
		$data['breadcrumb'] = $breadcrumb;
		
		load_template ('navegador/contacto_view', $data); 		
	}

	
	function grupo($gid=1){	
		//Si no se especifica grupo se muestra el raiz (1)

		//Comprobar si tenemos visibilidad sobre el grupo
		$es_visible = ca_es_grupo_visible($gid);
		
		if (!$es_visible){
			$grupo->title = "Grupo no disponible";
			$grupo->gid = 0;
			$data = array();
		    $data['grupo']=$grupo;
			load_template ('navegador/group_view', $data);
			return;
		}
		
		//Comprobar si somos administradores
		$es_admin = ca_es_admin();

		//Hay que calcular el breadcrumb		
		$breadcrumb = array();
		$grupo_id=$gid;
		do {
			$grupo = $this->db->query('select * from groups where gid=\''. $grupo_id . '\'');
			$grupo_id = $grupo->row()->parent;
			$breadcrumb = array_merge( array(($grupo->row()->title)=>(base_url('navegador/grupo/'.$grupo->row()->gid))),$breadcrumb);
		} while ($grupo->row()->parent != $grupo->row()->gid);
		$breadcrumb = array_merge(array("Inicio"=>base_url()),$breadcrumb);

		//Rescatar toda la información cenesaria para pasarla en $data
		//siempre dependiendo de la visibilidad del usuario

		//Obtenemos los sub-grupos contenidos en este grupo
		$subgrupos = $this->db->query('select * from groups where parent=\''. $gid . '\' and gid!=\'1\' order by weight asc');

		$subgrupos_visibles = array();
		foreach ($subgrupos->result() as $subgrupo) {
			if (ca_es_grupo_visible($subgrupo->gid)){
				$subgrupos_visibles = array_merge($subgrupos_visibles, array($subgrupo));
			}
		}
		
		//Obtenemos las galerías que cuelgan directamente de este grupo
		
		$galerias = $this->db->query('select * from galleries where group_id=\''. $gid . '\'  order by weight asc');
		
		$galerias_visibles = array();
		foreach ($galerias->result() as $galeria) {
			if (ca_es_galeria_visible($galeria->gid)){
				$galerias_visibles = array_merge($galerias_visibles, array($galeria));
			}
		}
		
		//Obtenemos información de este grupo en concreto
		$grupo = $this->db->query('select * from groups where gid = \''. $gid . '\'');
		
		

		if ($grupo->row()->main_gallery == 0){

			$media_background = $this->db->query('SELECT * FROM media m, galleries g WHERE m.gid = g.gid AND g.visibility > 4 ORDER BY RAND() LIMIT 1');
		}
		else {
			
			if ( ca_es_galeria_visible($grupo->row()->main_gallery ) ){
				$media_background = $this->db->query('SELECT * FROM media m, galleries g WHERE m.gid = g.gid AND g.gid = \''. $grupo->row()->main_gallery .'\' ORDER BY RAND() LIMIT 1');
			}
			else {
				if (count($galerias_visibles) > 0){
					$media_background = $this->db->query('SELECT * FROM media m, galleries g WHERE m.gid = g.gid AND g.gid = \''. $galerias_visibles[0]->gid .'\' ORDER BY RAND() LIMIT 1');
				}
				else {
					$media_background = $this->db->query('SELECT * FROM media m, galleries g WHERE m.gid = g.gid AND g.visibility > 4 ORDER BY RAND() LIMIT 1');
				}
			}
		}
		
		$usuarios = $this->db->query('SELECT * FROM users');
		
		$data = array();
		$data['grupo']=$grupo->row();
		$data['subgrupos']=$subgrupos_visibles;
		
		//Hay que extraer cual va a ser la portada de cada subgrupo
		buscar_portada($data['subgrupos']);
		
		$data['galerias']=$galerias_visibles;
		$data['breadcrumb']=$breadcrumb;
		$data['es_admin']=$es_admin;
		$data['usuarios']=$usuarios->result();
		$data['background']=$media_background->row();
		load_template ('navegador/group_view', $data); 	
	}

	function galeria($gid=1,$offset=0,$filtro='todas'){	
		//Si no se especifica grupo se muestra la galería Portada (1)

		if (!preg_match('/[0-9]+/',$gid)){
    		$gid = 0;
    	}

    	if (!preg_match('/[0-9]+/',$offset)){
        	$offset = 0;
        }

		//Comprobar si tenemos visibilidad sobre la galeria
		$es_visible = ca_es_galeria_visible($gid);
		
		if (!$es_visible){
			$galeria->title = "Galería no disponible";
			$galeria->gid = 0;
			$data = array();
		    $data['galeria']=$galeria;
			load_template ('navegador/gallery_view', $data);
			return;
		}
		
		//Comprobar si somos administradores
		$es_admin = ca_es_admin();
		$es_galeria_editable = ca_es_galeria_editable($gid);

		//Hay que calcular el breadcrumb		
		$galeria = $this->db->query('select * from galleries where gid=\''. $gid . '\' ');
		$breadcrumb = array(($galeria->row()->title)=>(base_url('navegador/galeria/'.$galeria->row()->gid)));
		$grupo_id=$galeria->row()->group_id;
		do {
			$grupo = $this->db->query('select * from groups where gid=\''. $grupo_id . '\'');
			$grupo_id = $grupo->row()->parent;
			$breadcrumb = array_merge( array(($grupo->row()->title)=>(base_url('navegador/grupo/'.$grupo->row()->gid))),$breadcrumb);
		} while ($grupo->row()->parent != $grupo->row()->gid);
		$breadcrumb = array_merge(array("Inicio"=>base_url()),$breadcrumb);

		//Rescatar toda la información cenesaria para pasarla en $data
		//siempre dependiendo de la visibilidad del usuario
	
	
		//Obtenemos los medios audiovisuales de esta galeria
		
		if ($filtro == 'seleccionadas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'0\' and vid=\'0\' order by weight, mid  asc limit '. $offset . ', 20');
		} elseif ($filtro == 'retocadas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and vid IN (SELECT m.mid FROM media m WHERE gid=\''. $gid . '\') order by weight, mid asc  limit '. $offset . ', 20 ');
		} elseif ($filtro == 'terminadas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'1\' and vid=\'0\' order by weight, mid asc limit '. $offset . ', 20');
		} elseif ($filtro == 'estrellas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and calification>\'0\' and vid=\'0\' order by calification desc limit '. $offset . ', 20');
		} else {
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and vid=\'0\' order by weight, mid asc limit '. $offset . ', 20');
		}
		
		
				
		$es_publica = ($galeria->row()->visibility == 5);
			
		
		$data = array();
		$data['galeria']=$galeria->row();
		
		$data['breadcrumb']=$breadcrumb;
		$data['es_editable']=$es_galeria_editable;
		$data['es_publica']=$es_publica;
		$data['es_admin']=$es_admin;
		$data['filtro']=$filtro;
		$data['offset']=$offset;

		
		if ($filtro == 'listado'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'0\' and vid=\'0\'  order by weight asc');
			$data['medios']=$medios->result();
			load_template ('navegador/listado_view', $data); 	
		}
		else{
			$data['medios']=$medios->result();
			load_template ('navegador/gallery_view', $data); 	
		}
		
		
	}



	function loading(){
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}
		// Recuperamos argumentos
		if ($this->input->post('gid') != '') {
            $gid = strip_tags($this->input->post('gid'));
		

		if (!preg_match('/[0-9]+/',$gid)){
    		$gid = 0;
    	}



		}
		else	
			return;
		if ($this->input->post('offset') != '') {
            $offset = strip_tags($this->input->post('offset'));
	    	if (!preg_match('/[0-9]+/',$offset)){
	        	$offset = 0;
	        }
        	if ($offset < 0){
        		echo "0";
        		return;
        	}
        }	
		else	
			return;

		if ($this->input->post('filtro') != '') 
            $filtro = strip_tags($this->input->post('filtro'));
		else	
			return;

		$es_visible = ca_es_galeria_visible($gid);
		
		if (!$es_visible){
			echo '';
			return;
		}
			
		$es_admin = ca_es_admin();
		$es_galeria_editable = ca_es_galeria_editable($gid);
		$galeria = $this->db->query('select * from galleries where gid=\''. $gid .'\'');
		
		//Obtenemos los medios audiovisuales de esta galeria

		if ($filtro == 'seleccionadas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'0\' and vid=\'0\' order by weight, mid asc limit '.$offset.', 20');
		} elseif ($filtro == 'retocadas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and vid IN (SELECT m.mid FROM media m WHERE gid=\''. $gid . '\') order by weight, mid asc limit '.$offset.', 20');
		} elseif ($filtro == 'terminadas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'1\' and vid=\'0\' order by weight, mid asc limit '.$offset.', 20');
		} elseif ($filtro == 'estrellas'){
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and calification>\'0\' and vid=\'0\' order by calification desc limit '.$offset.', 20');
		} else {
			$medios = $this->db->query('select * from media where gid=\''. $gid . '\' and vid=\'0\' order by weight, mid asc limit '.$offset.', 20');
		}		
			
		
		if ($medios->num_rows()==0){
			echo '0';
			return;
		}
		
		
		
		
		
		
		foreach ($medios->result() as $media): 
		
			$comments = $this->db->query('select * from comments where mid=\''. $media->mid .'\'');
		
			$num_comentarios = $comments->num_rows();
		
			$versiones = $this->db->query('select * from media where vid=\''. $media->mid .'\'');
		
			$num_versiones = $versiones->num_rows();
		
			$data=array();
			$data['media']=$media;
			$data['gid']=$gid;
			$data['main_media']=$galeria->row()->main_media;
			$data['es_admin']=$es_admin;
			$data['loaded']=true;
		    $data['offset']=$offset;
		    $data['filtro']=$filtro;
			
			$data['es_editable']=$es_galeria_editable;
			$data['num_comentarios']=$num_comentarios;
			$data['num_versiones']=$num_versiones;
			
			$this->load->view('galerias/miniatura_media', $data);
			
		endforeach;	
	}

/*
	function loading_galeria(){
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}
		// Recuperamos argumentos
		if ($this->input->post('gid') != '') 
            $gid = strip_tags($this->input->post('gid'));
		else	
			return;
		if ($this->input->post('offset') != '') 
            $offset = strip_tags($this->input->post('offset'));
		else	
			return;
			
		$es_admin = ca_es_admin();
		
		$galeria = $this->db->query('select * from galleries where gid=\''. $gid .'\'');
		
		//Obtenemos los medios audiovisuales de esta galeria
		$medios = $this->db->query('select * from media where gid=\''. $gid . '\' limit '.$offset.',8');

		$num_imagenes = $medios->num_rows();
		$i=1;
		echo '[ ';
		foreach ( $medios->result() as $medio){
				
			echo '{ "image" : "'.base_url().'media/'.$gid.'/'.$medio->filename.'.jpg" , "thumb" : "'.base_url().'media/'.$gid.'/thumbs/'.$medio->filename.'_thumb.jpg", "title" : "'.$medio->title.'", "description" : "'.$medio->description.'" }';
			
			if ($i<$num_imagenes){
				echo ' , ';
			}
			$i++;
		}
		echo ' ]';
	}
*/





	function usuario($uid=0)
	{	
    	if (ca_nivel_usuario()>=3){
            redirect('login');
        }
		
		if ($uid == 0){
			redirect('navegador/usuario/'.ca_usuario_id());
		}
		
		//if (ca_es_admin()){
		//	redirect('admin');
		//}
		
		// Enlaces que siempre aparecen
		$breadcrumb = array("Inicio"=>"/", "Zona de clientes"=>"/navegador/usuario/".ca_usuario_id());
		
		
		// Aquí hacer el rescatado de información para pasarla en $data
		

		$usuario_id = $uid;
		

		$galerias = $this->db->query('select * from galleries where uid=\''. $usuario_id . '\'');

		$galerias_visibles = array();
		foreach ($galerias->result() as $galeria) {
			if (ca_es_galeria_visible($galeria->gid)){
				//Meter información adicional a las galerias
				$seleccionadas = $this->db->query('select * from media where gid=\''. $galeria->gid . '\' and selected!=\'0\'');
				$procesadas = $this->db->query('select * from media where gid=\''. $galeria->gid . '\' and selected=\'2\'');
				$galeria->seleccionadas = $seleccionadas->num_rows();
				$galeria->procesadas = $procesadas->num_rows();
				$galerias_visibles = array_merge($galerias_visibles, array($galeria));
			}
		}

		if (count($galerias_visibles > 0)){
			$media_background = $this->db->query('SELECT * FROM media m, galleries g WHERE m.gid = g.gid AND g.gid = \''. $galerias_visibles[0]->gid .'\' ORDER BY RAND() LIMIT 1');
		}

		$usuario = $this->db->query('SELECT * FROM users WHERE uid='.$uid );


		$data = array();
		$data['galerias']=$galerias_visibles;
		$data['breadcrumb']=$breadcrumb;	
		$data['alias']=$usuario->row()->alias;
		$data['usuario']=$usuario;
		$data['background']=$media_background->row();
		load_template ('navegador/user_view', $data); 	
	}
	
	
	function media($mid,$offset=0,$filtro='todas')
	{	

		//Vemos a ver a qué galería pertenece el medio
		$media = $this->db->query('select * from media where mid=\''. $mid . '\' ');
		if ($media->num_rows() == 0){
			$data = array();
			$data['error']="Medio no existe";
			$data['breadcrumb'] = array("Inicio"=>"/");
			load_template ('navegador/error_view', $data); 
			return;
		}

		$gid = $media->row()->gid;
		$vid = $media->row()->vid;

		//Comprobar si somos administradores
		$es_admin = ca_es_admin();
		$es_galeria_editable = ca_es_galeria_editable($gid);
        $es_galeria_visible = ca_es_galeria_visible($gid);

		//Hay que calcular el breadcrumb		
		$galeria = $this->db->query('select * from galleries where gid=\''. $gid . '\' ');
		$breadcrumb = array(($galeria->row()->title)=>(base_url('navegador/galeria/'.$galeria->row()->gid.'/'.$offset.'/'.$filtro)));

		//Calcular cual es el anterior y porterior media
		
		if ($filtro == 'seleccionadas'){
			$lista_media_galeria = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'0\' and vid=\'0\' order by weight, mid  asc');
		} elseif ($filtro == 'retocadas'){
			$lista_media_galeria = $this->db->query('select * from media where gid=\''. $gid . '\' and vid IN (SELECT m.mid FROM media m WHERE gid=\''. $gid . '\') order by weight, mid asc');
		} elseif ($filtro == 'terminadas'){
			$lista_media_galeria = $this->db->query('select * from media where gid=\''. $gid . '\' and selected>\'1\' and vid=\'0\' order by weight, mid asc');
		} elseif ($filtro == 'estrellas'){
			$lista_media_galeria = $this->db->query('select * from media where gid=\''. $gid . '\' and calification>\'0\' and vid=\'0\' order by calification desc');
		} else {
			$lista_media_galeria = $this->db->query('select * from media where gid=\''. $gid . '\' and vid=\'0\' order by weight, mid asc');
		}


		$lista_longitud = $lista_media_galeria->num_rows();
		$contador = 0;
		while ( ($contador < $lista_longitud) &&  ($lista_media_galeria->row($contador)->mid != $media->row()->mid) ) {
			$contador++;
		}

		$mid_pos = $lista_media_galeria->first_row()->mid;
		$mid_ant = $lista_media_galeria->last_row()->mid;

		if ($contador < $lista_longitud){
			if ($contador < $lista_longitud-1){
				$mid_pos = $lista_media_galeria->row($contador+1)->mid;
			}
			if ($contador > 0){
				$mid_ant = $lista_media_galeria->row($contador-1)->mid;
			}
		}

		$data = array();
		
		if ($es_galeria_editable){
			$comments = $this->db->query('SELECT * FROM comments WHERE mid='.$mid );
			
			$comentarios = $comments->result_array();
			$i=0;
			foreach ($comentarios as $comentario) {
				$usuario = $this->db->query('SELECT * FROM users WHERE uid='.$comentario['uid'] );
				if (count($usuario->result())>0) {
					$comentarios[$i]['alias'] = $usuario->row()->alias;
				}
				else {
					$comentarios[$i]['alias'] = "Anónimo";
				}
				$i++;
			}
			
			$data['comentarios']=$comentarios;
			
			
		}
		
		if ($es_galeria_visible){	
			$versiones = $this->db->query('SELECT * FROM media WHERE vid='.$mid );	
			$data['versiones']= $versiones->result();
			$original = $this->db->query('SELECT * FROM media WHERE gid='.$gid .' AND mid='.$vid );	
			$data['original']= $original->result();
		}	



		// Aquí hacer el rescatado de información para pasarla en $data
		
		$data['media']=$media->row();
		$data['breadcrumb']=$breadcrumb;
		$data['mid_ant'] = $mid_ant;
		$data['mid_pos'] = $mid_pos;
		$data['es_admin']=$es_admin;
		$data['es_galeria_editable']=$es_galeria_editable;
		$data['es_galeria_visible']=$es_galeria_visible;
		$data['filtro'] = $filtro;
		$data['offset']=$offset;
		if ($contador < $lista_longitud-1){
			$data['media_pos']=$lista_media_galeria->row($contador+1);
		}
		load_template ('navegador/media_view', $data); 	
		
	}		
	
	
	function publico($filename='')
	{	

		// Enlaces que siempre aparecen
		$breadcrumb = array("Inicio"=>"/", "Compartido"=>"/navegador/publico/".$filename);
		
		
		// Aquí hacer el rescatado de información para pasarla en $data
		$media = $this->db->query('select * from media where filename=\''. $filename . '\'');

		if ($media->num_rows() == 0){
			redirect('');
		}
		else {
			$data = array();
			$data['media']=$media->row();
			$data['breadcrumb']=$breadcrumb;
			$data['ancho']=$media->row()->width;
			$data['alto']=$media->row()->height;
			load_template ('navegador/public_view', $data); 	
		}
	}	
	
	
}