Bug 28882: Disable select/hide all links
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / members / member-flags.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Branches %]
4 [% SET footerjs = 1 %]
5 [% PROCESS 'permissions.inc' %]
6 [% INCLUDE 'doc-head-open.inc' %]
7 <title>
8     Set permissions for [% patron.surname | html %], [% patron.firstname | html %] &rsaquo; Patrons &rsaquo; Koha
9 </title>
10 [% INCLUDE 'doc-head-close.inc' %]
11 </head>
12
13 <body id="pat_member-flags" class="pat">
14 [% INCLUDE 'header.inc' %]
15 [% INCLUDE 'patron-search.inc' %]
16
17 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
18     <ol>
19         <li>
20             <a href="/cgi-bin/koha/mainpage.pl">Home</a>
21         </li>
22         <li>
23             <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>
24         </li>
25         <li>
26             <a href="#" aria-current="page">
27                 Set permissions for [% patron.surname | html %], [% patron.firstname | html %]
28             </a>
29         </li>
30     </ol>
31 </nav>
32
33 <div class="main container-fluid">
34     <div class="row">
35         <div class="col-sm-10 col-sm-push-2">
36             <main>
37
38 [% INCLUDE 'members-toolbar.inc' %]
39
40 <form id="flag_form" method="post" action="/cgi-bin/koha/members/member-flags.pl">
41     <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
42     <input type="hidden" name="member" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
43     <input type="hidden" name="newflags" value="1" />
44     <h1>Set permissions for [% patron.surname | html %], [% patron.firstname | html %]</h1>
45
46     <div id="permissionstree">
47         <div id="permissions_toolbar" class="btn-toolbar">
48             <button type="submit" class="btn btn-default"><i class="fa fa-save"></i> Save</button>
49             <a class="btn btn-default" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]"><i class="fa fa-remove"></i> Cancel</a>
50             <a class="toggleall toggleall_on btn btn-link" href="#"><i class="fa fa-plus-square-o"></i> Show all</a>
51             <a class="toggleall toggleall_off btn btn-link" href="#"><i class="fa fa-minus-square-o"></i> Hide all</a>
52             <a id="CheckAllFlags" class="btn btn-link" href="#">
53                 <i class="fa fa-check"></i> Select all
54             </a>
55             <a id="UncheckAllFlags" class="btn btn-link" href="#">
56                 <i class="fa fa-remove"></i> Clear all
57             </a>
58             <div class="btn-group pull-right">
59                 Filter: <input type="text" name="permissions_filter" id="permissions_filter" size="20" />
60                 <a href="#" id="clear_filter" style="display:none"><i class="fa fa-remove"></i></a>
61             </div>
62         </div>
63         <div class="permissions">
64             [% FOREACH loo IN loop %]
65                 [% IF ( loo.expand ) %]
66                     <div id="parent-flag-[% loo.flag | html %]" class="open parent">
67                 [% ELSE %]
68                     <div id="parent-flag-[% loo.flag | html %]" class="parent">
69                 [% END %]
70                 [% IF ( loo.checked ) %]
71                     [% IF disable_superlibrarian_privs && loo.bit == 0 %]
72                         <input type="checkbox" disabled="disabled" data-bit="0" id="flag-0" class="parent flag superlib" name="flag" value="[% loo.flag | html %]" checked="checked" title="The system preference ProtectSuperlibrarianPrivileges is enabled" />
73                         <input type="hidden" id="flag-0" name="flag" value="[% loo.flag | html %]" >
74                     [% ELSE %]
75                           <input type="checkbox" data-bit="[% loo.bit | html %]" id="flag-[% loo.bit | html %]" class="parent flag" name="flag" value="[% loo.flag | html %]" checked="checked" />
76                     [% END %]
77                 [% ELSE %]
78                     [% IF disable_superlibrarian_privs && loo.bit == 0 %]
79                         <input type="checkbox" disabled="disabled" class="flag parent" data-bit="0" id="flag-0" name="flag" value="[% loo.flag | html %]" title="The system preference ProtectSuperlibrarianPrivileges is enabled" />
80                     [% ELSE %]
81                         <input type="checkbox" class="flag parent" data-bit="[% loo.bit | html %]" id="flag-[% loo.bit | html %]" name="flag" value="[% loo.flag | html %]" />
82                     [% END %]
83                 [% END # /IF loo.checked %]
84                     <label class="permissiondesc" for="flag-[% loo.bit | html %]">
85                         [% PROCESS main_permissions name=loo.flag %]
86                     </label>
87                     [% IF ( loo.flag == "superlibrarian" ) %]<div class="hint superlibrarian-hint">This permission grants access to all areas. If selected, specific sub-permissions cannot be selected.</div>[% END %]
88                 [% IF ( loo.sub_perm_loop ) %]
89                     <a class="toggle-[% loo.bit | html %] togglechildren_off" href="#" data-bit="[% loo.bit | html %]"><i class="fa fa-minus-square-o"></i> Hide details</a>
90                     <a class="toggle-[% loo.bit | html %] togglechildren_on" href="#" data-bit="[% loo.bit | html %]"><i class="fa fa-plus-square-o"></i> Show details</a>
91                     <div class="children" id="flag-[% loo.bit | html %]-children">
92                         [% FOREACH sub_perm_loo IN loo.sub_perm_loop %]
93                             <div class="child-flags">
94                                 [% IF ( sub_perm_loo.checked ) %]
95                                     <input type="checkbox" id="[% sub_perm_loo.id | html %]" class="child flag" name="flag" value="[% sub_perm_loo.perm | html %]" checked="checked" />
96                                 [% ELSE %]
97                                     <input type="checkbox" id="[% sub_perm_loo.id | html %]" class="child flag" name="flag" value="[% sub_perm_loo.perm | html %]" />
98                                 [% END %]
99                                 <label class="permissiondesc" for="[% sub_perm_loo.id | html %]">
100                                     [% PROCESS sub_permissions name=sub_perm_loo.code %]
101                                 </label>
102                             </div>
103                         [% END %]
104                     </div> <!-- /#flag-[% loo.bit | html %]-children -->
105                 [% END # /IF loo.sub_perm_loop %]
106                 </div> <!-- /.parent -->
107             [% END # /FOREACH loo %]
108         </div>
109     </div> <!-- /#permissionstree -->
110 </form>
111
112             </main>
113         </div> <!-- /.col-sm-10.col-sm-push-2 -->
114
115         <div class="col-sm-2 col-sm-pull-10">
116             <aside>
117                 [% INCLUDE 'circ-menu.inc' %]
118             </aside>
119         </div> <!-- /.col-sm-2.col-sm-pull-10 -->
120     </div> <!-- /.row -->
121
122 [% MACRO jsinclude BLOCK %]
123     [% INCLUDE 'str/members-menu.inc' %]
124     [% Asset.js("js/members-menu.js") | $raw %]
125     [% Asset.js("lib/hc-sticky.js") | $raw %]
126     <script>
127         var Sticky;
128         $(document).ready(function() {
129
130             [% IF disable_superlibrarian_privs && patron.is_superlibrarian %]
131                 $("#CheckAllFlags,#UncheckAllFlags")
132                     .attr("disabled", true)
133                     .attr("title", _("The system preference ProtectSuperlibrarian is enabled"))
134                     .on("click", function(e){e.preventDefault()});
135             [% ELSE %]
136                 $("#CheckAllFlags").on("click",function(){
137                     $(".flag").attr("disabled", false);
138                     $(".flag").prop("checked", true);
139                     $("#flag-0").prop("checked", false);
140                     [% IF disable_superlibrarian_privs %]
141                         $("#flag-0").prop("disabled", true);
142                     [% END %]
143                     return false;
144                 });
145                 $("#UncheckAllFlags").on("click",function(){
146                     $(".flag").attr("disabled", false);
147                     [% IF disable_superlibrarian_privs %]
148                         $("#flag-0").prop("disabled", true);
149                     [% END %]
150                     $(".flag").prop("checked", false);
151                     return false;
152                 });
153                 $(".flag").change(function(){
154                     if(!$(this).is(':checked')){
155                         $("input#flag-0").prop("checked", false);
156                     }
157                 });
158             [% END %]
159
160             Sticky = $("#permissions_toolbar");
161             Sticky.hcSticky({
162                 stickTo: "#permissionstree",
163                 stickyClass: "floating"
164             });
165
166             $(".open div").show();
167
168             $("#permissions_filter").on("keyup", function(){
169                 $("#clear_filter").css("display","inline-block");
170                 $("a[class^=toggle-]").hide();
171                 var string = $(this).val();
172                 var divs = $("div[id!='parent-flag-superlibrarian']", ".permissions");
173                 if( string != "" && string.length > 3 ){
174                     divs.each(function(){
175                         if ( $(this).text().search(new RegExp( string, "i")) < 0 ) {
176                             $(this).hide();
177                         } else {
178                             $(this).show();
179                         }
180                     });
181                 } else {
182                     divs.show();
183                 }
184             });
185
186             $("#clear_filter").on("click", function(){
187                 $(".togglechildren_off").show();
188                 $("#permissions_filter").val("");
189                 $("div", "#permissionstree").show();
190                 $(this).css("display","none");
191             });
192
193             // Enforce Superlibrarian Privilege Mutual Exclusivity
194             if( $('input[id="flag-0"]:checked').length || $(".superlib:checked").length ){
195                 if ($('input[name="flag"]:checked').length > 1){
196                     alert(_("Inconsistency detected!") + "\n\n" + _("The superlibrarian privilege is mutually exclusive of other privileges, as it includes them all.") + "\n\n" + _("This patron's privileges will now be reset to include only superlibrarian."));
197                 }
198
199                 setLibrarian();
200             }
201
202             $('input#flag-0').click(function() {
203                 if( $('input[id="flag-0"]:checked').length || $(".superlib:checked").length ){
204                     $('input[name="flag"]').each(function() {
205                         if($(this).attr('id') != "flag-0" && !$(this).hasClass('superlib') ){
206                             $(this).prop('disabled', true);
207                             $(this).prop('checked', false);
208                         }
209                     });
210                 }
211                 else {
212                     $('input[name="flag"]').each(function() {
213                         $(this).prop('disabled', false);
214                     });
215                 }
216             });
217
218
219             $(".toggleall_off, .toggleall_on").on('click', function(e) {
220                 e.preventDefault();
221                 if( $(this).hasClass("toggleall_on")){
222                     $(".children,.togglechildren_off").show();
223                     $(".togglechildren_on").hide();
224                 } else {
225                     $(".children,.togglechildren_off").hide();
226                     $(".togglechildren_on").show();
227                 }
228             });
229
230             $(".togglechildren_off, .togglechildren_on").on('click', function(e) {
231                 e.preventDefault();
232                 var bit = $(this).data("bit");
233                 $("#flag-" + bit + "-children").toggle();
234                 $(".toggle-" + bit).toggle();
235             });
236
237             $(".togglechildren_off, .togglechildren_on").hover( function(){
238                 $(this).parent().addClass("permission-highlight");
239             }, function(){
240                 $(this).parent().removeClass("permission-highlight");
241             });
242
243             $(".flag").on("change",function(e){
244                 e.preventDefault();
245                 if( $(this).hasClass("child") ){
246                     if( $(this).prop("checked") ){
247                         // If this is the last of all the child boxes to be checked the parent should be checked too
248                         var unchecked = 0;
249                         $(this).closest(".children").find(".child").each(function(){
250                             if( !$(this).prop("checked") ){
251                                 // There are still unchecked checkboxes in this group
252                                 unchecked = 1;
253                             }
254                         });
255                         if( unchecked === 0 ){
256                             $(this).closest(".parent").find(".flag.parent").prop("checked", true);
257                         }
258                     } else {
259                         $(this).closest(".parent").find(".flag.parent").prop("checked", false);
260                     }
261                 } else {
262                     var bit = $(this).data("bit");
263                     if( $(this).is(":checked") ){
264                         $("#flag-" + bit + "-children").show().find(".flag").prop("checked", true);
265                         $(".toggle-" + bit + ".togglechildren_on").hide();
266                         $(".toggle-" + bit + ".togglechildren_off").show();
267                     } else {
268                         $("#flag-" + bit + "-children").show().find(".flag").prop("checked", false);
269                     }
270                 }
271             });
272         });
273
274         function setLibrarian(){
275             $('input[name="flag"]').each(function() {
276                 if($(this).attr('id') != "flag-0" && !$(this).hasClass('superlib') ){
277                     $(this).prop('disabled', true);
278                     $(this).prop('checked', false);
279                 }
280             });
281         }
282
283     </script>
284 [% END %]
285
286 [% INCLUDE 'intranet-bottom.inc' %]