aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2013-10-18 21:02:15 +0000
committerplegall <plg@piwigo.org>2013-10-18 21:02:15 +0000
commit2209edc7f070ff398b3bb8c64d5e7c036ecbb607 (patch)
tree010c7c7df88d1bc879275a5658f0e43e71b8d573 /admin
parentcd53c8fcd7b6f3d8af741134909b08f747dc191f (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
Diffstat (limited to 'admin')
-rw-r--r--admin/include/functions.php39
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);
}
}
}