diff options
Diffstat (limited to 'admin/picture_modify.php')
-rw-r--r-- | admin/picture_modify.php | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/admin/picture_modify.php b/admin/picture_modify.php index a4d5d8ac5..0840414a6 100644 --- a/admin/picture_modify.php +++ b/admin/picture_modify.php @@ -121,13 +121,25 @@ if (isset($_POST['associate']) and count($_POST['cat_dissociated']) > 0) { $datas = array(); + foreach ($_POST['cat_dissociated'] as $category_id) { - array_push($datas, array('image_id' => $_GET['image_id'], - 'category_id' => $category_id)); + array_push( + $datas, + array( + 'image_id' => $_GET['image_id'], + 'category_id' => $category_id + ) + ); } - mass_inserts(IMAGE_CATEGORY_TABLE, array('image_id', 'category_id'), $datas); + + mass_inserts( + IMAGE_CATEGORY_TABLE, + array('image_id', 'category_id'), + $datas + ); + check_links(); update_category($_POST['cat_dissociated']); } // dissociate the element from categories (but not from its storage category) @@ -135,12 +147,29 @@ if (isset($_POST['dissociate']) and isset($_POST['cat_associated']) and count($_POST['cat_associated']) > 0) { + $associated_categories = $_POST['cat_associated']; + + // If the same element is associated to a source and its destinations, + // dissociating the element with the source implies dissociating the + // element fwith the destination. + $destinations_of = get_destinations($_POST['cat_associated']); + foreach ($destinations_of as $source => $destinations) + { + $associated_categories = array_merge( + $associated_categories, + $destinations + ); + } + $query = ' DELETE FROM '.IMAGE_CATEGORY_TABLE.' WHERE image_id = '.$_GET['image_id'].' - AND category_id IN ('.implode(',',$_POST['cat_associated'] ).') + AND category_id IN ('.implode(',', $associated_categories).') + AND is_storage = \'false\' '; pwg_query($query); + + check_links(); update_category($_POST['cat_associated']); } // elect the element to represent the given categories |