1 | /**
|
---|
2 | * Hide and show all checkboxes
|
---|
3 | * status = true (show boxes), false (hide boxes)
|
---|
4 | */
|
---|
5 | function display_checkboxes(status)
|
---|
6 | {
|
---|
7 | var form = document.getElementById('set-permissions');
|
---|
8 | var cb = document.getElementsByTagName('input');
|
---|
9 | var display;
|
---|
10 |
|
---|
11 | //show
|
---|
12 | if (status)
|
---|
13 | {
|
---|
14 | display = 'inline';
|
---|
15 | }
|
---|
16 | //hide
|
---|
17 | else
|
---|
18 | {
|
---|
19 | display = 'none';
|
---|
20 | }
|
---|
21 |
|
---|
22 | for (var i = 0; i < cb.length; i++ )
|
---|
23 | {
|
---|
24 | if (cb[i].className == 'permissions-checkbox')
|
---|
25 | {
|
---|
26 | cb[i].style.display = display;
|
---|
27 | }
|
---|
28 |
|
---|
29 | }
|
---|
30 |
|
---|
31 | }
|
---|
32 |
|
---|
33 |
|
---|
34 | /**
|
---|
35 | * Change opacity of element
|
---|
36 | * e = element
|
---|
37 | * value = 0 (hidden) till 10 (fully visible)
|
---|
38 | */
|
---|
39 | function set_opacity(e, value) {
|
---|
40 | e.style.opacity = value/10;
|
---|
41 |
|
---|
42 | //IE opacity currently turned off, because of its astronomical stupidity
|
---|
43 | //e.style.filter = 'alpha(opacity=' + value*10 + ')';
|
---|
44 | }
|
---|
45 |
|
---|
46 | /**
|
---|
47 | * Reset the opacity and checkboxes
|
---|
48 | * block_id = id of the element that needs to be toggled
|
---|
49 | */
|
---|
50 | function toggle_opacity(block_id) {
|
---|
51 | var cb = document.getElementById('checkbox' + block_id);
|
---|
52 | var fs = document.getElementById('perm' + block_id);
|
---|
53 |
|
---|
54 | if (cb.checked)
|
---|
55 | {
|
---|
56 | set_opacity(fs, 5);
|
---|
57 | }
|
---|
58 | else
|
---|
59 | {
|
---|
60 | set_opacity(fs, 10);
|
---|
61 | }
|
---|
62 | }
|
---|
63 |
|
---|
64 | /**
|
---|
65 | * Reset the opacity and checkboxes
|
---|
66 | * value = 0 (checked) and 1 (unchecked)
|
---|
67 | * except_id = id of the element not to hide
|
---|
68 | */
|
---|
69 | function reset_opacity(status, except_id) {
|
---|
70 | var perm = document.getElementById('set-permissions');
|
---|
71 | var fs = perm.getElementsByTagName('fieldset');
|
---|
72 | var opacity = 5;
|
---|
73 |
|
---|
74 | if (status)
|
---|
75 | {
|
---|
76 | opacity = 10;
|
---|
77 | }
|
---|
78 |
|
---|
79 | for (var i = 0; i < fs.length; i++ )
|
---|
80 | {
|
---|
81 | if (fs[i].className != 'quick')
|
---|
82 | {
|
---|
83 | set_opacity(fs[i], opacity);
|
---|
84 | }
|
---|
85 | }
|
---|
86 |
|
---|
87 | if (typeof(except_id) != 'undefined')
|
---|
88 | {
|
---|
89 | set_opacity(document.getElementById('perm' + except_id), 10);
|
---|
90 | }
|
---|
91 |
|
---|
92 | //reset checkboxes too
|
---|
93 | marklist('set-permissions', 'inherit', !status);
|
---|
94 | }
|
---|
95 |
|
---|
96 |
|
---|
97 | /**
|
---|
98 | * Check whether we have a full radiobutton row of true
|
---|
99 | * index = offset for the row of inputs (0 == first row, 1 == second, 2 == third),
|
---|
100 | * rb = array of radiobuttons
|
---|
101 | */
|
---|
102 | function get_radio_status(index, rb)
|
---|
103 | {
|
---|
104 | for (var i = index; i < rb.length; i = i + 3 )
|
---|
105 | {
|
---|
106 | if (rb[i].checked != true)
|
---|
107 | {
|
---|
108 | if (i > index)
|
---|
109 | {
|
---|
110 | //at least one is true, but not all (custom)
|
---|
111 | return 2;
|
---|
112 | }
|
---|
113 | //first one is not true
|
---|
114 | return 0;
|
---|
115 | }
|
---|
116 | }
|
---|
117 |
|
---|
118 | // all radiobuttons true
|
---|
119 | return 1;
|
---|
120 | }
|
---|
121 |
|
---|
122 | /**
|
---|
123 | * Set tab colours
|
---|
124 | * id = panel the tab needs to be set for,
|
---|
125 | * init = initialising on open,
|
---|
126 | * quick = If no calculation needed, this contains the colour
|
---|
127 | */
|
---|
128 | function set_colours(id, init, quick)
|
---|
129 | {
|
---|
130 | var table = document.getElementById('table' + id);
|
---|
131 | var tab = document.getElementById('tab' + id);
|
---|
132 |
|
---|
133 | if (typeof(quick) != 'undefined')
|
---|
134 | {
|
---|
135 | tab.className = 'permissions-preset-' + quick + ' activetab';
|
---|
136 | return;
|
---|
137 | }
|
---|
138 |
|
---|
139 | var rb = table.getElementsByTagName('input');
|
---|
140 | var colour = 'custom';
|
---|
141 |
|
---|
142 | var status = get_radio_status(0, rb);
|
---|
143 |
|
---|
144 | if (status == 1)
|
---|
145 | {
|
---|
146 | colour = 'yes';
|
---|
147 | }
|
---|
148 | else if (status == 0)
|
---|
149 | {
|
---|
150 | // We move on to No
|
---|
151 | status = get_radio_status(1, rb);
|
---|
152 |
|
---|
153 | if (status == 1)
|
---|
154 | {
|
---|
155 | colour = 'no';
|
---|
156 | }
|
---|
157 | else if (status == 0)
|
---|
158 | {
|
---|
159 | // We move on to Never
|
---|
160 | status = get_radio_status(2, rb);
|
---|
161 |
|
---|
162 | if (status == 1)
|
---|
163 | {
|
---|
164 | colour = 'never';
|
---|
165 | }
|
---|
166 | }
|
---|
167 | }
|
---|
168 |
|
---|
169 | if (init)
|
---|
170 | {
|
---|
171 | tab.className = 'permissions-preset-' + colour;
|
---|
172 | }
|
---|
173 | else
|
---|
174 | {
|
---|
175 | tab.className = 'permissions-preset-' + colour + ' activetab';
|
---|
176 | }
|
---|
177 | }
|
---|
178 |
|
---|
179 | /**
|
---|
180 | * Initialise advanced tab colours on first load
|
---|
181 | * block_id = block that is opened
|
---|
182 | */
|
---|
183 | function init_colours(block_id)
|
---|
184 | {
|
---|
185 | var block = document.getElementById('advanced' + block_id);
|
---|
186 | var panels = block.getElementsByTagName('div');
|
---|
187 | var tab = document.getElementById('tab' + id);
|
---|
188 |
|
---|
189 | for (var i = 0; i < panels.length; i++)
|
---|
190 | {
|
---|
191 | if(panels[i].className == 'permissions-panel')
|
---|
192 | {
|
---|
193 | set_colours(panels[i].id.replace(/options/, ''), true);
|
---|
194 | }
|
---|
195 | }
|
---|
196 |
|
---|
197 | tab.className = tab.className + ' activetab';
|
---|
198 | }
|
---|
199 |
|
---|
200 | /**
|
---|
201 | * Show/hide option panels
|
---|
202 | * value = suffix for ID to show
|
---|
203 | * adv = we are opening advanced permissions
|
---|
204 | * view = called from view permissions
|
---|
205 | */
|
---|
206 | function swap_options(pmask, fmask, cat, adv, view)
|
---|
207 | {
|
---|
208 | id = pmask + fmask + cat;
|
---|
209 | active_option = active_pmask + active_fmask + active_cat;
|
---|
210 |
|
---|
211 | var old_tab = document.getElementById('tab' + active_option);
|
---|
212 | var new_tab = document.getElementById('tab' + id);
|
---|
213 | var adv_block = document.getElementById('advanced' + pmask + fmask);
|
---|
214 |
|
---|
215 | if (adv_block.style.display == 'block' && adv == true)
|
---|
216 | {
|
---|
217 | dE('advanced' + pmask + fmask, -1);
|
---|
218 | reset_opacity(1);
|
---|
219 | display_checkboxes(false);
|
---|
220 | return;
|
---|
221 | }
|
---|
222 |
|
---|
223 | // no need to set anything if we are clicking on the same tab again
|
---|
224 | if (new_tab == old_tab && !adv)
|
---|
225 | {
|
---|
226 | return;
|
---|
227 | }
|
---|
228 |
|
---|
229 | // init colours
|
---|
230 | if (adv && (pmask + fmask) != (active_pmask + active_fmask))
|
---|
231 | {
|
---|
232 | init_colours(pmask + fmask);
|
---|
233 | display_checkboxes(true);
|
---|
234 | reset_opacity(1);
|
---|
235 | }
|
---|
236 | else if (adv)
|
---|
237 | {
|
---|
238 | //Checkbox might have been clicked, but we need full visibility
|
---|
239 | display_checkboxes(true);
|
---|
240 | reset_opacity(1);
|
---|
241 | }
|
---|
242 |
|
---|
243 | // set active tab
|
---|
244 | old_tab.className = old_tab.className.replace(/\ activetab/g, '');
|
---|
245 | new_tab.className = new_tab.className + ' activetab';
|
---|
246 |
|
---|
247 | if (id == active_option && adv != true)
|
---|
248 | {
|
---|
249 | return;
|
---|
250 | }
|
---|
251 |
|
---|
252 | dE('options' + active_option, -1);
|
---|
253 |
|
---|
254 | //hiding and showing the checkbox
|
---|
255 | if (document.getElementById('checkbox' + active_pmask + active_fmask))
|
---|
256 | {
|
---|
257 | dE('checkbox' + pmask + fmask, -1);
|
---|
258 |
|
---|
259 | if ((pmask + fmask) != (active_pmask + active_fmask))
|
---|
260 | {
|
---|
261 | document.getElementById('checkbox' + active_pmask + active_fmask).style.display = 'inline';
|
---|
262 | }
|
---|
263 | }
|
---|
264 |
|
---|
265 | if (!view)
|
---|
266 | {
|
---|
267 | dE('advanced' + active_pmask + active_fmask, -1);
|
---|
268 | }
|
---|
269 |
|
---|
270 | if (!view)
|
---|
271 | {
|
---|
272 | dE('advanced' + pmask + fmask, 1);
|
---|
273 | }
|
---|
274 | dE('options' + id, 1);
|
---|
275 |
|
---|
276 | active_pmask = pmask;
|
---|
277 | active_fmask = fmask;
|
---|
278 | active_cat = cat;
|
---|
279 | }
|
---|
280 |
|
---|
281 | /**
|
---|
282 | * Mark all radio buttons in one panel
|
---|
283 | * id = table ID container, s = status ['y'/'u'/'n']
|
---|
284 | */
|
---|
285 | function mark_options(id, s)
|
---|
286 | {
|
---|
287 | var t = document.getElementById(id);
|
---|
288 |
|
---|
289 | if (!t)
|
---|
290 | {
|
---|
291 | return;
|
---|
292 | }
|
---|
293 |
|
---|
294 | var rb = t.getElementsByTagName('input');
|
---|
295 |
|
---|
296 | for (var r = 0; r < rb.length; r++)
|
---|
297 | {
|
---|
298 | if (rb[r].id.substr(rb[r].id.length-1) == s)
|
---|
299 | {
|
---|
300 | rb[r].checked = true;
|
---|
301 | }
|
---|
302 | }
|
---|
303 | }
|
---|
304 |
|
---|
305 | function mark_one_option(id, field_name, s)
|
---|
306 | {
|
---|
307 | var t = document.getElementById(id);
|
---|
308 |
|
---|
309 | if (!t)
|
---|
310 | {
|
---|
311 | return;
|
---|
312 | }
|
---|
313 |
|
---|
314 | var rb = t.getElementsByTagName('input');
|
---|
315 |
|
---|
316 | for (var r = 0; r < rb.length; r++)
|
---|
317 | {
|
---|
318 | if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) == field_name && rb[r].id.substr(rb[r].id.length-1) == s)
|
---|
319 | {
|
---|
320 | rb[r].checked = true;
|
---|
321 | }
|
---|
322 | }
|
---|
323 | }
|
---|
324 |
|
---|
325 | /**
|
---|
326 | * Reset role dropdown field to Select role... if an option gets changed
|
---|
327 | */
|
---|
328 | function reset_role(id)
|
---|
329 | {
|
---|
330 | var t = document.getElementById(id);
|
---|
331 |
|
---|
332 | if (!t)
|
---|
333 | {
|
---|
334 | return;
|
---|
335 | }
|
---|
336 |
|
---|
337 | t.options[0].selected = true;
|
---|
338 | }
|
---|
339 |
|
---|
340 | /**
|
---|
341 | * Load role and set options accordingly
|
---|
342 | */
|
---|
343 | function set_role_settings(role_id, target_id)
|
---|
344 | {
|
---|
345 | settings = role_options[role_id];
|
---|
346 |
|
---|
347 | if (!settings)
|
---|
348 | {
|
---|
349 | return;
|
---|
350 | }
|
---|
351 |
|
---|
352 | // Mark all options to no (unset) first...
|
---|
353 | mark_options(target_id, 'u');
|
---|
354 |
|
---|
355 | for (var r in settings)
|
---|
356 | {
|
---|
357 | mark_one_option(target_id, r, (settings[r] == 1) ? 'y' : 'n');
|
---|
358 | }
|
---|
359 | }
|
---|