Changeset 13580


Ignore:
Timestamp:
03/17/12 01:47:17 (8 years ago)
Author:
plg
Message:

feature 2594: redesign on album permission screen. The choice "public/private"
is not on the "properties" tab anymore. Simpler ergonomy to select grant users
and groups.

Location:
trunk/admin
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/album.php

    r13013 r13580  
    4444$category = pwg_db_fetch_assoc(pwg_query($query)); 
    4545 
     46if (!isset($category['id'])) 
     47{ 
     48  die("unknown album"); 
     49} 
     50 
    4651// +-----------------------------------------------------------------------+ 
    4752// | Tabs                                                                  | 
     
    6065$tabsheet->add('properties', l10n('Properties'), $admin_album_base_url.'-properties'); 
    6166$tabsheet->add('sort_order', l10n('Manage photo ranks'), $admin_album_base_url.'-sort_order'); 
    62  
    63 if ('private' == $category['status']) 
    64 { 
    65   $tabsheet->add('permissions', l10n('Permissions'), $admin_album_base_url.'-permissions'); 
    66 } 
    67  
     67$tabsheet->add('permissions', l10n('Permissions'), $admin_album_base_url.'-permissions'); 
    6868$tabsheet->select($page['tab']); 
    6969$tabsheet->assign(); 
  • trunk/admin/cat_modify.php

    r13077 r13580  
    145145    set_cat_visible(array($_GET['cat_id']), $_POST['visible']); 
    146146  } 
    147   if ($cat_info['status'] != $_POST['status'] ) 
    148   { 
    149     set_cat_status(array($_GET['cat_id']), $_POST['status']); 
    150   } 
    151147 
    152148  // in case the use moves his album to the gallery root, we force 
     
    164160  } 
    165161 
    166   // we redirect to hide/show the "permissions" tab if the category status 
    167   // has changed 
    168   $_SESSION['page_infos'] = array(l10n('Album updated successfully')); 
    169   redirect($admin_album_base_url); 
     162  array_push($page['infos'], l10n('Album updated successfully')); 
    170163} 
    171164elseif (isset($_POST['set_random_representant'])) 
     
    227220    'CAT_NAME'           => @htmlspecialchars($category['name']), 
    228221    'CAT_COMMENT'        => @htmlspecialchars($category['comment']), 
    229  
    230     'status_values'     => array('public','private'), 
    231  
    232     'CAT_STATUS'        => $category['status'], 
    233222    'CAT_VISIBLE'       => boolean_to_string($category['visible']), 
    234223 
  • trunk/admin/cat_perm.php

    r13013 r13580  
    3838// +-----------------------------------------------------------------------+ 
    3939 
    40 // if the category is not correct (not numeric, not private) 
    41 if (isset($_GET['cat']) and is_numeric($_GET['cat'])) 
     40$page['cat'] = $category['id']; 
     41 
     42// +-----------------------------------------------------------------------+ 
     43// |                           form submission                             | 
     44// +-----------------------------------------------------------------------+ 
     45 
     46if (!empty($_POST)) 
    4247{ 
    43   $query = ' 
    44 SELECT status 
    45   FROM '.CATEGORIES_TABLE.' 
    46   WHERE id = '.$_GET['cat'].' 
    47 ;'; 
    48   list($status) = pwg_db_fetch_row(pwg_query($query)); 
    49    
    50   if ('private' == $status) 
    51   { 
    52     $page['cat'] = $_GET['cat']; 
    53   } 
    54 } 
    55  
    56 if (!isset($page['cat'])) 
    57 { 
    58   $query = ' 
     48  check_pwg_token(); 
     49 
     50  if ($category['status'] != $_POST['status']) 
     51  { 
     52    set_cat_status(array($page['cat']), $_POST['status']); 
     53    $category['status'] = $_POST['status']; 
     54  } 
     55 
     56  if ('private' == $_POST['status']) 
     57  { 
     58    // 
     59    // manage groups 
     60    // 
     61    $query = ' 
     62SELECT group_id 
     63  FROM '.GROUP_ACCESS_TABLE.' 
     64  WHERE cat_id = '.$page['cat'].' 
     65;'; 
     66    $groups_granted = array_from_query($query, 'group_id'); 
     67 
     68    if (!isset($_POST['groups'])) 
     69    { 
     70      $_POST['groups'] = array(); 
     71    } 
     72     
     73    // 
     74    // remove permissions to groups 
     75    // 
     76    $deny_groups = array_diff($groups_granted, $_POST['groups']); 
     77    if (count($deny_groups) > 0) 
     78    { 
     79      // if you forbid access to an album, all sub-albums become 
     80      // automatically forbidden 
     81      $query = ' 
     82DELETE 
     83  FROM '.GROUP_ACCESS_TABLE.' 
     84  WHERE group_id IN ('.implode(',', $deny_groups).') 
     85    AND cat_id IN ('.implode(',', get_subcat_ids(array($page['cat']))).') 
     86;'; 
     87      pwg_query($query); 
     88    } 
     89 
     90    // 
     91    // add permissions to groups 
     92    // 
     93    $grant_groups = array_diff($_POST['groups'], $groups_granted); 
     94    if (count($grant_groups) > 0) 
     95    { 
     96      $cat_ids = get_uppercat_ids(array($page['cat'])); 
     97      if (isset($_POST['apply_on_sub'])) 
     98      { 
     99        $cat_ids = array_merge($cat_ids, get_subcat_ids(array($page['cat']))); 
     100      } 
     101       
     102      $query = ' 
    59103SELECT id 
    60104  FROM '.CATEGORIES_TABLE.' 
    61   WHERE status = \'private\' 
    62   LIMIT 1 
    63 ;'; 
    64  
    65   list($page['cat']) = pwg_db_fetch_row(pwg_query($query)); 
    66 } 
    67  
    68 // +-----------------------------------------------------------------------+ 
    69 // |                           form submission                             | 
    70 // +-----------------------------------------------------------------------+ 
    71 if (isset($_POST['deny_groups_submit']) or isset($_POST['grant_groups_submit']) or isset($_POST['deny_users_submit']) or isset($_POST['grant_users_submit']) ) 
    72 { 
    73   check_pwg_token(); 
    74 } 
    75  
    76 if (isset($_POST['deny_groups_submit']) 
    77          and isset($_POST['deny_groups']) 
    78          and count($_POST['deny_groups']) > 0) 
    79 { 
    80   // if you forbid access to a category, all sub-categories become 
    81   // automatically forbidden 
    82   $query = ' 
    83 DELETE 
    84   FROM '.GROUP_ACCESS_TABLE.' 
    85   WHERE group_id IN ('.implode(',', $_POST['deny_groups']).') 
    86     AND cat_id IN ('.implode(',', get_subcat_ids(array($page['cat']))).') 
    87 ;'; 
    88   pwg_query($query); 
    89 } 
    90 else if (isset($_POST['grant_groups_submit']) 
    91          and isset($_POST['grant_groups']) 
    92          and count($_POST['grant_groups']) > 0) 
    93 { 
    94   $cat_ids = (isset($_POST['apply_on_sub'])) ? implode(',', get_subcat_ids(array($page['cat']))).",".implode(',', get_uppercat_ids(array($page['cat']))) : implode(',', get_uppercat_ids(array($page['cat']))); 
    95  
    96   $query = ' 
    97 SELECT id 
    98   FROM '.CATEGORIES_TABLE.' 
    99   WHERE id IN ('.$cat_ids.') 
    100   AND status = \'private\' 
    101 ;'; 
    102   $private_cats = array_from_query($query, 'id'); 
    103  
    104   // We must not reinsert already existing lines in group_access table 
    105   $granteds = array(); 
    106   foreach ($private_cats as $cat_id) 
    107   { 
    108     $granteds[$cat_id] = array(); 
    109   } 
     105  WHERE id IN ('.implode(',', $cat_ids).') 
     106    AND status = \'private\' 
     107;'; 
     108      $private_cats = array_from_query($query, 'id'); 
     109 
     110      // We must not reinsert already existing lines in group_access table 
     111      $granteds = array(); 
     112      foreach ($private_cats as $cat_id) 
     113      { 
     114        $granteds[$cat_id] = array(); 
     115      } 
    110116   
    111   $query = ' 
    112 SELECT group_id, cat_id 
     117      $query = ' 
     118SELECT 
     119    group_id, 
     120    cat_id 
    113121  FROM '.GROUP_ACCESS_TABLE.' 
    114122  WHERE cat_id IN ('.implode(',', $private_cats).') 
    115     AND group_id IN ('.implode(',', $_POST['grant_groups']).') 
    116 ;'; 
    117   $result = pwg_query($query); 
    118   while ($row = pwg_db_fetch_assoc($result)) 
    119   { 
    120     array_push($granteds[$row['cat_id']], $row['group_id']); 
    121   } 
    122  
    123   $inserts = array(); 
    124    
    125   foreach ($private_cats as $cat_id) 
    126   { 
    127     $group_ids = array_diff($_POST['grant_groups'], $granteds[$cat_id]); 
    128     foreach ($group_ids as $group_id) 
    129     { 
    130       array_push($inserts, array('group_id' => $group_id, 
    131                                  'cat_id' => $cat_id)); 
    132     } 
    133   } 
    134  
    135   mass_inserts(GROUP_ACCESS_TABLE, array('group_id','cat_id'), $inserts); 
    136 } 
    137 else if (isset($_POST['deny_users_submit']) 
    138          and isset($_POST['deny_users']) 
    139          and count($_POST['deny_users']) > 0) 
    140 { 
    141   // if you forbid access to a category, all sub-categories become 
    142   // automatically forbidden 
    143   $query = ' 
     123    AND group_id IN ('.implode(',', $grant_groups).') 
     124;'; 
     125      $result = pwg_query($query); 
     126      while ($row = pwg_db_fetch_assoc($result)) 
     127      { 
     128        array_push($granteds[$row['cat_id']], $row['group_id']); 
     129      } 
     130 
     131      $inserts = array(); 
     132       
     133      foreach ($private_cats as $cat_id) 
     134      { 
     135        $group_ids = array_diff($grant_groups, $granteds[$cat_id]); 
     136        foreach ($group_ids as $group_id) 
     137        { 
     138          array_push( 
     139            $inserts, 
     140            array( 
     141              'group_id' => $group_id, 
     142              'cat_id' => $cat_id 
     143              ) 
     144            ); 
     145        } 
     146      } 
     147 
     148      mass_inserts(GROUP_ACCESS_TABLE, array('group_id','cat_id'), $inserts); 
     149    } 
     150 
     151    // 
     152    // users 
     153    // 
     154    $query = ' 
     155SELECT user_id 
     156  FROM '.USER_ACCESS_TABLE.' 
     157  WHERE cat_id = '.$page['cat'].' 
     158;'; 
     159    $users_granted = array_from_query($query, 'user_id'); 
     160 
     161    if (!isset($_POST['users'])) 
     162    { 
     163      $_POST['users'] = array(); 
     164    } 
     165     
     166    // 
     167    // remove permissions to users 
     168    // 
     169    $deny_users = array_diff($users_granted, $_POST['users']); 
     170    if (count($deny_users) > 0) 
     171    { 
     172      // if you forbid access to an album, all sub-album become automatically 
     173      // forbidden 
     174      $query = ' 
    144175DELETE 
    145176  FROM '.USER_ACCESS_TABLE.' 
    146   WHERE user_id IN ('.implode(',', $_POST['deny_users']).') 
     177  WHERE user_id IN ('.implode(',', $deny_users).') 
    147178    AND cat_id IN ('.implode(',', get_subcat_ids(array($page['cat']))).') 
    148179;'; 
    149   pwg_query($query); 
    150 } 
    151 else if (isset($_POST['grant_users_submit']) 
    152          and isset($_POST['grant_users']) 
    153          and count($_POST['grant_users']) > 0) 
    154 { 
    155   add_permission_on_category($page['cat'], $_POST['grant_users']); 
     180      pwg_query($query); 
     181    } 
     182 
     183    // 
     184    // add permissions to users 
     185    // 
     186    $grant_users = array_diff($_POST['users'], $users_granted); 
     187    if (count($grant_users) > 0) 
     188    { 
     189      add_permission_on_category($page['cat'], $grant_users); 
     190    } 
     191  } 
     192 
     193  array_push($page['infos'], l10n('Album updated successfully')); 
    156194} 
    157195 
     
    171209    'U_HELP' => get_root_url().'admin/popuphelp.php?page=cat_perm', 
    172210    'F_ACTION' => $admin_album_base_url.'-permissions', 
     211    'private' => ('private' == $category['status']), 
    173212    ) 
    174213  ); 
     
    189228;'; 
    190229$groups = simple_hash_from_query($query, 'id', 'name'); 
    191 $template->assign('all_groups', $groups); 
     230$template->assign('groups', $groups); 
    192231 
    193232// groups granted to access the category 
     
    198237;'; 
    199238$group_granted_ids = array_from_query($query, 'group_id'); 
    200 $group_granted_ids = order_by_name($group_granted_ids, $groups); 
    201 $template->assign('group_granted_ids', $group_granted_ids); 
    202  
    203  
    204 // groups denied 
    205 $template->assign('group_denied_ids', 
    206     order_by_name(array_diff(array_keys($groups), $group_granted_ids), $groups) 
    207   ); 
     239$template->assign('groups_selected', $group_granted_ids); 
    208240 
    209241// users... 
     
    216248;'; 
    217249$users = simple_hash_from_query($query, 'id', 'username'); 
    218 $template->assign('all_users', $users); 
     250$template->assign('users', $users); 
    219251 
    220252 
     
    225257;'; 
    226258$user_granted_direct_ids = array_from_query($query, 'user_id'); 
    227 $user_granted_direct_ids = order_by_name($user_granted_direct_ids, $users); 
    228 $template->assign('user_granted_direct_ids', $user_granted_direct_ids); 
    229  
     259$template->assign('users_selected', $user_granted_direct_ids); 
    230260 
    231261 
     
    283313} 
    284314 
    285 $user_denied_ids = array_diff(array_keys($users), 
    286                               $user_granted_indirect_ids, 
    287                               $user_granted_direct_ids); 
    288 $user_denied_ids = order_by_name($user_denied_ids, $users); 
    289 $template->assign('user_denied_ids', $user_denied_ids); 
    290  
    291  
    292315// +-----------------------------------------------------------------------+ 
    293316// |                           sending html code                           | 
  • trunk/admin/themes/default/template/cat_modify.tpl

    r13020 r13580  
    8282 
    8383  <p> 
    84     <strong>{'Access type'|@translate}</strong> 
    85     <br> 
    86     {html_radios name='status' values=$status_values output=$status_values|translate selected=$CAT_STATUS} 
    87   </p> 
    88  
    89   <p> 
    9084    <strong>{'Lock'|@translate}</strong> 
    9185    <br> 
  • trunk/admin/themes/default/template/cat_perm.tpl

    r13013 r13580  
     1{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'} 
     2{combine_css path="themes/default/js/plugins/chosen.css"} 
     3 
     4{footer_script}{literal} 
     5jQuery(document).ready(function() { 
     6  jQuery(".chzn-select").chosen(); 
     7 
     8  function checkStatusOptions() { 
     9    if (jQuery("input[name=status]:checked").val() == "private") { 
     10      jQuery("#privateOptions, #applytoSubAction").show(); 
     11    } 
     12    else { 
     13      jQuery("#privateOptions, #applytoSubAction").hide(); 
     14    } 
     15  } 
     16 
     17  checkStatusOptions(); 
     18  jQuery("#selectStatus").change(function() { 
     19    checkStatusOptions(); 
     20  }); 
     21}); 
     22{/literal}{/footer_script} 
     23 
    124<div class="titrePage"> 
    225  <h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> &#8250; {'Edit album'|@translate} {$TABSHEET_TITLE}</h2> 
     
    528<form action="{$F_ACTION}" method="post" id="categoryPermissions"> 
    629 
     30<fieldset> 
     31  <legend>{'Access type'|@translate}</legend> 
     32 
     33  <p id="selectStatus"> 
     34    <label><input type="radio" name="status" value="public" {if not $private}checked="checked"{/if}> <strong>{'public'|@translate}</strong> : <em>{'any visitor can see this album'|@translate}</em></label> 
     35    <br> 
     36    <label><input type="radio" name="status" value="private" {if $private}checked="checked"{/if}> <strong>{'private'|@translate}</strong> : <em>{'visitors need to login and have the appropriate permissions to see this album'|@translate}</em></label> 
     37  </p> 
     38</fieldset> 
     39 
     40<fieldset id="privateOptions"> 
     41  <legend>{'Groups and users'|@translate}</legend> 
     42 
     43  <p> 
     44    <strong>{'Permission granted for groups'|@translate}</strong> 
     45    <br> 
     46    <select data-placeholder="{'Select groups...'|@translate}" class="chzn-select" multiple style="width:700px;" name="groups[]"> 
     47      {html_options options=$groups selected=$groups_selected} 
     48    </select> 
     49  </p> 
     50 
     51  <p> 
     52    <strong>{'Permission granted for users'|@translate}</strong> 
     53    <br> 
     54    <select data-placeholder="{'Select users...'|@translate}" class="chzn-select" multiple style="width:700px;" name="users[]"> 
     55      {html_options options=$users selected=$users_selected} 
     56    </select> 
     57  </p> 
     58 
     59{* 
    760  <h4>{'Groups'|@translate}</h4> 
    861 
     
    61114    <label><input type="checkbox" name="apply_on_sub">{'Apply to sub-albums'|@translate}</label> 
    62115  </fieldset> 
     116*} 
     117</fieldset> 
     118 
     119  <p style="margin:12px;text-align:left;"> 
     120    <input class="submit" type="submit" value="{'Save Settings'|@translate}" name="submit"> 
     121    <label id="applytoSubAction" style="display:none;"><input type="checkbox" name="apply_on_sub">{'Apply to sub-albums'|@translate}</label> 
     122  </p> 
    63123 
    64124<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> 
  • trunk/admin/themes/default/theme.css

    r13451 r13580  
    243243TABLE.doubleSelect SELECT.categoryList { 
    244244        width: 100%; max-width: 100%; overflow-x: auto; 
    245 } 
    246  
    247 FORM#categoryPermissions LI { 
    248         display:inline; 
    249         white-space: nowrap; 
    250245} 
    251246 
Note: See TracChangeset for help on using the changeset viewer.