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