diff options
author | plegall <plg@piwigo.org> | 2013-10-18 21:02:15 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2013-10-18 21:02:15 +0000 |
commit | 2209edc7f070ff398b3bb8c64d5e7c036ecbb607 (patch) | |
tree | 010c7c7df88d1bc879275a5658f0e43e71b8d573 | |
parent | cd53c8fcd7b6f3d8af741134909b08f747dc191f (diff) |
merge r24986 from branch 2.5 to trunk
bug 2977 fixed: when moving an album, whatever the previous status
private/public we must remove irrelevant permissions (a public album
can have hidden permission, ie list of groups/users permitted). I've
also found a bug in the algorithm that selects users/groups to delete
(reverse parameters in array_diff).
git-svn-id: http://piwigo.org/svn/trunk@24987 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | admin/include/functions.php | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php index 9153f69bd..7972cb989 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -1139,46 +1139,39 @@ SELECT status { foreach ($categories as $cat_id => $category) { - switch ($category['status']) + if ('public' == $category['status']) { - case 'public' : - { - set_cat_status(array($cat_id), 'private'); - break; - } - case 'private' : - { - $subcats = get_subcat_ids(array($cat_id)); + set_cat_status(array($cat_id), 'private'); + } + + $subcats = get_subcat_ids(array($cat_id)); - foreach ($tables as $table => $field) - { - $query = ' + foreach ($tables as $table => $field) + { + $query = ' SELECT '.$field.' FROM '.$table.' WHERE cat_id = '.$cat_id.' ;'; - $category_access = array_from_query($query, $field); + $category_access = array_from_query($query, $field); - $query = ' + $query = ' SELECT '.$field.' FROM '.$table.' WHERE cat_id = '.$new_parent.' ;'; - $parent_access = array_from_query($query, $field); + $parent_access = array_from_query($query, $field); - $to_delete = array_diff($parent_access, $category_access); + $to_delete = array_diff($category_access, $parent_access); - if (count($to_delete) > 0) - { - $query = ' + if (count($to_delete) > 0) + { + $query = ' DELETE FROM '.$table.' WHERE '.$field.' IN ('.implode(',', $to_delete).') AND cat_id IN ('.implode(',', $subcats).') ;'; - pwg_query($query); - } - } - break; + pwg_query($query); } } } |