diff options
author | plegall <plg@piwigo.org> | 2014-07-30 13:48:35 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2014-07-30 13:48:35 +0000 |
commit | 379398d91751ca7394cd7c24ace3f7767fa1e5dd (patch) | |
tree | 6c5be81f008da844aa514a06143d9f58b9aaa73b | |
parent | cd110d959b6f6381a250e876f2b6f5c36705274c (diff) |
feature 3067: upload any file type with the new HTML5 upload form.
$file_types = conf['upload_form_all_types'] ? $conf['file_ext'] : $conf['picture_ext'];
By default, conf['upload_form_all_types'] = false;
git-svn-id: http://piwigo.org/svn/trunk@29124 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | admin/include/functions_upload.inc.php | 89 | ||||
-rw-r--r-- | admin/include/photos_add_direct_prepare.inc.php | 20 | ||||
-rw-r--r-- | admin/themes/default/template/photos_add_direct.tpl | 3 | ||||
-rw-r--r-- | include/config_default.inc.php | 24 | ||||
-rw-r--r-- | include/ws_functions/pwg.images.php | 1 |
5 files changed, 114 insertions, 23 deletions
diff --git a/admin/include/functions_upload.inc.php b/admin/include/functions_upload.inc.php index 2eefd09b5..d0ef6e67d 100644 --- a/admin/include/functions_upload.inc.php +++ b/admin/include/functions_upload.inc.php @@ -219,6 +219,7 @@ SELECT $file_path = $upload_dir.'/'.$filename_wo_ext.'.'; list($width, $height, $type) = getimagesize($source_filepath); + if (IMAGETYPE_PNG == $type) { $file_path.= 'png'; @@ -232,10 +233,27 @@ SELECT $is_tiff = true; $file_path.= 'tif'; } - else + elseif (IMAGETYPE_JPEG == $type) { $file_path.= 'jpg'; } + elseif (isset($conf['upload_form_all_types']) and $conf['upload_form_all_types']) + { + $original_extension = strtolower(get_extension($original_filename)); + + if (in_array($original_extension, $conf['file_ext'])) + { + $file_path.= $original_extension; + } + else + { + die('unexpected file type'); + } + } + else + { + die('forbidden file type'); + } prepare_directory($upload_dir); } @@ -294,6 +312,62 @@ SELECT } } + // + // generate pwg_representative in case of video + // + $ffmpeg_video_exts = array( // extensions tested with FFmpeg + 'wmv','mov','mkv','mp4','mpg','flv','asf','xvid','divx','mpeg', + 'avi','rm', + ); + + if (isset($original_extension) and in_array($original_extension, $ffmpeg_video_exts)) + { + $representative_file_path = dirname($file_path).'/pwg_representative/'; + $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.'; + + $representative_ext = 'jpg'; + $representative_file_path.= $representative_ext; + + prepare_directory(dirname($representative_file_path)); + + $second = 1; + + $ffmpeg = $conf['ffmpeg_dir'].'ffmpeg'; + $ffmpeg.= ' -i "'.$file_path.'"'; + $ffmpeg.= ' -an -ss '.$second; + $ffmpeg.= ' -t 1 -r 1 -y -vcodec mjpeg -f mjpeg'; + $ffmpeg.= ' "'.$representative_file_path.'"'; + + // file_put_contents('/tmp/ffmpeg.log', "\n==== ".date('c')."\n".__FUNCTION__.' : '.$ffmpeg."\n", FILE_APPEND); + + @exec($ffmpeg); + + if (!file_exists($representative_file_path)) + { + $representative_ext = null; + } + } + + if (isset($original_extension) and 'pdf' == $original_extension and pwg_image::get_library() == 'ext_imagick') + { + $representative_file_path = dirname($file_path).'/pwg_representative/'; + $representative_file_path.= get_filename_wo_extension(basename($file_path)).'.'; + + $representative_ext = 'jpg'; + $representative_file_path.= $representative_ext; + + prepare_directory(dirname($representative_file_path)); + + $exec = $conf['ext_imagick_dir'].'convert'; + $exec.= ' -quality 98'; + $exec.= ' "'.realpath($file_path).'"[0]'; + + $dest = pathinfo($representative_file_path); + $exec.= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"'; + $exec.= ' 2>&1'; + @exec($exec, $returnarray); + } + if (pwg_image::get_library() != 'gd') { if ($conf['original_resize']) @@ -476,7 +550,18 @@ function pwg_image_infos($path) function is_valid_image_extension($extension) { - return in_array(strtolower($extension), array('jpg', 'jpeg', 'png', 'gif')); + global $conf; + + if (isset($conf['upload_form_all_types']) and $conf['upload_form_all_types']) + { + $extensions = $conf['file_ext']; + } + else + { + $extensions = $conf['picture_ext']; + } + + return array_unique(array_map('strtolower', $extensions)); } function file_upload_error_message($error_code) diff --git a/admin/include/photos_add_direct_prepare.inc.php b/admin/include/photos_add_direct_prepare.inc.php index c917d12bd..34b025f13 100644 --- a/admin/include/photos_add_direct_prepare.inc.php +++ b/admin/include/photos_add_direct_prepare.inc.php @@ -93,21 +93,17 @@ $template->assign( ) ); -$upload_file_types = 'jpeg, png, gif'; - -if (pwg_image::get_library() == 'ext_imagick') -{ - $upload_file_types.= ', tiff'; - $template->assign('tif_enabled', true); -} +$unique_exts = array_unique( + array_map( + 'strtolower', + $conf['upload_form_all_types'] ? $conf['file_ext'] : $conf['picture_ext'] + ) + ); -if (false) // TODO manage zip files in pwg.images.upload -{ - $upload_file_types.= ', zip'; -} $template->assign( array( - 'upload_file_types' => $upload_file_types, + 'upload_file_types' => implode(', ', $unique_exts), + 'file_exts' => implode(',', $unique_exts), ) ); diff --git a/admin/themes/default/template/photos_add_direct.tpl b/admin/themes/default/template/photos_add_direct.tpl index 7643d29ec..971346e1e 100644 --- a/admin/themes/default/template/photos_add_direct.tpl +++ b/admin/themes/default/template/photos_add_direct.tpl @@ -80,8 +80,7 @@ jQuery(document).ready(function(){ max_file_size : '1000mb', // Specify what files to browse for mime_types: [ - {title : "Image files", extensions : "jpeg,jpg,gif,png"}, - {title : "Zip files", extensions : "zip"} + {title : "Image files", extensions : "{/literal}{$file_exts}{literal}"} ] }, diff --git a/include/config_default.inc.php b/include/config_default.inc.php index 7b608ccd5..2b081f830 100644 --- a/include/config_default.inc.php +++ b/include/config_default.inc.php @@ -53,15 +53,15 @@ // // $conf['order_by_inside_category_custom'] = $conf['order_by_custom']; -// file_ext : file extensions (case sensitive) authorized -$conf['file_ext'] = array('jpg','JPG','jpeg','JPEG', - 'png','PNG','gif','GIF','mpg','zip', - 'avi','mp3','ogg'); - // picture_ext : file extensions for picture file, must be a subset of // file_ext -$conf['picture_ext'] = array('jpg','JPG','jpeg','JPEG', - 'png','PNG','gif','GIF'); +$conf['picture_ext'] = array('jpg','JPG','jpeg','JPEG','png','PNG','gif','GIF'); + +// file_ext : file extensions (case sensitive) authorized +$conf['file_ext'] = array_merge( + $conf['picture_ext'], + array('tiff', 'tif', 'mpg','zip','avi','mp3','ogg') + ); // top_number : number of element to display for "best rated" and "most // visited" categories @@ -798,4 +798,14 @@ $conf['inheritance_by_default'] = false; // 'png' or 'jpg': your uploaded TIF photos will have a representative in // JPEG or PNG file format $conf['tiff_representative_ext'] = 'png'; + +// in the upload form, let users upload only picture_exts or all file_exts? +// for some file types, Piwigo will try to generate a pwg_representative +// (TIFF, videos, PDF) +$conf['upload_form_all_types'] = false; + +// If we try to generate a pwg_representative for a video we use ffmpeg. If +// "ffmpeg" is not visible by the web user, you can define the full path of +// the directory where "ffmpeg" executable is. +$conf['ffmpeg_dir'] = ''; ?> diff --git a/include/ws_functions/pwg.images.php b/include/ws_functions/pwg.images.php index bb43be983..3a20de082 100644 --- a/include/ws_functions/pwg.images.php +++ b/include/ws_functions/pwg.images.php @@ -1359,6 +1359,7 @@ function ws_images_upload($params, $service) SELECT id, name, + representative_ext, path FROM '.IMAGES_TABLE.' WHERE id = '.$image_id.' |