Ignore:
Timestamp:
Mar 3, 2011, 10:12:57 PM (13 years ago)
Author:
plg
Message:

a permission may not automatically apply to sub-albums

in the upload form, the album list does not show private (and unreachable for
the user) albums and public albums that contains photos invisible to the user.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/community/include/functions_community.inc.php

    r9452 r9500  
    2424function community_get_user_permissions($user_id)
    2525{
    26   global $conf;
    27 
    28   if (is_admin())
    29   {
    30     return array(
    31       'upload_whole_gallery' => true,
    32       'create_whole_gallery' => true,
    33       'create_categories' => array(),
    34       'upload_categories' => array(),
    35       'permission_ids' => array(),
    36       );
    37   }
     26  global $conf, $user;
    3827
    3928  $return = array(
     
    5847    id,
    5948    category_id,
     49    recursive,
    6050    create_subcategories
    6151  FROM '.COMMUNITY_PERMISSIONS_TABLE.'
     
    7868;';
    7969
     70  $recursive_categories = array();
     71
    8072  $result = pwg_query($query);
    8173  while ($row = pwg_db_fetch_assoc($result))
     
    9082    {
    9183      array_push($return['upload_categories'], $row['category_id']);
     84
     85      if ('true' == $row['recursive'])
     86      {
     87        array_push($recursive_categories, $row['category_id']);
     88      }
    9289    }
    9390
     
    105102  }
    106103
    107   if (!$return['upload_whole_gallery'] and count($return['upload_categories']) > 0)
    108   {
    109     $return['upload_categories'] = get_subcat_ids($return['upload_categories']);
    110   }
    111 
    112   if (!$return ['create_whole_gallery'] and count($return['create_categories']) > 0)
    113   {
     104  if (is_admin())
     105  {
     106    $return ['upload_whole_gallery'] = true;
     107    $return ['create_whole_gallery'] = true;
     108  }
     109
     110  // these are categories with access permission but considering the user
     111  // has a level 8 (maximum level). We want to keep categories with no
     112  // photos inside (for nobody)
     113  $forbidden_categories = calculate_permissions($user['id'], $user['status']);
     114 
     115  $empty_categories = array_diff(
     116    explode(',', $user['forbidden_categories']),
     117    explode(',', $forbidden_categories)
     118    );
     119
     120  if (count($empty_categories) > 0)
     121  {
     122    $query = '
     123SELECT
     124    category_id
     125  FROM '.IMAGE_CATEGORY_TABLE.'
     126    JOIN '.IMAGES_TABLE.'
     127  WHERE category_id IN ('.implode(',', $empty_categories).')
     128    AND level > '.$user['level'].'
     129    AND level <= 8
     130  GROUP BY category_id
     131;';
     132    $not_really_empty_categories = array_keys(hash_from_query($query, 'category_id'));
     133    $forbidden_categories.= ','.implode(',', $not_really_empty_categories);
     134  }
     135
     136  $query = '
     137SELECT
     138    id
     139  FROM '.CATEGORIES_TABLE.'
     140;';
     141  $all_categories = array_keys(hash_from_query($query, 'id'));
     142
     143  if ($return['upload_whole_gallery'])
     144  {
     145    $return['upload_categories'] = array_diff(
     146      $all_categories,
     147      explode(',', $forbidden_categories)
     148      );
     149  }
     150  elseif (count($return['upload_categories']) > 0)
     151  {
     152    if (count($recursive_categories) > 0)
     153    {
     154      $return['upload_categories'] = array_unique(
     155        array_merge(
     156          $return['upload_categories'],
     157          get_subcat_ids($recursive_categories)
     158          )
     159        );
     160    }
     161
     162    $return['upload_categories'] = array_diff(
     163      $return['upload_categories'],
     164      explode(',', $forbidden_categories)
     165      );
     166  }
     167
     168  if ($return ['create_whole_gallery'])
     169  {
     170    $return['create_categories'] = array_diff(
     171      $all_categories,
     172      explode(',', $forbidden_categories)
     173      );
     174  }
     175  elseif (count($return['create_categories']) > 0)
     176  {
     177    // no need to check for "recursive", an upload permission can't be
     178    // "create_subcategories" without being "recursive"
    114179    $return['create_categories'] = get_subcat_ids($return['create_categories']);
     180
     181    $return['create_categories'] = array_diff(
     182      $return['create_categories'],
     183      explode(',', $forbidden_categories)
     184      );
    115185  }
    116186
Note: See TracChangeset for help on using the changeset viewer.