source: extensions/community/admin_permissions.tpl @ 23085

Revision 23085, 11.5 KB checked in by plg, 7 years ago (diff)

New feature: user album. Only for registered users, no recursivity. Piwigo
will automatically create an upload album for each user with appropriate
community permissions, at first connection.

Bug fixed: on activation, do not create a new "Community" album if it already
exists.

Bug fixed: remove debug for quota

Bug fixed: round corners for number of pending pictures in admin menu.

Line 
1{combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
2{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"}
3
4{literal}
5<style>
6form fieldset p {text-align:left;margin:0 0 1.5em 0;line-height:20px;}
7.permissionActions {text-align:center;height:20px}
8.permissionActions a:hover {border:none}
9.permissionActions img {margin-bottom:-2px}
10.rowSelected {background-color:#C2F5C2 !important}
11#community_nb_photos, #community_storage {width:400px; display:inline-block; margin-right:10px;}
12</style>
13{/literal}
14
15{footer_script}{literal}
16function sprintf() {
17        var i = 0, a, f = arguments[i++], o = [], m, p, c, x, s = '';
18        while (f) {
19                if (m = /^[^\x25]+/.exec(f)) {
20                        o.push(m[0]);
21                }
22                else if (m = /^\x25{2}/.exec(f)) {
23                        o.push('%');
24                }
25                else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
26                        if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) {
27                                throw('Too few arguments.');
28                        }
29                        if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) {
30                                throw('Expecting number but found ' + typeof(a));
31                        }
32                        switch (m[7]) {
33                                case 'b': a = a.toString(2); break;
34                                case 'c': a = String.fromCharCode(a); break;
35                                case 'd': a = parseInt(a); break;
36                                case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
37                                case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
38                                case 'o': a = a.toString(8); break;
39                                case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
40                                case 'u': a = Math.abs(a); break;
41                                case 'x': a = a.toString(16); break;
42                                case 'X': a = a.toString(16).toUpperCase(); break;
43                        }
44                        a = (/[def]/.test(m[7]) && m[2] && a >= 0 ? '+'+ a : a);
45                        c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
46                        x = m[5] - String(a).length - s.length;
47                        p = m[5] ? str_repeat(c, x) : '';
48                        o.push(s + (m[4] ? a + p : p + a));
49                }
50                else {
51                        throw('Huh ?!');
52                }
53                f = f.substring(m[0].length);
54        }
55        return o.join('');
56}
57
58$(document).ready(function() {
59  $("select[name=who]").change(function () {
60    $("[name^=who_]").hide();
61    $("[name=who_"+$(this).attr("value")+"]").show();
62    checkWhoOptions();
63  });
64
65  function checkWhoOptions() {
66    if ('any_visitor' == $("select[name=who] option:selected").val()) {
67      $("#userAlbumOption").attr("disabled", true);
68      $("#userAlbumInfo").hide();
69
70      if (-1 == $("select[name=category] option:selected").val()) {
71        $("select[name=category]").val("0");
72        checkWhereOptions();
73      }
74    }
75    else {
76      $("#userAlbumOption").attr("disabled", false);
77      $("#userAlbumInfo").show();
78    }
79  }
80  checkWhoOptions();
81
82  function checkWhereOptions() {
83    var recursive = $("input[name=recursive]");
84    var create = $("input[name=create_subcategories]");
85
86    if ($("select[name=category] option:selected").val() == 0) {
87      $(recursive).attr("disabled", true);
88      $(recursive).attr('checked', true);
89    }
90    else if ($("select[name=category] option:selected").val() == -1) {
91      /* user upload only */
92      $(recursive).attr("disabled", true).attr('checked', false);
93      $(create).attr("disabled", true).attr('checked', false);
94    }
95    else {
96      $(recursive).removeAttr("disabled");
97    }
98
99    if (!$(recursive).is(':checked')) {
100      $(create).attr('checked', false);
101      $(create).attr("disabled", true);
102    }
103    else {
104      $(create).removeAttr("disabled");
105    }
106  }
107
108  checkWhereOptions();
109
110  $("select[name=category]").change(function() {
111    checkWhereOptions();
112  });
113
114  $("input[name=recursive]").change(function() {
115    checkWhereOptions();
116  });
117
118  $("#displayForm").click(function() {
119    $("[name=add_permission]").show();
120    $(this).hide();
121    return false;
122  });
123
124  /* ∞ */
125  /**
126   * find the key from a value in the startStopValues array
127   */
128  function getSliderKeyFromValue(value, values) {
129    for (var key in values) {
130      if (values[key] == value) {
131        return key;
132      }
133    }
134    return 0;
135  }
136
137  var nbPhotosValues = [5,10,20,50,100,500,1000,5000,-1];
138
139  function getNbPhotosInfoFromIdx(idx) {
140    if (idx == nbPhotosValues.length - 1) {
141      return "{/literal}{'no limit'|@translate}{literal}";
142    }
143
144    return sprintf(
145      "{/literal}{'up to %d photos (for each user)'|@translate}{literal}",
146      nbPhotosValues[idx]
147    );
148  }
149
150  /* init nb_photos info span */
151  var nbPhotos_init = getSliderKeyFromValue(jQuery('input[name=nb_photos]').val(), nbPhotosValues);
152
153  jQuery("#community_nb_photos_info").html(getNbPhotosInfoFromIdx(nbPhotos_init));
154
155  jQuery("#community_nb_photos").slider({
156    range: "min",
157    min: 0,
158    max: nbPhotosValues.length - 1,
159    value: nbPhotos_init,
160    slide: function( event, ui ) {
161      jQuery("#community_nb_photos_info").html(getNbPhotosInfoFromIdx(ui.value));
162    },
163    stop: function( event, ui ) {
164      jQuery("input[name=nb_photos]").val(nbPhotosValues[ui.value]);
165    }
166  });
167
168  var storageValues = [10,50,100,200,500,1000,5000,-1];
169
170  function getStorageInfoFromIdx(idx) {
171    if (idx == storageValues.length - 1) {
172      return "{/literal}{'no limit'|@translate}{literal}";
173    }
174
175    return sprintf(
176      "{/literal}{'up to %dMB (for each user)'|@translate}{literal}",
177      storageValues[idx]
178    );
179  }
180
181  /* init storage info span */
182  var storage_init = getSliderKeyFromValue(jQuery('input[name=storage]').val(), storageValues);
183
184  jQuery("#community_storage_info").html(getStorageInfoFromIdx(storage_init));
185
186  jQuery("#community_storage").slider({
187    range: "min",
188    min: 0,
189    max: storageValues.length - 1,
190    value: storage_init,
191    slide: function( event, ui ) {
192      jQuery("#community_storage_info").html(getStorageInfoFromIdx(ui.value));
193    },
194    stop: function( event, ui ) {
195      jQuery("input[name=storage]").val(storageValues[ui.value]);
196    }
197  });
198
199});
200{/literal}{/footer_script}
201
202
203<div class="titrePage">
204  <h2>{'Upload Permissions'|@translate} - {'Community'|@translate}</h2>
205</div>
206
207{if not isset($edit)}
208<a id="displayForm" href="#">{'Add a permission'|@translate}</a>
209{/if}
210
211<form method="post" name="add_permission" action="{$F_ADD_ACTION}" class="properties" {if not isset($edit)}style="display:none"{/if}>
212  <fieldset>
213    <legend>{if isset($edit)}{'Edit a permission'|@translate}{else}{'Add a permission'|@translate}{/if}</legend>
214
215    <p>
216      <strong>{'Who?'|@translate}</strong>
217      <br>
218      <select name="who">
219{html_options options=$who_options selected=$who_options_selected}
220      </select>
221
222      <select name="who_user" {if not isset($user_options_selected)}style="display:none"{/if}>
223{html_options options=$user_options selected=$user_options_selected}
224      </select>
225
226      <select name="who_group" {if not isset($group_options_selected)}style="display:none"{/if}>
227{html_options options=$group_options selected=$group_options_selected}
228      </select>
229    </p>
230
231    <p>
232      <strong>{'Where?'|@translate}</strong> {if $community_conf.user_albums}<em id="userAlbumInfo">{'(in addition to user album)'|@translate}</em>{/if}
233      <br>
234      <select class="categoryDropDown" name="category">
235{if $community_conf.user_albums}
236        <option value="-1"{if $user_album_selected} selected="selected"{/if} id="userAlbumOption">{'User album only'|@translate}</option>
237{/if}
238        <option value="0"{if $whole_gallery_selected} selected="selected"{/if}>{'The whole gallery'|@translate}</option>
239        <option disabled="disabled">------------</option>
240        {html_options options=$category_options selected=$category_options_selected}
241      </select>
242      <br>
243      <label><input type="checkbox" name="recursive" {if $recursive}checked="checked"{/if}> {'Apply to sub-albums'|@translate}</label>
244      <br>
245      <label><input type="checkbox" name="create_subcategories" {if $create_subcategories}checked="checked"{/if}> {'ability to create sub-albums'|@translate}</label>
246    </p>
247
248    <p>
249      <strong>{'Which level of trust?'|@translate}</strong>
250      <br><label><input type="radio" name="moderated" value="true" {if $moderated}checked="checked"{/if}> <em>{'low trust'|@translate}</em> : {'uploaded photos must be validated by an administrator'|@translate}</label>
251      <br><label><input type="radio" name="moderated" value="false" {if not $moderated}checked="checked"{/if}> <em>{'high trust'|@translate}</em> : {'uploaded photos are directly displayed in the gallery'|@translate}</label>
252    </p>
253
254    <p style="margin-bottom:0">
255      <strong>{'How many photos?'|@translate}</strong>
256    </p>
257    <div id="community_nb_photos"></div>
258    <span id="community_nb_photos_info">{'no limit'|@translate}</span>
259    <input type="hidden" name="nb_photos" value="{$nb_photos}">
260
261    <p style="margin-top:1.5em;margin-bottom:0;">
262      <strong>{'How much disk space?'|@translate}</strong>
263    </p>
264    <div id="community_storage"></div>
265    <span id="community_storage_info">{'no limit'|@translate}</span>
266    <input type="hidden" name="storage" value="{$storage}">
267
268    {if isset($edit)}
269      <input type="hidden" name="edit" value="{$edit}">
270    {/if}
271   
272    <p style="margin-top:1.5em;">
273      <input class="submit" type="submit" name="submit_add" value="{if isset($edit)}{'Submit'|@translate}{else}{'Add'|@translate}{/if}"/>
274      <a href="{$F_ADD_ACTION}">{'Cancel'|@translate}</a>
275    </p>
276  </fieldset>
277</form>
278
279<table class="table2" style="margin:15px auto;">
280  <tr class="throw">
281    <th>{'Who?'|@translate}</th>
282    <th>{'Where?'|@translate}</th>
283    <th>{'Options'|@translate}</th>
284    <th>{'Actions'|@translate}</th>
285  </tr>
286{if not empty($permissions)}
287  {foreach from=$permissions item=permission name=permission_loop}
288  <tr class="{if $smarty.foreach.permission_loop.index is odd}row1{else}row2{/if}{if $permission.HIGHLIGHT} rowSelected{/if}">
289    <td>{$permission.WHO}</td>
290    <td>{$permission.WHERE}</td>
291    <td>
292      <span title="{$permission.TRUST_TOOLTIP}">{$permission.TRUST}</span>{if $permission.RECURSIVE},
293<span title="{$permission.RECURSIVE_TOOLTIP}">{'sub-albums'|@translate}</span>{/if}{if $permission.NB_PHOTOS},
294<span title="{$permission.NB_PHOTOS_TOOLTIP}">{'%d photos'|@translate|sprintf:$permission.NB_PHOTOS}</span>{/if}{if $permission.STORAGE},
295<span title="{$permission.STORAGE_TOOLTIP}">{$permission.STORAGE}MB</span>{/if}
296    {if $permission.CREATE_SUBCATEGORIES}
297, {'sub-albums creation'|@translate}
298    {/if}
299    </td>
300    <td class="permissionActions">
301      <a href="{$permission.U_EDIT}">
302        <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/edit_s.png" alt="{'edit'|@translate}" title="{'edit'|@translate}" />
303      </a>
304      <a href="{$permission.U_DELETE}" onclick="return confirm( document.getElementById('btn_delete').title + '\n\n' + '{'Are you sure?'|@translate|@escape:'javascript'}');">
305        <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/delete.png" id="btn_delete" alt="{'delete'|@translate}" title="{'Delete permission'|@translate}" />
306      </a>
307    </td>
308  </tr>
309  {/foreach}
310{/if}
311</table>
Note: See TracBrowser for help on using the repository browser.