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

class Media extends CI_Controller {

	function __construct()
	{
		parent::__construct();	
		$this->load->helper(array('controlacceso','url','util','tiempo'));
		$this->load->library('session', 'image_lib', 'form_validation');
	}
	
	function index()
	{
		redirect('navegador/grupo/1');
	}
	

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

		$media_antes = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' );

		if (!ca_es_galeria_editable($media_antes->row()->gid)){
			return;
		}		

		$usuario_id = ca_usuario_id();
		
		$seleccion_antes = $media_antes->row()->selected;
		$seleccion_despues = 0;
		if ($seleccion_antes==0){
			$seleccion_despues = 1;
		}
		elseif ($seleccion_antes == 1 && ca_es_admin()){
			$seleccion_despues = 2;
		}
		elseif ($seleccion_antes == 1 && !ca_es_admin()){
			$seleccion_despues = 0;
		}
		elseif ($seleccion_antes == 2 && ca_es_admin()){
			$seleccion_despues = 0;
		}
		else {
			$seleccion_despues = $seleccion_antes;
		}
		
        if ($this->db->query('UPDATE media SET selected=\''. $seleccion_despues .'\' where mid=\''.$mid .'\'' )) {
            $media_despues = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' ); 
        
            if ($media_despues->num_rows()==0){
                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó seleccionar un medio pero falló', $usuario_id, 0, $mid );
                echo '0';
                
				return;
            }
            registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha cambiado la seleccion del medio: ['.$media_despues->row()->title.'] a ['. $media_despues->row()->calification .']', $usuario_id, $media_despues->row()->gid, $mid );
	        echo $seleccion_despues; 
        }
		else{
            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó seleccionar un medio pero falló la inserción SQL', $usuario_id, 0, $mid );
            echo '0';
			
        }	
	}	

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

		$media = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' );

		if (!ca_es_galeria_editable($media->row()->gid)){
			return;
		}
		
		$data=array();
		$data['media']=$media;
		$data['gid']=$gid;
		$this->load->view('media/formulario_subir_archivo_view', $data);
		
	}
	
	
	function rating(){	
		
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}
		// Recuperamos argumentos
		if ($this->input->post('media') != '') 
            $mid = strip_tags($this->input->post('media'));
		else	
			return;
		if ($this->input->post('rate') != '') 
            $rate = strip_tags($this->input->post('rate'));
		else	
			return;
		
		$media = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' );
		
		if (!ca_es_galeria_editable($media->row()->gid)){
			echo 'No se ha podido guardar la puntuación porque el usuario no tiene permiso para hacerlo.';
			return;
		}		
					
		
		$usuario_id = ca_usuario_id();
		
        if ($this->db->query('UPDATE media SET calification=\''. $rate .'\' where mid=\''.$mid .'\'' )) {
            $media_modificado = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' ); 
        
            if ($media_modificado->num_rows()==0){
                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó calificar un medio pero falló', $usuario_id, 0, $mid );
                echo 'No se ha podido guardar la puntuación por un problema extraño con la base de datos.';
                
				return;
            }
            registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha cambiado la calificacion del medio: ['.$media_modificado->row()->title.'] a ['. $media_modificado->row()->calification .']', $usuario_id, $media_modificado->row()->gid, $mid );
	        echo '0'; 
        }else{
            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó calificar un medio pero falló la inserción SQL', $usuario_id, 0, $mid );
            echo 'No se ha podido guardar la puntuación por un problema con la base de datos.';
			
        }	
	}
	
	function eliminar (){        
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}
		
		// Recuperamos argumentos
		if ($this->input->post('media') != '') 
            $mid = strip_tags($this->input->post('media'));
		else	
			return;
              
       	$usuario_id = ca_usuario_id();

        $media_a_borrar = $this->db->query('SELECT * FROM media WHERE mid='.$mid );   
		
		if (!ca_es_admin($usuario_id)){
			echo 'No se ha podido borrar porque el usuario no tiene permiso para hacerlo.';
			return;
		}	
    
        if ($media_a_borrar->num_rows() > 0){   
            if ($this->db->query('DELETE FROM media WHERE mid='. $mid ) ){
				$ruta_foto = './media/'.$media_a_borrar->row()->gid.'/'.$media_a_borrar->row()->filename.'.jpg';
				$ruta_miniatura = './media/'.$media_a_borrar->row()->gid.'/mini/'.$media_a_borrar->row()->filename.'_mini.jpg';
				if (is_file($ruta_foto)){
					unlink($ruta_foto);
				}
				if (is_file($ruta_miniatura)){
					unlink($ruta_miniatura);
			    }
            	registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha borrado un medio', $usuario_id, $media_a_borrar->row()->gid, $mid );     
      			echo '1';
			}
			else {
	                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó borrar un medio pero falló la sentencia SQL.', $usuario_id, $media_a_borrar->row()->gid, $mid );
	                echo 'El medio no se ha podido borrar porque la base de datos ha fallado.';
					
			}
        }
        else {
			registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó borrar un medio pero no existe o falló la sentencia SQL', $usuario_id , 0, $mid);
            echo "El medio no se ha podido borrar.";
        }
        
    }

	
	function comentarios(){
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}

		// Recuperamos argumentos
		if ($this->input->post('media') != '') 
            $mid = strip_tags($this->input->post('media'));
		else	
			return;
		
		$media = $this->db->query('SELECT * FROM media WHERE mid='.$mid );

		if (!ca_es_galeria_visible($media->row()->gid)){
			echo 'No se ha podido acceder a los comentarios porque el usuario no tiene permiso para hacerlo.';
			return;
		}	

		$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'] );
			$comentarios[$i]['alias'] = $usuario->row()->alias;
			$i++;
		}
		
		$versiones = $this->db->query('SELECT * FROM media WHERE vid='.$mid );
		
		$data = array();
		$data['media']=$media->row();
		$data['comentarios']=$comentarios;
		$data['versiones']= $versiones->result();
		$data['es_admin']=ca_es_admin();
		$this->load->view ('media/comentarios_view', $data);	
	}


	function versiones(){

		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}

		// Recuperamos argumentos
		if ($this->input->post('media') != '') 
            $mid = strip_tags($this->input->post('media'));
		else	
			return;
		
		$media = $this->db->query('SELECT * FROM media WHERE mid='.$mid );

		if (!ca_es_galeria_visible($media->row()->gid)){
			echo 'No se ha podido acceder a las versiones porque el usuario no tiene permiso.';
			return;
		}	

		$versiones = $this->db->query('SELECT * FROM media WHERE vid='.$mid );
		
		$data = array();
		$data['media']=$media->row();
		$data['versiones']= $versiones->result();
		$data['es_admin']=ca_es_admin();
		$this->load->view ('media/versiones_view', $data);	
	}

	
	function formulario_subida(){
		if (!ca_es_admin()){
			return;
		}
				
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}

		// Recuperamos argumentos
		if ($this->input->post('galeria') != '') 
            $gid = strip_tags($this->input->post('galeria'));
		else	
			return;	
		if ($this->input->post('media') != '') {
            $mid = strip_tags($this->input->post('media'));
			$versiones = $this->db->query('SELECT * FROM media WHERE vid='.$mid );
			$num_versiones = $versiones->num_rows();
			$media = $this->db->query('SELECT * FROM media WHERE mid='.$mid );
			$titulo = $media->row()->title . ' v'.($num_versiones+1);
			$desc = $media->row()->description;
		}
		else {	
			$mid = 0;
			$num_versiones = 0;
			$titulo = 'Título';
			$desc = 'Descripción';
		}
		
		
		$data=array();
		$data['vid']=$mid;
		$data['gid']=$gid;
		$data['titulo']=$titulo;
		$data['desc']=$desc;
		$this->load->view("media/formulario_subir_archivo_view", $data);
	}	
	
	
	function cambiar_titulo(){
		if (!ca_es_admin()){
			return;
		}

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

		if ($this->input->post('media') != '') 
            $mid = strip_tags($this->input->post('media'));
		else	
			return;
		
		$usuario_id = ca_usuario_id();
		
		if ($this->db->query('UPDATE media SET title=\''. $titulo .'\' where mid=\''.$mid .'\'' )){
			$media = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' ); 
        
            if ($media->num_rows()==0){
                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó cambiar el título de un medio pero falló', $usuario_id, 0, $mid );
                echo 'El título no se ha podido actualizar por un problema extraño con la base de datos.';
                
				return;
            }

            registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha cambiado el título de un medio.', $usuario_id, $media->row()->gid, $media->row()->mid  );
			echo '0';
		}else{
            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó cambiar el título de un medio pero falló la inserción SQL', $usuario_id, $gid );
            echo 'El título no se ha podido actualizar por un problema con la base de datos.';
			
        }	

	}
	
	
	function crear_comentario(){		
		foreach( $_POST as $variable => $valor ){
			$_POST [ $variable ] = str_replace ( "'" , "" , $_POST [ $variable ]);
		}
		
		$this->load->library('form_validation');
		
		$usuario_id = ca_usuario_id();
		
		$config = array(
               array(
                     'field'   => 'comment', 
                     'label'   => 'Comentario', 
                     'rules'   => 'required|xss_clean'
               ),
               array(
                     'field'   => 'media', 
                     'label'   => 'Media', 
                     'rules'   => 'integer'
               )
        );



		$this->form_validation->set_rules($config);	

        if ($this->form_validation->run() == FALSE)
		{
            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó crear una comentario pero los datos del formulario no eran válidos', $usuario_id, 0, 0 );
            echo 'El comentario no se ha podido crear por un problema con los datos del formulario.';
            
			return;
		}		
		
		// Recuperamos argumentos
		if ($this->input->post('comment') != '') 
            $comment = strip_tags($this->input->post('comment'));
		else	
			return;

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

		$media = $this->db->query('SELECT * FROM media WHERE mid='.$mid );

		if (!ca_es_galeria_visible($media->row()->gid)){
			echo 'No se ha podido crear el comentario porque el usuario no tiene permiso para hacerlo.';
			return;
		}	
		
		$fecha = unix_to_mysql(timestamp_now());
		
        $comentarios_antes = $this->db->query('SELECT * FROM comments WHERE comment=\''. $comment . '\' and uid=\''.$usuario_id.'\'' ); 
		
        if ($this->db->query('INSERT INTO comments (uid, mid, comment, date) VALUES(\''.$usuario_id .'\',\''.$mid .'\',\''.$comment .'\',\''.$fecha .'\')' )) {

			$comentarios_despues = $this->db->query('SELECT * FROM comments WHERE comment=\''. $comment . '\' and uid=\''.$usuario_id.'\' ORDER BY cid DESC' ); 
        
            if ($comentarios_antes->num_rows() == $comentarios_despues->num_rows()){
                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó crear una comentario pero falló', $usuario_id, 0, $mid );
                echo 'El comentario no se ha podido crear por un problema extraño con la base de datos.';
                
				return;
            }
            registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha creado un nuevo comentario.', $usuario_id, 0, $mid );

			$comentario_temp = $comentarios_despues->row_array();

			$usuario = $this->db->query('SELECT * FROM users WHERE uid='.$comentario_temp['uid'] );
			$comentario_temp['alias'] = $usuario->row()->alias;

			$data = array();
			$data['comentario']=$comentario_temp;
			$this->load->view('media/comentario_nuevo_view',$data); 
        }else{
            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó crear un comentario pero falló la inserción SQL', $usuario_id, 0, $mid );
            echo 'El comentario no se ha podido crear por un problema con la base de datos.';
			
        }		

	}

	function cambiar_descripcion(){
		if (!ca_es_admin()){
			return;
		}
        
		// Recuperamos argumentos
		if ($this->input->post('desc') != '') 
            $desc = strip_tags($this->input->post('desc'));
		else	
			return;

		if ($this->input->post('media') != '') 
            $mid = strip_tags($this->input->post('media'));
		else	
			return;
		
		$usuario_id = ca_usuario_id();
		
		if ($this->db->query('UPDATE media SET description=\''. $desc .'\' where mid=\''.$mid .'\'' )){
			$media = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' ); 
        
            if ($media->num_rows()==0){
                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó cambiar la descripción de un medio pero falló', $usuario_id, 0, $mid );
                echo 'La descripción no se ha podido actualizar por un problema extraño con la base de datos.';
                
				return;
            }

            registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha cambiado la descripción de un medio.', $usuario_id, $media->row()->gid, $media->row()->mid  );
			echo '0';
		}else{
            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó cambiar la descripción de un medio pero falló la inserción SQL', $usuario_id, $gid );
            echo 'La descripción no se ha podido actualizar por un problema con la base de datos.';
			
        }	

	}
	
	

	function inc_peso(){
		if (!ca_es_admin()){
			redirect('login');
		}
		
		// Recuperamos argumentos
		if ($this->input->post('mid') != '') 
            $mid = strip_tags($this->input->post('mid'));
		else	
			return;
		
					
		$media = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' );

		$peso = $media->row()->weight + 1;

		if ($this->db->query('UPDATE media SET weight=\''. $peso .'\' where mid=\''.$mid .'\'' )) {
			echo $peso;
		}
		else{
			echo "E";
		}
	}


	function dec_peso(){
		if (!ca_es_admin()){
			redirect('login');
		}
		
		// Recuperamos argumentos
		if ($this->input->post('mid') != '') 
            $mid = strip_tags($this->input->post('mid'));
		else	
			return;
		
					
		$media = $this->db->query('SELECT * FROM media WHERE mid=\''. $mid . '\'' );

		$peso = $media->row()->weight - 1;

		if ($this->db->query('UPDATE media SET weight=\''. $peso .'\' where mid=\''.$mid .'\'' )) {
			echo $peso;
		}
		else{
			echo "E";
		}
	}


	
	// Usada para actualizar las miniaturas de 300x300 de una galeria
	function _actualizar_miniaturas($galeria){

		$medios = $this->db->query('SELECT * FROM media WHERE gid='.$galeria );
		foreach ($medios->result() as $medio) {
			
			if (!is_dir ( 'media/'.$medio->gid.'/mini' )){
				echo "creando directorio para galeria:". $medio->gid. "...<br>";
				mkdir('media/'.$medio->gid.'/mini', 0770, true);
			}
			$error = $this->_crop($medio->gid, $medio->filename, 300, 300);
			
			if ( $error=='' )
			{	
				echo $medio->gid .'....ok<br>';
			}
			else {
				echo $medio->gid .'....error!<br>';			
			}
			
		}
	}

	function _crop($gid, $filename, $width, $height)
	{
		$img_path = './media/'.$gid.'/'.$filename.'.jpg';
		$img_thumb = './media/'.$gid.'/mini/'.$filename.'_mini.jpg';

		$config['image_library'] = 'gd2';
		$config['source_image'] = $img_path;
		$config['create_thumb'] = FALSE;
		$config['maintain_ratio'] = TRUE;
		$config['new_image'] = $img_thumb;

		$img = imagecreatefromjpeg($img_path);
		$_width = imagesx($img);
		$_height = imagesy($img);

		echo $filename .' - '.$_width.'x'.$_height.'<br>';


		$img_type = '';
		$thumb_size = $width;

		if ($_width > $_height)
		{
			// wide image
			$config['width'] = intval(($_width / $_height) * $thumb_size);
			if ($config['width'] % 2 != 0)
			{
				$config['width']++;
			}
			$config['height'] = $thumb_size;
			$img_type = 'langscape';
			
		}
		else if ($_width < $_height)
		{
			// landscape image
			$config['width'] = $thumb_size;
			$config['height'] = intval(($_height / $_width) * $thumb_size);
			if ($config['height'] % 2 != 0)
			{
				$config['height']++;
			}
			$img_type = 'portrait';
		}
		else
		{
			// square image
			$config['width'] = $thumb_size;
			$config['height'] = $thumb_size;
			$img_type = 'square';
			
		}

		$this->load->library('image_lib');
		$this->image_lib->initialize($config);
		if (!$this->image_lib->resize()){
			echo "errores al hacer resize.";
			return $this->image_lib->display_errors();
		}
		// reconfigure the image lib for cropping
		$conf_new = array(
			'image_library' => 'gd2',
			'source_image' => $img_thumb,
			'create_thumb' => FALSE,
			'maintain_ratio' => FALSE,
			'width' => $thumb_size,
			'height' => $thumb_size
		);
		
	

		if ($img_type == 'landscape')
		{
			$conf_new['x_axis'] = ($config['width'] - $thumb_size) / 2 ;
			$conf_new['y_axis'] = 0;
		}
		else if($img_type == 'portrait')
		{
			$conf_new['x_axis'] = 0;
			$conf_new['y_axis'] = 0; // En este caso no interesa centrar
			//$conf_new['y_axis'] = ($config['height'] - $thumb_size) / 2;
		}
		else
		{
			$conf_new['x_axis'] = 0;
			$conf_new['y_axis'] = 0;
		}

		$this->image_lib->initialize($conf_new);

		if ($this->image_lib->crop()){
			
			return '';
		}
		else{
			echo "errores al hacer resize2.";
			return $this->image_lib->display_errors();
		}	
	}

	
	function _create_thumb_alt($gid,$filename, $width, $height){


		$config_image = array();
		$config_image['image_library'] = 'gd2';
		$config_image['source_image'] = './media/'.$gid.'/'.$filename.'.jpg';
		$config_image['new_image'] = './media/'.$gid.'/mini/'.$filename.'_mini.jpg';
		$config_image['create_thumb'] = FALSE;
		$config_image['maintain_ratio'] = TRUE;
		$config_image['width'] = $width;
		$config_image['height'] = $height;
		
		$this->load->library('image_lib');
		
		$this->image_lib->initialize($config_image); 
				
		if (!$this->image_lib->resize()){
			return $this->image_lib->display_errors();
		}
			
		$config_image2 = array();
		$config_image2['image_library'] = 'gd2';
		$config_image2['source_image'] = './media/'.$gid.'/mini/'.$filename.'_mini.jpg';
		$config_image2['new_image'] = './media/'.$gid.'/mini/'.$filename.'.jpg';
		$config_image2['create_thumb'] = FALSE;
		$config_image2['maintain_ratio'] = FALSE;
		$config_image2['x_axis'] = $width;
		$config_image2['y_axis'] = $height;	
			
		$this->image_lib->initialize($config_image2); 
		
		if ($this->image_lib->crop()){
			
			return '';
		}
		else{
			return $this->image_lib->display_errors();
		}
			
	}
	
	
	
	function _create_thumb($gid,$filename, $width, $height){

		$config_image = array();
		$config_image['image_library'] = 'gd2';
		$config_image['source_image'] = './media/'.$gid.'/'.$filename.'.jpg';
		$config_image['new_image'] = './media/'.$gid.'/mini/'.$filename.'_mini.jpg';
		$config_image['create_thumb'] = TRUE;
		$config_image['maintain_ratio'] = TRUE;
		$config_image['width'] = $width;
		$config_image['height'] = $height;
		
		
		
		$this->image_lib->initialize($config_image); 
				
		if ($this->image_lib->resize()){
			return '';
		}
		else{
			return $this->image_lib->display_errors();
		}
			
	}
	
	function _create_media($galeria, $version, $titulo, $descripcion, $origname, $filename, $height, $width, $filesize, $weight){

		$usuario_id = ca_usuario_id();
		$thumb_width = 300;
		$thumb_height = 300;
		if ($height < $width){
			$thumb_height = 300;
		}
		else{
			$thumb_width = 300;
		}
		$error = $this->_crop($galeria, $filename, $thumb_width, $thumb_height);
		if ( $error=='' )
		{		
			$medios_antes = $this->db->query('SELECT * FROM media WHERE title=\''. $titulo . '\'' ); 
			
	        if ($this->db->query('INSERT INTO media (gid, vid, title, height, width, filesize, original_filename, filename, description, weight) VALUES(\''.$galeria .'\',\''.$version .'\',\''.$titulo .'\',\''.$height .'\',\''.$width .'\',\''.$filesize .'\',\''.$origname .'\',\''.$filename .'\',\''.$descripcion .'\',\''.$weight .'\')' )) {
	            $medios_despues = $this->db->query('SELECT * FROM media WHERE title=\''. $titulo .'\' ORDER BY mid DESC' ); 
	        
	            if ($medios_antes->num_rows() == $medios_despues->num_rows()){
	                registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó crear un nuevo medio pero falló', $usuario_id, $galeria );
	                $error = 'La galería no se ha podido crear por un problema extraño con la base de datos.';
	              
	            }
				else {
	            	registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] ha creado un nuevo medio.', $usuario_id, $galeria, $medios_despues->row()->mid );		
				}  
	        }else{
	            registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] intentó crear un medio pero falló la inserción SQL', $usuario_id, $galeria );
	            $error = 'La galería no se ha podido crear por un problema con la base de datos.';
				//TODO: borrar los ficheros subidos!!!
	        }
		}
		return $error;		
	}

	function upload_file()
	{
		if (!ca_es_admin()){
			return;
		}
		$error = '';
		
		// Recuperamos argumentos
		if ($this->input->post('gid') != '') 
            $gid = strip_tags($this->input->post('gid'));
		else	
			$error = "Parámetro gid no está presente.";
		if ($this->input->post('titulo') != '') 
            $titulo = strip_tags($this->input->post('titulo'));
		else	
			$error = "Parámetro titulo no está presente.";
		if ($this->input->post('descrip') != '') 
            $descrip = strip_tags($this->input->post('descrip'));
		else	
			$error = "Parámetro descrip no está presente.";			

		if ($this->input->post('vid') != '') 
            $vid = strip_tags($this->input->post('vid'));
		else
			$vid = 0;

		if ($error != ''){
			$usuario_id = ca_usuario_id();
			registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] obtuvo un error:'.$error, $usuario_id );
			
			$data = array();
			$data['gid']=0;
			$data['error']=$error;
			load_template ('media/upload_error_view', $data);
			return;
		}



		$config['upload_path'] = './media/'.$gid.'/';
		$config['allowed_types'] = 'jpg|zip';
		$config['max_size']	= '50000';
		$config['max_width']  = '5024';
		$config['max_height']  = '4468';
		$config['encrypt_name'] = TRUE;

		$this->load->library('upload', $config);

		
		if ( ! $this->upload->do_upload())
		{
			$error = $this->upload->display_errors();
			echo $error;
		}
		else
		{
			
			$image_info=$this->upload->data();
			echo $image_info['file_name'].'<br>';
			
			$num_archivos = 0;
			$this->load->library('image_lib');
			$medios = $this->db->query('SELECT * FROM media WHERE gid=\''. $gid . '\'' ); 
			$num_medios = $medios->num_rows();
			if ($image_info["file_type"] == 'image/jpeg'){
				$error = $this->_create_media($gid, $vid, $titulo, $descrip, $image_info['orig_name'], $image_info['raw_name'],$image_info['image_height'], $image_info['image_width'], $image_info['file_size'],$num_medios +1);				
				$num_archivos = 1;
			}
			else if (($image_info["file_type"] == 'application/zip')||($image_info["file_type"] == 'application/x-zip-compressed')){
				//descomprimimos el zip y añadimos una a una

				
				

				$za = new ZipArchive();
				
				$za->open( './media/'.$gid.'/'.$image_info['file_name']);
				$za->extractTo('./media/'.$gid.'/'); 
						
				for ($i=0; $i<$za->numFiles && $error == '';$i++) {
					$file_info = $za->statIndex($i);
					mt_srand();
			        $random_name = md5(uniqid(mt_rand()));		
					$orig_name = $file_info['name'];
					$image_size = getimagesize ('./media/'.$gid.'/'.$file_info['name']);
					$anchura = $image_size[0];	 
					$altura = $image_size[1];	 
					rename('./media/'.$gid.'/'.$file_info['name'],'./media/'.$gid.'/'.$random_name.'.jpg' );
					$filesize = $file_info['size'] / 1024;
					$error = $this->_create_media($gid, $vid, $titulo.' '.($num_medios+$i+1), $descrip, $orig_name, $random_name, $altura, $anchura, $filesize, $num_medios + $i +1 );				
					
				}
				$num_archivos = $za->numFiles;
				$za->close(); 
				// Borramos el ZIP.
				unlink('./media/'.$gid.'/'.$image_info['file_name']);
				
			}
			else{
				$error = 'El fichero subido no es ni una imagen JPG ni un comprimido ZIP.';
			}
			
			if ($error == ''){
				
				$usuario_id = ca_usuario_id();			
				registrar_evento('media', 'info', 'El usuario ['.$this->session->userdata('user_alias').'] subió '.$num_archivos.' nuevos medios.', $usuario_id, $gid );
			
				
				$data = array();
				$data['gid']=$gid;
				$data['num_archivos']=$num_archivos;
				load_template ('media/upload_ok_view', $data);	
			}
		}
		if ($error != ''){

			$usuario_id = ca_usuario_id();			
			registrar_evento('media', 'error', 'El usuario ['.$this->session->userdata('user_alias').'] produjo un error: '.$error, $usuario_id, $gid );
			
			$data = array();
			$data['gid']=$gid;
			$data['error']=$error;
			load_template ('media/upload_error_view', $data);
			return;	
		}
	}
	
	
}