mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-07-20 08:33:03 +02:00
feature 1489: integrate UploadForm into Piwigo core. The integration is not
100% done, I just "made it work" on trunk. pclzip library was updated to version 2.8.2 for memory usage improvement. git-svn-id: http://piwigo.org/svn/trunk@5089 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -0,0 +1,264 @@
|
||||
<?php
|
||||
// TODO
|
||||
// * check md5sum (already exists?)
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
|
||||
include_once(PHPWG_ROOT_PATH.'include/ws_functions.inc.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
// Here is the plan
|
||||
//
|
||||
// 1) move uploaded file to upload/2010/01/22/20100122003814-449ada00.jpg
|
||||
//
|
||||
// 2) if taller than max_height or wider than max_width, move to pwg_high
|
||||
// + web sized creation
|
||||
//
|
||||
// 3) thumbnail creation from web sized
|
||||
//
|
||||
// 4) register in database
|
||||
|
||||
function add_uploaded_file($source_filepath, $original_filename=null, $categories=null, $level=null)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
// current date
|
||||
list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
|
||||
list($year, $month, $day) = preg_split('/[^\d]/', $dbnow, 4);
|
||||
|
||||
// upload directory hierarchy
|
||||
$upload_dir = sprintf(
|
||||
PHPWG_ROOT_PATH.'upload/%s/%s/%s',
|
||||
$year,
|
||||
$month,
|
||||
$day
|
||||
);
|
||||
|
||||
// compute file path
|
||||
$md5sum = md5_file($source_filepath);
|
||||
$date_string = preg_replace('/[^\d]/', '', $dbnow);
|
||||
$random_string = substr($md5sum, 0, 8);
|
||||
$filename_wo_ext = $date_string.'-'.$random_string;
|
||||
$file_path = $upload_dir.'/'.$filename_wo_ext.'.jpg';
|
||||
|
||||
prepare_directory($upload_dir);
|
||||
if (is_uploaded_file($source_filepath))
|
||||
{
|
||||
move_uploaded_file($source_filepath, $file_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
copy($source_filepath, $file_path);
|
||||
}
|
||||
|
||||
if ($conf['upload_form_websize_resize']
|
||||
and need_resize($file_path, $conf['upload_form_websize_maxwidth'], $conf['upload_form_websize_maxheight']))
|
||||
{
|
||||
$high_path = file_path_for_type($file_path, 'high');
|
||||
$high_dir = dirname($high_path);
|
||||
prepare_directory($high_dir);
|
||||
|
||||
rename($file_path, $high_path);
|
||||
$high_infos = pwg_image_infos($high_path);
|
||||
|
||||
pwg_image_resize(
|
||||
$high_path,
|
||||
$file_path,
|
||||
$conf['upload_form_websize_maxwidth'],
|
||||
$conf['upload_form_websize_maxheight'],
|
||||
$conf['upload_form_websize_quality']
|
||||
);
|
||||
}
|
||||
|
||||
$file_infos = pwg_image_infos($file_path);
|
||||
|
||||
$thumb_path = file_path_for_type($file_path, 'thumb');
|
||||
$thumb_dir = dirname($thumb_path);
|
||||
prepare_directory($thumb_dir);
|
||||
|
||||
pwg_image_resize(
|
||||
$file_path,
|
||||
$thumb_path,
|
||||
$conf['upload_form_thumb_maxwidth'],
|
||||
$conf['upload_form_thumb_maxheight'],
|
||||
$conf['upload_form_thumb_quality']
|
||||
);
|
||||
|
||||
$thumb_infos = pwg_image_infos($thumb_path);
|
||||
|
||||
// database registration
|
||||
$insert = array(
|
||||
'file' => isset($original_filename) ? $original_filename : basename($file_path),
|
||||
'date_available' => $dbnow,
|
||||
'tn_ext' => 'jpg',
|
||||
'path' => preg_replace('/^.*?upload/', './upload', $file_path),
|
||||
'filesize' => $file_infos['filesize'],
|
||||
'width' => $file_infos['width'],
|
||||
'height' => $file_infos['height'],
|
||||
'md5sum' => $md5sum,
|
||||
);
|
||||
|
||||
if (isset($high_infos))
|
||||
{
|
||||
$insert['has_high'] = 'true';
|
||||
$insert['high_filesize'] = $high_infos['filesize'];
|
||||
}
|
||||
|
||||
if (isset($level))
|
||||
{
|
||||
$insert['level'] = $level;
|
||||
}
|
||||
|
||||
mass_inserts(
|
||||
IMAGES_TABLE,
|
||||
array_keys($insert),
|
||||
array($insert)
|
||||
);
|
||||
|
||||
$image_id = mysql_insert_id();
|
||||
|
||||
if (isset($categories) and count($categories) > 0)
|
||||
{
|
||||
associate_images_to_categories(
|
||||
array($image_id),
|
||||
$categories
|
||||
);
|
||||
}
|
||||
|
||||
// update metadata from the uploaded file (exif/iptc)
|
||||
update_metadata(array($image_id=>$file_path));
|
||||
|
||||
invalidate_user_cache();
|
||||
|
||||
return $image_id;
|
||||
}
|
||||
|
||||
function prepare_directory($directory)
|
||||
{
|
||||
if (!is_dir($directory)) {
|
||||
umask(0000);
|
||||
$recursive = true;
|
||||
if (!@mkdir($directory, 0777, $recursive))
|
||||
{
|
||||
die('[prepare_directory] cannot create directory "'.$directory.'"');
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_writable($directory))
|
||||
{
|
||||
// last chance to make the directory writable
|
||||
@chmod($directory, 0777);
|
||||
|
||||
if (!is_writable($directory))
|
||||
{
|
||||
die('[prepare_directory] directory "'.$directory.'" has no write access');
|
||||
}
|
||||
}
|
||||
|
||||
secure_directory($directory);
|
||||
}
|
||||
|
||||
function need_resize($image_filepath, $max_width, $max_height)
|
||||
{
|
||||
list($width, $height) = getimagesize($image_filepath);
|
||||
|
||||
if ($width > $max_width or $height > $max_height)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function pwg_image_resize($source_filepath, $destination_filepath, $max_width, $max_height, $quality)
|
||||
{
|
||||
if (!function_exists('gd_info'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// extension of the picture filename
|
||||
$extension = strtolower(get_extension($source_filepath));
|
||||
|
||||
$source_image = null;
|
||||
if (in_array($extension, array('jpg', 'jpeg')))
|
||||
{
|
||||
$source_image = @imagecreatefromjpeg($source_filepath);
|
||||
}
|
||||
else if ($extension == 'png')
|
||||
{
|
||||
$source_image = @imagecreatefrompng($source_filepath);
|
||||
}
|
||||
else
|
||||
{
|
||||
die('unsupported file extension');
|
||||
}
|
||||
|
||||
// width/height
|
||||
$source_width = imagesx($source_image);
|
||||
$source_height = imagesy($source_image);
|
||||
|
||||
$ratio_width = $source_width / $max_width;
|
||||
$ratio_height = $source_height / $max_height;
|
||||
|
||||
// maximal size exceeded ?
|
||||
if ($ratio_width > 1 or $ratio_height > 1)
|
||||
{
|
||||
if ($ratio_width < $ratio_height)
|
||||
{
|
||||
$destination_width = ceil($source_width / $ratio_height);
|
||||
$destination_height = $max_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
$destination_width = $max_width;
|
||||
$destination_height = ceil($source_height / $ratio_width);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// the image doesn't need any resize! We just copy it to the destination
|
||||
copy($source_filepath, $destination_filepath);
|
||||
return true;
|
||||
}
|
||||
|
||||
$destination_image = imagecreatetruecolor($destination_width, $destination_height);
|
||||
|
||||
imagecopyresampled(
|
||||
$destination_image,
|
||||
$source_image,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
$destination_width,
|
||||
$destination_height,
|
||||
$source_width,
|
||||
$source_height
|
||||
);
|
||||
|
||||
imagejpeg($destination_image, $destination_filepath, $quality);
|
||||
// freeing memory ressources
|
||||
imagedestroy($source_image);
|
||||
imagedestroy($destination_image);
|
||||
|
||||
// everything should be OK if we are here!
|
||||
return true;
|
||||
}
|
||||
|
||||
function pwg_image_infos($path)
|
||||
{
|
||||
list($width, $height) = getimagesize($path);
|
||||
$filesize = floor(filesize($path)/1024);
|
||||
|
||||
return array(
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'filesize' => $filesize,
|
||||
);
|
||||
}
|
||||
|
||||
function is_valid_image_extension($extension)
|
||||
{
|
||||
return in_array(strtolower($extension), array('jpg', 'jpeg', 'png'));
|
||||
}
|
||||
?>
|
||||
+5382
-3544
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 778 B |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
Uploadify v2.1.0
|
||||
Release Date: August 24, 2009
|
||||
|
||||
Copyright (c) 2009 Ronnie Garcia, Travis Nickels
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
#fileQueue {
|
||||
width: 420px;
|
||||
max-height: 300px;
|
||||
overflow: auto;
|
||||
border: 1px solid #333;
|
||||
margin: 0 auto 10px auto;
|
||||
padding: 5px 0 10px 0;
|
||||
}
|
||||
|
||||
.uploadifyQueueItem {
|
||||
border: 1px solid #666;
|
||||
background-color: #444;
|
||||
color:#999;
|
||||
margin: 5px auto 0 auto;
|
||||
padding: 10px;
|
||||
width: 350px;
|
||||
|
||||
}
|
||||
.uploadifyError {
|
||||
border: 2px solid #FBCBBC !important;
|
||||
background-color: #FDE5DD !important;
|
||||
}
|
||||
.uploadifyQueueItem .cancel {
|
||||
float: right;
|
||||
}
|
||||
.uploadifyProgress {
|
||||
background-color: #333;
|
||||
border: 1px solid #666;
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
.uploadifyProgressBar {
|
||||
background-color: #FF3363;
|
||||
width: 1px;
|
||||
height: 3px;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
define('PHPWG_ROOT_PATH','../../../');
|
||||
define('IN_ADMIN', true);
|
||||
|
||||
$_COOKIE['pwg_id'] = $_POST['session_id'];
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions_upload.inc.php');
|
||||
|
||||
// check_pwg_token();
|
||||
|
||||
ob_start();
|
||||
print_r($_FILES);
|
||||
print_r($_POST);
|
||||
print_r($user);
|
||||
$tmp = ob_get_contents();
|
||||
ob_end_clean();
|
||||
error_log($tmp, 3, "/tmp/php-".date('YmdHis').'-'.sprintf('%020u', rand()).".log");
|
||||
|
||||
$image_id = add_uploaded_file(
|
||||
$_FILES['Filedata']['tmp_name'],
|
||||
$_FILES['Filedata']['name'],
|
||||
null,
|
||||
8
|
||||
);
|
||||
|
||||
if (!isset($_SESSION['uploads']))
|
||||
{
|
||||
$_SESSION['uploads'] = array();
|
||||
}
|
||||
|
||||
if (!isset($_SESSION['uploads'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
$_SESSION['uploads'][ $_POST['upload_id'] ] = array();
|
||||
}
|
||||
|
||||
array_push(
|
||||
$_SESSION['uploads'][ $_POST['upload_id'] ],
|
||||
$image_id
|
||||
);
|
||||
|
||||
echo "1";
|
||||
?>
|
||||
Binary file not shown.
Reference in New Issue
Block a user