aboutsummaryrefslogtreecommitdiffstats
path: root/admin/include
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2014-07-30 13:48:35 +0000
committerplegall <plg@piwigo.org>2014-07-30 13:48:35 +0000
commit379398d91751ca7394cd7c24ace3f7767fa1e5dd (patch)
tree6c5be81f008da844aa514a06143d9f58b9aaa73b /admin/include
parentcd110d959b6f6381a250e876f2b6f5c36705274c (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
Diffstat (limited to 'admin/include')
-rw-r--r--admin/include/functions_upload.inc.php89
-rw-r--r--admin/include/photos_add_direct_prepare.inc.php20
2 files changed, 95 insertions, 14 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),
)
);