Ignore:
Timestamp:
02/02/10 21:07:50 (10 years ago)
Author:
plg
Message:

feature 1408 added: upload a zip archive containing photos, needs more tests
(on windows operating system) but "yeah it already rocks" :-)

pclzip 2.8.2 included because the low memory usage features is missing from
pclzip 2.8.1 included in Piwigo core.

Location:
extensions/upload_form
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • extensions/upload_form/include/functions_upload.inc.php

    r4807 r4829  
    250250    ); 
    251251} 
     252 
     253function is_valid_image_extension($extension) 
     254{ 
     255  return in_array(strtolower($extension), array('jpg', 'jpeg', 'png')); 
     256} 
    252257?> 
  • extensions/upload_form/language/en_UK/plugin.lang.php

    r4811 r4829  
    3636$lang['Category "%s" now contains %d photos'] = 'Category "%s" now contains %d photos'; 
    3737$lang['Manage this set of %d photos'] = 'Manage this set of %d photos'; 
     38$lang['Select files'] = 'Select files'; 
     39$lang['JPEG files or ZIP archives with JPEG files inside please.'] = 'JPEG files or ZIP archives with JPEG files inside please.'; 
    3840?> 
  • extensions/upload_form/language/fr_FR/plugin.lang.php

    r4811 r4829  
    3636$lang['Category "%s" now contains %d photos'] = 'La catégorie "%s" contient désormais %d photos'; 
    3737$lang['Manage this set of %d photos'] = 'Gérer ce lot de %d photos'; 
     38$lang['Select files'] = 'Choisir des fichiers'; 
     39$lang['JPEG files or ZIP archives with JPEG files inside please.'] = 'Fichiers JPEG ou archives ZIP avec des fichiers JPEG dedans s\'il vous plaît.'; 
    3840?> 
  • extensions/upload_form/upload.php

    r4811 r4829  
    120120    if (UPLOAD_ERR_OK == $error) 
    121121    { 
    122       $source_filepath = $_FILES['image_upload']['tmp_name'][$idx]; 
    123       $original_filename = $_FILES['image_upload']['name'][$idx]; 
    124        
    125       $image_id = add_uploaded_file( 
    126         $source_filepath, 
    127         $original_filename, 
    128         array($category_id), 
    129         $_POST['level'] 
    130         ); 
    131  
    132       array_push($image_ids, $image_id); 
    133  
    134       // TODO: if $image_id is not an integer, something went wrong 
    135  
    136       // we could return the list of properties from the add_uploaded_file 
    137       // function, but I like the "double check". And it costs nothing 
    138       // compared to the upload process. 
    139       $thumbnail = array(); 
    140        
    141       $query = ' 
     122      $images_to_add = array(); 
     123       
     124      $extension = pathinfo($_FILES['image_upload']['name'][$idx], PATHINFO_EXTENSION); 
     125      if ('zip' == strtolower($extension)) 
     126      { 
     127        $upload_dir = PHPWG_ROOT_PATH.'upload/buffer'; 
     128        prepare_directory($upload_dir); 
     129         
     130        $temporary_archive_name = date('YmdHis').'-'.generate_key(10); 
     131        $archive_path = $upload_dir.'/'.$temporary_archive_name.'.zip'; 
     132         
     133        move_uploaded_file( 
     134          $_FILES['image_upload']['tmp_name'][$idx], 
     135          $archive_path 
     136          ); 
     137 
     138        define('PCLZIP_TEMPORARY_DIR', $upload_dir.'/'); 
     139        include(UPLOAD_FORM_PATH.'include/pclzip.lib.php'); 
     140        $zip = new PclZip($archive_path); 
     141        if ($list = $zip->listContent()) 
     142        { 
     143          $indexes_to_extract = array(); 
     144           
     145          foreach ($list as $node) 
     146          { 
     147            if (1 == $node['folder']) 
     148            { 
     149              continue; 
     150            } 
     151 
     152            if (is_valid_image_extension(pathinfo($node['filename'], PATHINFO_EXTENSION))) 
     153            { 
     154              array_push($indexes_to_extract, $node['index']); 
     155               
     156              array_push( 
     157                $images_to_add, 
     158                array( 
     159                  'source_filepath' => $upload_dir.'/'.$temporary_archive_name.'/'.$node['filename'], 
     160                  'original_filename' => basename($node['filename']), 
     161                  ) 
     162                ); 
     163            } 
     164          } 
     165       
     166          if (count($indexes_to_extract) > 0) 
     167          { 
     168            $zip->extract( 
     169              PCLZIP_OPT_PATH, $upload_dir.'/'.$temporary_archive_name, 
     170              PCLZIP_OPT_BY_INDEX, $indexes_to_extract, 
     171              PCLZIP_OPT_ADD_TEMP_FILE_ON 
     172              ); 
     173          } 
     174        } 
     175      } 
     176      elseif (is_valid_image_extension($extension)) 
     177      { 
     178        array_push( 
     179          $images_to_add, 
     180          array( 
     181            'source_filepath' => $_FILES['image_upload']['tmp_name'][$idx], 
     182            'original_filename' => $_FILES['image_upload']['name'][$idx], 
     183            ) 
     184          ); 
     185      } 
     186 
     187      foreach ($images_to_add as $image_to_add) 
     188      { 
     189        $image_id = add_uploaded_file( 
     190          $image_to_add['source_filepath'], 
     191          $image_to_add['original_filename'], 
     192          array($category_id), 
     193          $_POST['level'] 
     194          ); 
     195 
     196        array_push($image_ids, $image_id); 
     197 
     198        // TODO: if $image_id is not an integer, something went wrong 
     199 
     200        // we could return the list of properties from the add_uploaded_file 
     201        // function, but I like the "double check". And it costs nothing 
     202        // compared to the upload process. 
     203        $thumbnail = array(); 
     204       
     205        $query = ' 
    142206SELECT 
    143207    file, 
     
    147211  WHERE id = '.$image_id.' 
    148212;'; 
    149       $image_infos = mysql_fetch_assoc(pwg_query($query)); 
    150  
    151       $thumbnail['file'] = $image_infos['file']; 
    152        
    153       $thumbnail['src'] = get_thumbnail_location( 
    154         array( 
    155           'path' => $image_infos['path'], 
    156           'tn_ext' => $image_infos['tn_ext'], 
    157           ) 
    158         ); 
    159  
    160       // TODO: when implementing this plugin in Piwigo core, we should have 
    161       // a function get_image_name($name, $file) (if name is null, then 
    162       // compute a temporary name from filename) that would be also used in 
    163       // picture.php. UPDATE: in fact, "get_name_from_file($file)" already 
    164       // exists and is used twice (element_set_unit + comments, but not in 
    165       // picture.php I don't know why) with the same pattern if 
    166       // (empty($name)) {$name = get_name_from_file($file)}, a clean 
    167       // function get_image_name($name, $file) would be better 
    168       $thumbnail['title'] = get_name_from_file($image_infos['file']); 
    169  
    170       $thumbnail['link'] = PHPWG_ROOT_PATH.'admin.php?page=picture_modify' 
    171         .'&image_id='.$image_id 
    172         .'&cat_id='.$category_id 
    173         ; 
    174  
    175       array_push($page['thumbnails'], $thumbnail); 
     213        $image_infos = mysql_fetch_assoc(pwg_query($query)); 
     214 
     215        $thumbnail['file'] = $image_infos['file']; 
     216       
     217        $thumbnail['src'] = get_thumbnail_location( 
     218          array( 
     219            'path' => $image_infos['path'], 
     220            'tn_ext' => $image_infos['tn_ext'], 
     221            ) 
     222          ); 
     223 
     224        // TODO: when implementing this plugin in Piwigo core, we should have 
     225        // a function get_image_name($name, $file) (if name is null, then 
     226        // compute a temporary name from filename) that would be also used in 
     227        // picture.php. UPDATE: in fact, "get_name_from_file($file)" already 
     228        // exists and is used twice (element_set_unit + comments, but not in 
     229        // picture.php I don't know why) with the same pattern if 
     230        // (empty($name)) {$name = get_name_from_file($file)}, a clean 
     231        // function get_image_name($name, $file) would be better 
     232        $thumbnail['title'] = get_name_from_file($image_infos['file']); 
     233 
     234        $thumbnail['link'] = PHPWG_ROOT_PATH.'admin.php?page=picture_modify' 
     235          .'&image_id='.$image_id 
     236          .'&cat_id='.$category_id 
     237          ; 
     238 
     239        array_push($page['thumbnails'], $thumbnail); 
     240      } 
    176241    } 
    177242  } 
  • extensions/upload_form/upload.tpl

    r4811 r4829  
    110110      <tr> 
    111111        <td colspan="2"> 
     112          <strong>{'Select files'|@translate}</strong> 
     113          <p>{'JPEG files or ZIP archives with JPEG files inside please.'|@translate}</p> 
    112114          <div id="uploadBoxes"> 
    113115            <p><input class="file" type="file" size="70" name="image_upload[]" /></p> 
Note: See TracChangeset for help on using the changeset viewer.