Extensión Coppermine: Módulo para descargar álbum completo comprimido en Zip

26-01-2008 > GurX


Mostrar o escribir comentarios (dudas) sobre este artículo

Software: Coppermine
Versión: 1.4.14


El gestor de fotos Coppermine permite descargarte las fotos que tienes asignadas como favoritas en formato Zip. No obstante, no permite descargarte un álbum completo. Ésto impide que los usuarios se puedan guardar fácilmente los álbumes en su disco duro.

Hemos programado el siguiente módulo que añade esta función. El siguiente código estar basado en el fichero “zipdownload” del mismo proyecto.

> Crear un archivo llamado downloadAlbum.php.
> Insertar el siguiente código:

<?php
/*************************
  Coppermine Photo Gallery
  ************************

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License version 3
  as published by the Free Software Foundation.
 
  ********************************************
  Coppermine version: 1.4.14
  $Modified: By GurX (http://www.gurx.net)

  Este código, que deriva del proyecto Coppermine, e distribuye bajo la misma
  licencia y terminos que Coppemine Dev Team ha assignado a su proyecto.
   
  Este script comprime todas las fotos de un álbum en formato Zip.
  El proceso de compresión se hace dinámicamente mediante la clase archive.php.
  Finalmente autogenera una petición de descarga.

  **********************************************/

define('IN_COPPERMINE', true);
define('THUMBNAILS_PHP', true);
define('INDEX_PHP', true);
require('include/init.inc.php');
include ( 'include/archive.php');

$filelist = array();
$cwd = $_SERVER["DOCUMENT_ROOT"]."{$CONFIG['fullpath']}";

if (!empty($_REQUEST["album"])){

      $select_columns = 'filepath,filename';
    $sql = "SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES' AND aid = ".$_REQUEST["album"].";";
        $result = cpg_db_query($sql);
        $rowset = cpg_db_fetch_rowset($result);
        foreach ($rowset as $key => $row){
        $filelist[] = $cwd.$rowset[$key]['filepath'].$rowset[$key]['filename'];
        }

    $zip = new zip_file('/tmp/fotos'.date("YmdHis").'.zip');
    $zip->set_options(array('basedir' => "/tmp/", 'inmemory' => 1, 'recurse' => 0, 'storepaths' => 0));
    $zip->add_files($filelist);
    $zip->create_archive();
    $zip->download_file();

}else{
    echo "ERROR: Album ID not found!!";
}

?>


(Puede descargar directamente el fichero con este link)

> Procedimos a copiar el archivo creado downloadAlbum.php al directorio raíz de Coppemine (directorio que contiene el index.php principal).

> Seleccionaremos un icono que se muestre para descargar el álbum. Lo subiremos dentro de la carpeta de imágenes (images/) del proyecto. Por ejemplo podemos coger el uno del paquete Crystal del entorno gráfico KDE.3x. Descargar icono.

> Ahora solo es cuestión de enlazar el Script creado en alguna parte del gestor de fotos. En nuestro caso se enlaza en la plantilla de la página principal, pero se puede optar por distintas alternativas. Se modifica el archivo “include/theme.inc.php” que contiene la plantilla de la página principal de la siguiente forma:

> Debajo de las linias:
'{ALB_LINK_TGT}' => "thumbnails.php?album={$album['aid']}",

> insertaremos:
'{ALB_LINK_DWN}' => "downloadAlbum.php?album={$album['aid']}",

> Luego pondremos el enlace donde queramos, por ejemplo en el <!-- BEGIN album_cell -->:
<a href="{ALB_LINK_DWN}" class="alblink_dwn" target="_blank" title="Descargar álbum completo"><img src="images/download.gif" /></a>

Anotaciones:

> Observar que la plantilla (include/theme.inc.php) contiene el código que muestra la zona de administración y la zona web de los usuarios sin autentificar.

> En caso que los álbumes ocupen mucho espacio, tendremos que modificar el php.ini (en el caso de debian – etch: /etc/php5/apache2/php.ini) y asignarle un tamaño máximo de unas 200MB o 500MB. Eso es debido que la compresión en ZIP se hace al vuelo y utiliza los parámetros de la configuración PHP. Por defecto viene con 16MB. Es necesario reiniciar apache.
memory_limit = 500M      ; Maximum amount of memory a script may consume (16MB)

> También es recomendable aumentar el tiempo máximo de ejecución de los Scripts. Puede darse el caso que si tenemos un procesador lento y tiene que comprimir muchos ficheros tarde más de 30 segundos. Este parámetro también se encuentra en el fichero php.ini.
max_execution_time = 60     ; Maximum execution time of each script, in seconds

Mostrar o escribir comentarios (dudas) sobre este artículo