mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-05-04 20:42:53 +02:00
feature 2189 added: ability to update a photo (the JPEG/PNG file) with
pwg.images.addSimple, simply by adding an $image_id as argument. git-svn-id: http://piwigo.org/svn/trunk@9191 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -166,6 +166,80 @@ DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
|
||||
trigger_action('delete_categories', $ids);
|
||||
}
|
||||
|
||||
// Deletes all files (on disk) related to given image ids
|
||||
// @return image ids where files are deleted successfully
|
||||
function delete_element_files($ids)
|
||||
{
|
||||
if (count($ids) == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
|
||||
|
||||
$new_ids = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
path,
|
||||
tn_ext,
|
||||
has_high,
|
||||
representative_ext
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $ids).')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if (url_is_remote($row['path']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$files = array();
|
||||
$files[] = get_element_path($row);
|
||||
|
||||
if (!empty($row['tn_ext']))
|
||||
{
|
||||
$files[] = get_thumbnail_path($row);
|
||||
}
|
||||
|
||||
if (!empty($row['has_high']) and get_boolean($row['has_high']))
|
||||
{
|
||||
$files[] = get_high_path($row);
|
||||
}
|
||||
|
||||
if (!empty($row['representative_ext']))
|
||||
{
|
||||
$pi = pathinfo($row['path']);
|
||||
$file_wo_ext = get_filename_wo_extension($pi['basename']);
|
||||
$files[] = PHPWG_ROOT_PATH.$pi['dirname'].'/pwg_representative/'.$file_wo_ext.'.'.$row['representative_ext'];
|
||||
}
|
||||
|
||||
$ok = true;
|
||||
foreach ($files as $path)
|
||||
{
|
||||
if (is_file($path) and !unlink($path))
|
||||
{
|
||||
$ok = false;
|
||||
trigger_error('"'.$path.'" cannot be removed', E_USER_WARNING);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($ok)
|
||||
{
|
||||
$new_ids[] += $row['id'];
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $new_ids;
|
||||
}
|
||||
|
||||
// The function delete_elements deletes the elements identified by the
|
||||
// (numeric) values of the array $ids. It also deletes (in the database) :
|
||||
// - all the comments related to elements
|
||||
@@ -182,53 +256,7 @@ function delete_elements($ids, $physical_deletion=false)
|
||||
|
||||
if ($physical_deletion)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
|
||||
$new_ids=array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
path,
|
||||
tn_ext,
|
||||
has_high,
|
||||
representative_ext
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $ids).')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if (url_is_remote($row['path']))
|
||||
continue;
|
||||
$files = array();
|
||||
$files[] = get_element_path($row);
|
||||
if (!empty($row['tn_ext']))
|
||||
$files[] = get_thumbnail_path($row);
|
||||
if (!empty($row['has_high']) and get_boolean($row['has_high']))
|
||||
$files[] = get_high_path($row);
|
||||
if (!empty($row['representative_ext']))
|
||||
{
|
||||
$pi = pathinfo($row['path']);
|
||||
$file_wo_ext = get_filename_wo_extension($pi['basename']);
|
||||
$files[] = PHPWG_ROOT_PATH.$pi['dirname'].'/pwg_representative/'.$file_wo_ext.'.'.$element_info['representative_ext'];
|
||||
}
|
||||
|
||||
$ok = true;
|
||||
foreach ($files as $path)
|
||||
{
|
||||
if (is_file($path) and !unlink($path))
|
||||
{
|
||||
$ok = false;
|
||||
trigger_error('"'.$path.'" cannot be removed', E_USER_WARNING);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($ok)
|
||||
$new_ids[] += $row['id'];
|
||||
else
|
||||
break;
|
||||
}
|
||||
$ids = $new_ids;
|
||||
$ids = delete_element_files($ids);
|
||||
if (count($ids)==0)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -168,7 +168,7 @@ function prepare_upload_configuration()
|
||||
}
|
||||
}
|
||||
|
||||
function add_uploaded_file($source_filepath, $original_filename=null, $categories=null, $level=null)
|
||||
function add_uploaded_file($source_filepath, $original_filename=null, $categories=null, $level=null, $image_id=null)
|
||||
{
|
||||
// Here is the plan
|
||||
//
|
||||
@@ -185,37 +185,68 @@ function add_uploaded_file($source_filepath, $original_filename=null, $categorie
|
||||
// * check md5sum (already exists?)
|
||||
|
||||
global $conf, $user;
|
||||
|
||||
// current date
|
||||
list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
|
||||
list($year, $month, $day) = preg_split('/[^\d]/', $dbnow, 4);
|
||||
|
||||
// upload directory hierarchy
|
||||
$upload_dir = sprintf(
|
||||
PHPWG_ROOT_PATH.$conf['upload_dir'].'/%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.'.';
|
||||
|
||||
list($width, $height, $type) = getimagesize($source_filepath);
|
||||
if (IMAGETYPE_PNG == $type)
|
||||
$file_path = null;
|
||||
|
||||
if (isset($image_id))
|
||||
{
|
||||
$file_path.= 'png';
|
||||
// we are performing an update
|
||||
$query = '
|
||||
SELECT
|
||||
path
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id = '.$image_id.'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$file_path = $row['path'];
|
||||
}
|
||||
|
||||
if (!isset($file_path))
|
||||
{
|
||||
die('['.__FUNCTION__.'] this photo does not exist in the database');
|
||||
}
|
||||
|
||||
// delete all physical files related to the photo (thumbnail, web site, HD)
|
||||
delete_element_files(array($image_id));
|
||||
}
|
||||
else
|
||||
{
|
||||
$file_path.= 'jpg';
|
||||
// this photo is new
|
||||
|
||||
// current date
|
||||
list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
|
||||
list($year, $month, $day) = preg_split('/[^\d]/', $dbnow, 4);
|
||||
|
||||
// upload directory hierarchy
|
||||
$upload_dir = sprintf(
|
||||
PHPWG_ROOT_PATH.$conf['upload_dir'].'/%s/%s/%s',
|
||||
$year,
|
||||
$month,
|
||||
$day
|
||||
);
|
||||
|
||||
// compute file path
|
||||
$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.'.';
|
||||
|
||||
list($width, $height, $type) = getimagesize($source_filepath);
|
||||
if (IMAGETYPE_PNG == $type)
|
||||
{
|
||||
$file_path.= 'png';
|
||||
}
|
||||
else
|
||||
{
|
||||
$file_path.= 'jpg';
|
||||
}
|
||||
|
||||
prepare_directory($upload_dir);
|
||||
}
|
||||
|
||||
prepare_directory($upload_dir);
|
||||
if (is_uploaded_file($source_filepath))
|
||||
{
|
||||
move_uploaded_file($source_filepath, $file_path);
|
||||
@@ -296,37 +327,77 @@ function add_uploaded_file($source_filepath, $original_filename=null, $categorie
|
||||
|
||||
$thumb_infos = pwg_image_infos($thumb_path);
|
||||
|
||||
// database registration
|
||||
$insert = array(
|
||||
'file' => pwg_db_real_escape_string(isset($original_filename) ? $original_filename : basename($file_path)),
|
||||
'date_available' => $dbnow,
|
||||
'tn_ext' => 'jpg',
|
||||
'path' => preg_replace('#^'.preg_quote(PHPWG_ROOT_PATH).'#', '', $file_path),
|
||||
'filesize' => $file_infos['filesize'],
|
||||
'width' => $file_infos['width'],
|
||||
'height' => $file_infos['height'],
|
||||
'md5sum' => $md5sum,
|
||||
'added_by' => $user['id'],
|
||||
);
|
||||
|
||||
if (isset($high_infos))
|
||||
if (isset($image_id))
|
||||
{
|
||||
$insert['has_high'] = 'true';
|
||||
$insert['high_filesize'] = $high_infos['filesize'];
|
||||
}
|
||||
$update = array(
|
||||
'id' => $image_id,
|
||||
'file' => pwg_db_real_escape_string(isset($original_filename) ? $original_filename : basename($file_path)),
|
||||
'filesize' => $file_infos['filesize'],
|
||||
'width' => $file_infos['width'],
|
||||
'height' => $file_infos['height'],
|
||||
'md5sum' => $md5sum,
|
||||
'added_by' => $user['id'],
|
||||
);
|
||||
|
||||
if (isset($high_infos))
|
||||
{
|
||||
$update['has_high'] = 'true';
|
||||
$update['high_filesize'] = $high_infos['filesize'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$update['has_high'] = 'false';
|
||||
$update['high_filesize'] = null;
|
||||
}
|
||||
|
||||
if (isset($level))
|
||||
{
|
||||
$insert['level'] = $level;
|
||||
if (isset($level))
|
||||
{
|
||||
$update['level'] = $level;
|
||||
}
|
||||
|
||||
mass_updates(
|
||||
IMAGES_TABLE,
|
||||
array(
|
||||
'primary' => array('id'),
|
||||
'update' => array_keys($update)
|
||||
),
|
||||
array($update)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// database registration
|
||||
$insert = array(
|
||||
'file' => pwg_db_real_escape_string(isset($original_filename) ? $original_filename : basename($file_path)),
|
||||
'date_available' => $dbnow,
|
||||
'tn_ext' => 'jpg',
|
||||
'path' => preg_replace('#^'.preg_quote(PHPWG_ROOT_PATH).'#', '', $file_path),
|
||||
'filesize' => $file_infos['filesize'],
|
||||
'width' => $file_infos['width'],
|
||||
'height' => $file_infos['height'],
|
||||
'md5sum' => $md5sum,
|
||||
'added_by' => $user['id'],
|
||||
);
|
||||
|
||||
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)
|
||||
);
|
||||
mass_inserts(
|
||||
IMAGES_TABLE,
|
||||
array_keys($insert),
|
||||
array($insert)
|
||||
);
|
||||
|
||||
$image_id = pwg_db_insert_id(IMAGES_TABLE);
|
||||
$image_id = pwg_db_insert_id(IMAGES_TABLE);
|
||||
}
|
||||
|
||||
if (isset($categories) and count($categories) > 0)
|
||||
{
|
||||
@@ -342,7 +413,7 @@ function add_uploaded_file($source_filepath, $original_filename=null, $categorie
|
||||
$conf['use_exif'] = false;
|
||||
}
|
||||
update_metadata(array($image_id=>$file_path));
|
||||
|
||||
|
||||
invalidate_user_cache();
|
||||
|
||||
return $image_id;
|
||||
|
||||
@@ -1352,10 +1352,28 @@ function ws_images_addSimple($params, &$service)
|
||||
{
|
||||
return new PwgError(405, "This method requires HTTP POST");
|
||||
}
|
||||
|
||||
$params['image_id'] = (int)$params['image_id'];
|
||||
if ($params['image_id'] > 0)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
|
||||
$query='
|
||||
SELECT *
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id = '.$params['image_id'].'
|
||||
;';
|
||||
|
||||
$image_row = pwg_db_fetch_assoc(pwg_query($query));
|
||||
if ($image_row == null)
|
||||
{
|
||||
return new PwgError(404, "image_id not found");
|
||||
}
|
||||
}
|
||||
|
||||
// category
|
||||
$params['category'] = (int)$params['category'];
|
||||
if ($params['category'] <= 0)
|
||||
if ($params['category'] <= 0 and $params['image_id'] <= 0)
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, "Invalid category_id");
|
||||
}
|
||||
@@ -1366,8 +1384,9 @@ function ws_images_addSimple($params, &$service)
|
||||
$image_id = add_uploaded_file(
|
||||
$_FILES['image']['tmp_name'],
|
||||
$_FILES['image']['name'],
|
||||
array($params['category']),
|
||||
8
|
||||
$params['category'] > 0 ? array($params['category']) : null,
|
||||
8,
|
||||
$params['image_id'] > 0 ? $params['image_id'] : null
|
||||
);
|
||||
|
||||
$info_columns = array(
|
||||
@@ -1415,23 +1434,25 @@ function ws_images_addSimple($params, &$service)
|
||||
add_tags($tag_ids, array($image_id));
|
||||
}
|
||||
|
||||
$query = '
|
||||
$url_params = array('image_id' => $image_id);
|
||||
|
||||
if ($params['category'] > 0)
|
||||
{
|
||||
$query = '
|
||||
SELECT id, name, permalink
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE id = '.$params['category'].'
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
$category = pwg_db_fetch_assoc($result);
|
||||
$result = pwg_query($query);
|
||||
$category = pwg_db_fetch_assoc($result);
|
||||
|
||||
$url_params['section'] = 'categories';
|
||||
$url_params['category'] = $category;
|
||||
}
|
||||
|
||||
return array(
|
||||
'image_id' => $image_id,
|
||||
'url' => make_picture_url(
|
||||
array(
|
||||
'image_id' => $image_id,
|
||||
'section' => 'categories',
|
||||
'category' => $category
|
||||
)
|
||||
),
|
||||
'url' => make_picture_url($url_params),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
3
ws.php
3
ws.php
@@ -233,8 +233,9 @@ function ws_addDefaultMethods( $arr )
|
||||
'maxValue' => $conf['available_permission_levels']
|
||||
),
|
||||
'tags' => array('default' => null),
|
||||
'image_id' => array('default' => null),
|
||||
),
|
||||
'POST method only.<br>Use the <b>image</b> field for uploading file.<br>Set the form encoding to "form-data"<br><b>category</b> is the numeric identifier of the destination category.'
|
||||
'POST method only.<br>Use the <b>image</b> field for uploading file.<br>Set the form encoding to "form-data"<br><b>category</b> is the numeric identifier of the destination category.<br>You can update an existing photo if you define an existing image_id.'
|
||||
);
|
||||
|
||||
$service->addMethod(
|
||||
|
||||
Reference in New Issue
Block a user