Skip to content

Commit

Permalink
feature 2189 added: ability to update a photo (the JPEG/PNG file) with
Browse files Browse the repository at this point in the history
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
  • Loading branch information
plegall committed Feb 11, 2011
1 parent cc88f22 commit e79538b
Show file tree
Hide file tree
Showing 4 changed files with 228 additions and 107 deletions.
112 changes: 70 additions & 42 deletions admin/include/functions.php
Expand Up @@ -166,26 +166,20 @@ function delete_categories($ids, $photo_deletion_mode='no_delete')
trigger_action('delete_categories', $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
// - all the links between categories and elements
// - all the favorites associated to elements
// @return number of deleted elements
function delete_elements($ids, $physical_deletion=false)
// 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;
}
trigger_action('begin_delete_elements', $ids);

if ($physical_deletion)
{
include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
$new_ids=array();
include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');

$new_ids = array();

$query = '
$query = '
SELECT
id,
path,
Expand All @@ -195,40 +189,74 @@ function delete_elements($ids, $physical_deletion=false)
FROM '.IMAGES_TABLE.'
WHERE id IN ('.implode(',', $ids).')
;';
$result = pwg_query($query);
while ($row = pwg_db_fetch_assoc($result))
$result = pwg_query($query);
while ($row = pwg_db_fetch_assoc($result))
{
if (url_is_remote($row['path']))
{
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'];
}
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)
$ok = true;
foreach ($files as $path)
{
if (is_file($path) and !unlink($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
$ok = false;
trigger_error('"'.$path.'" cannot be removed', E_USER_WARNING);
break;
}
}

if ($ok)
{
$new_ids[] += $row['id'];
}
else
{
break;
}
$ids = $new_ids;
}
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
// - all the links between categories and elements
// - all the favorites associated to elements
// @return number of deleted elements
function delete_elements($ids, $physical_deletion=false)
{
if (count($ids) == 0)
{
return 0;
}
trigger_action('begin_delete_elements', $ids);

if ($physical_deletion)
{
$ids = delete_element_files($ids);
if (count($ids)==0)
{
return 0;
Expand Down
173 changes: 122 additions & 51 deletions admin/include/functions_upload.inc.php
Expand Up @@ -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
//
Expand All @@ -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.'.';
$file_path = null;

if (isset($image_id))
{
// 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');
}

list($width, $height, $type) = getimagesize($source_filepath);
if (IMAGETYPE_PNG == $type)
{
$file_path.= 'png';
// 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);
Expand Down Expand Up @@ -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)
{
Expand All @@ -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;
Expand Down

0 comments on commit e79538b

Please sign in to comment.