diff options
Diffstat (limited to '')
-rw-r--r-- | admin/include/functions.php | 112 |
1 files changed, 70 insertions, 42 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php index f736902b0..1e1f1b454 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -166,26 +166,20 @@ DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.' 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, @@ -195,40 +189,74 @@ SELECT 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; |