Bug 31986: Add page-section to various administration pages
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / admin / classsources.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% SET footerjs = 1 %]
4 [% INCLUDE 'doc-head-open.inc' %]
5 <title>
6 [% IF op == 'add_source' %]
7     [% IF class_source %]
8         Modify classification source
9     [% ELSE %]
10         Add classification source
11     [% END %] &rsaquo; [% ELSIF op == 'add_sort_rule' %]
12     [% IF sort_rule %]
13         Modify filing rule
14     [% ELSE %]
15         Add filing rule
16     [% END %] &rsaquo; [% ELSIF op == 'add_split_rule' %]
17     [% IF split_rule %]
18         Modify splitting rule
19     [% ELSE %]
20         Add splitting rule
21     [% END %] &rsaquo; [% END %]
22 Classification sources &rsaquo; Administration &rsaquo; Koha
23 </title>
24 [% INCLUDE 'doc-head-close.inc' %]
25 <style>
26     #button_add,
27     .split_regex,
28     .split_callnumber
29     {
30         padding-left: 10em;
31     }
32 </style>
33 </head>
34
35 <body id="admin_classsources" class="admin">
36 [% WRAPPER 'header.inc' %]
37     [% INCLUDE 'prefs-admin-search.inc' %]
38 [% END %]
39
40 [% WRAPPER 'sub-header.inc' %]
41 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
42     <ol>
43         <li>
44             <a href="/cgi-bin/koha/mainpage.pl">Home</a>
45         </li>
46         <li>
47             <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
48         </li>
49
50         [% IF op == 'add_source' %]
51             <li>
52                 <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
53             </li>
54             <li>
55                 <a href="#" aria-current="page">
56                     [% IF class_source %]
57                         Modify classification source
58                     [% ELSE %]
59                         Add classification source
60                     [% END %]
61                 </a>
62             </li>
63
64         [% ELSIF op == 'add_sort_rule' %]
65             <li>
66                 <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
67             </li>
68             <li>
69                 <a href="#" aria-current="page">
70                     [% IF sort_rule %]
71                         Modify filing rule
72                     [% ELSE %]
73                         Add filing rule
74                     [% END %]
75                 </a>
76             </li>
77
78         [% ELSIF op == 'add_split_rule' %]
79             <li>
80                 <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
81             </li>
82             <li>
83                 <a href="#" aria-current="page">
84                     [% IF split_rule %]
85                         Modify splitting rule
86                     [% ELSE %]
87                         Add splitting rule
88                     [% END %]
89                 </a>
90             </li>
91
92         [% ELSE %]
93             <li>
94                 <a href="#" aria-current="page">
95                     Classification sources
96                 </a>
97             </li>
98         [% END %]
99
100     </ol>
101 </nav>
102 [% END %]
103
104 <div class="main container-fluid">
105     <div class="row">
106         <div class="col-sm-10 col-sm-push-2">
107             <main>
108
109 [% FOR m IN messages %]
110     <div class="dialog [% m.type | html %]">
111         [% SWITCH m.code %]
112         [% CASE 'error_on_update_source' %]
113             <span>An error occurred when updating this classification source.</span>
114         [% CASE 'success_on_update_source' %]
115             <span>Classification source updated successfully.</span>
116         [% CASE 'error_on_insert_source' %]
117             <span>An error occurred when adding this classification source. Perhaps the code already exists?</span>
118         [% CASE 'success_on_insert_source' %]
119             <span>Classification source added successfully.</span>
120         [% CASE 'error_on_delete_source' %]
121             <span>An error occurred when deleting this classification source.</span>
122         [% CASE 'success_on_delete_source' %]
123             <span>Classification source deleted successfully.</span>
124         [% CASE 'error_on_update_sort_rule' %]
125             <span>An error occurred when updating this filing rule.</span>
126         [% CASE 'success_on_update_sort_rule' %]
127             <span>Filing rule updated successfully.</span>
128         [% CASE 'error_on_insert_sort_rule' %]
129             <span>An error occurred when adding this filing rule. Perhaps the code already exists?</span>
130         [% CASE 'success_on_insert_sort_rule' %]
131             <span>Filing rule added successfully.</span>
132         [% CASE 'error_on_delete_sort_rule' %]
133             <span>An error occurred when deleting this filing rule. Perhaps it is used by at least one classification source?</span>
134         [% CASE 'success_on_delete_sort_rule' %]
135             <span>Filing rule deleted successfully.</span>
136         [% CASE 'error_on_update_split_rule' %]
137             <span>An error occurred when updating this splitting rule.</span>
138         [% CASE 'success_on_update_split_rule' %]
139             <span>Splitting rule updated successfully.</span>
140         [% CASE 'error_on_insert_split_rule' %]
141             <span>An error occurred when adding this splitting rule. Perhaps the code already exists?</span>
142         [% CASE 'success_on_insert_split_rule' %]
143             <span>Splitting rule added successfully.</span>
144         [% CASE 'error_on_delete_split_rule' %]
145             <span>An error occurred when deleting this splitting rule. Perhaps it is used by at least one classification source?</span>
146         [% CASE 'success_on_delete_split_rule' %]
147             <span>Splitting rule deleted successfully.</span>
148         [% CASE %]
149             <span>[% m.code | html %]</span>
150         [% END %]
151     </div>
152 [% END %]
153
154
155 [% IF op == 'add_source' %]
156   [% IF class_source %]
157 <h1>Modify classification source</h1>
158   [% ELSE %]
159 <h1>Add classification source</h1>
160   [% END %]
161 <form action="[% script_name | html %]" name="Aform" class="validated" method="post">
162   <input type="hidden" name="op" value="add_source_validate" />
163   <fieldset class="rows">
164     <ol>
165       <li>
166           [% IF class_source %]
167             <span class="label">Classification source code: </span>
168             <input type="hidden" name="cn_source" value="[% class_source.cn_source | html %]" />
169             [% class_source.cn_source | html %]
170           [% ELSE %]
171               <label class="required" for="class_source">Classification source code: </label>
172               <input class="required focus" required="required" type="text" id="class_source" name="cn_source"  size="10" maxlength="10" />
173               <span class="required">Required</span>
174           [% END %]
175        </li>
176        <li><label class="required" for="description">Description: </label>
177            <input class="required" required="required" type="text" id="description" name="description" size="50" maxlength="250" value="[% class_source.description | html %]" />
178            <span class="required">Required</span>
179        </li>
180        <li><label for="used">Source in use?</label>
181            [% IF ( class_source.used ) %]<input type="checkbox" id="used" name="used" value="used" checked="checked" />[% ELSE %]
182            <input type="checkbox" id="used" name="used" value="used" />[% END %]
183        </li>
184         <li>
185             <label class="required" for="class_sort_rule">Filing rule: </label>
186             <select class="required" required="required" id="class_sort_rule" name="class_sort_rule">
187                 [% FOREACH r IN sort_rules %]
188                     [% IF class_source.class_sort_rule == r.class_sort_rule %]
189                         <option value="[% r.class_sort_rule | html %]" selected="selected">[% r.description | html %] ([% r.class_sort_rule | html %])</option>
190                     [% ELSE %]
191                         <option value="[% r.class_sort_rule | html %]">[% r.description | html %] ([% r.class_sort_rule | html %])</option>
192                     [% END %]
193                 [% END %]
194             </select>
195             <span class="required">Required</span>
196         </li>
197         <li>
198             <label class="required" for="class_split_rule">Splitting rule: </label>
199             <select class="required" required="required" id="split_rule" name="class_split_rule">
200                 [% FOREACH r IN split_rules %]
201                     [% IF class_source.class_split_rule == r.class_split_rule %]
202                         <option value="[% r.class_split_rule | html %]" selected="selected">[% r.description | html %] ([% r.class_split_rule | html %])</option>
203                     [% ELSE %]
204                         <option value="[% r.class_split_rule | html %]">[% r.description | html %] ([% r.class_split_rule | html %])</option>
205                     [% END %]
206                 [% END %]
207             </select>
208             <span class="required">Required</span>
209         </li>
210     </ol>
211   </fieldset>
212   <fieldset class="action">
213     <input type="submit" value="Save" />
214     <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
215   </fieldset>
216 </form>
217 [% END %]
218
219 [% IF op == 'add_sort_rule' %]
220   [% IF sort_rule %]
221 <h1>Modify filing rule</h1>
222   [% ELSE %]
223 <h1>Add filing rule</h1>
224   [% END %]
225 <form action="[% script_name | html %]" name="Aform" class="validated" method="post">
226   <input type="hidden" name="op" value="add_sort_rule_validate" />
227   <fieldset class="rows">
228     <ol>
229       <li>
230           [% IF sort_rule %]
231           <span class="label">Filing rule code: </span>
232             <input type="hidden" name="class_sort_rule" value="[% sort_rule.class_sort_rule | html %]" />
233             [% sort_rule.class_sort_rule | html %]
234           [% ELSE %]
235               <label for="class_sort_rule" class="required">Filing rule code: </label>
236               <input class="required focus" required="required" type="text" id="class_sort_rule" name="class_sort_rule"  size="10" maxlength="10" />
237               <span class="required">Required</span>
238           [% END %]
239        </li>
240        <li><label for="description" class="required">Description: </label>
241            <input class="required" required="required" type="text" id="description" name="description" size="50" maxlength="250" value="[% sort_rule.description | html %]" />
242            <span class="required">Required</span>
243        </li>
244        <li><label for="sort_routine" class="required">Filing routine: </label>
245            <select class="required" required="required" id="sort_routine" name="sort_routine">
246            [% FOREACH routine_name IN sort_routines %]
247              [% IF routine_name == sort_rule.sort_routine %]
248                  <option value="[% routine_name | html %]" selected="selected">[% routine_name | html %]</option>
249              [% ELSE %]
250                  <option value="[% routine_name | html %]">[% routine_name | html %]</option>
251              [% END %]
252            [% END %]
253            </select>
254            <span class="required">Required</span>
255        </li>
256     </ol>
257   </fieldset>
258     <fieldset class="action">
259         <input type="submit" value="Save" />
260         <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
261     </fieldset>
262 </form>
263 [% END %]
264
265 [% IF op == 'add_split_rule' %]
266   [% IF split_rule %]
267 <h1>Modify splitting rule</h1>
268   [% ELSE %]
269 <h1>Add splitting rule</h1>
270   [% END %]
271 <form action="[% script_name | html %]" name="Aform" class="validated" method="post">
272   <input type="hidden" name="op" value="add_split_rule_validate" />
273   <fieldset class="rows">
274     <ol>
275       <li>
276           [% IF split_rule %]
277             <span class="label">Splitting rule code: </span>
278             <input type="hidden" name="class_split_rule" value="[% split_rule.class_split_rule | html %]" />
279             [% split_rule.class_split_rule | html %]
280           [% ELSE %]
281               <label for="class_split_rule" class="required">Splitting rule code: </label>
282               <input class="required focus" required="required" type="text" id="class_split_rule" name="class_split_rule"  size="10" maxlength="10" />
283               <span class="required">Required</span>
284           [% END %]
285        </li>
286        <li><label for="description" class="required">Description: </label>
287            <input class="required" required="required" type="text" id="description" name="description" size="50" maxlength="250" value="[% split_rule.description | html %]" />
288            <span class="required">Required</span>
289        </li>
290        <li><label for="split_routine" class="required">Splitting routine: </label>
291            <select class="required" required="required" id="split_routine" name="split_routine">
292             [% FOREACH routine_name IN split_routines %]
293                 [% IF routine_name == split_rule.split_routine %]
294                     <option value="[% routine_name | html %]" selected="selected">[% routine_name | html %]</option>
295                 [% ELSE %]
296                     <option value="[% routine_name | html %]">[% routine_name | html %]</option>
297                 [% END %]
298             [% END %]
299            </select>
300            <span class="required">Required</span>
301        </li>
302         <li id="regex_block">
303             <label for="split_regex" class="required">Regular expression: </label>
304             <div>
305                 [% IF split_rule AND split_rule.regexs.size %]
306                     [% FOR re IN split_rule.regexs %]
307                         <div class="split_regex">
308                             <input type="text" name="split_regex" id="split_regex" value="[% re | html %]" />
309                             <a href="#" title="Delete" class="del_regex"><i class="fa fa-fw fa-trash"></i>Delete</a>
310                         </div>
311                     [% END %]
312                 [% ELSE %]
313                     <div class="split_regex">
314                         <input type="text" name="split_regex" id="split_regex" value="" />
315                         <a href="#" title="Delete" class="del_regex"><i class="fa fa-fw fa-trash"></i>Delete</a>
316                     </div>
317                 [% END %]
318             </div>
319             <div id="button_add">
320                 <a href="#" class="add_regex" title="Add a new regular expression"><i class="fa fa-fw fa-plus"></i> New</a>
321                 <span class="required">Required</span>
322             </div>
323             <label for="callnumbers">Test the regular expressions:</label>
324             <div id="test_split">
325                 <textarea name="callnumbers"></textarea>
326                 <button name="test_split_cns">Test</button>
327                 <div id="result_split_callnumbers"></div>
328             </div>
329         </li>
330     </ol>
331   </fieldset>
332     <fieldset class="action">
333         <input type="submit" value="Save" />
334         <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
335     </fieldset>
336 </form>
337 [% END %]
338
339 [% IF op == 'list' %]
340
341 <div id="toolbar" class="btn-toolbar">
342     <a class="btn btn-default" id="newsource" href="[% script_name | url %]?op=add_source"><i class="fa fa-plus"></i> New classification source</a>
343     <a class="btn btn-default" id="newrule" href="[% script_name | url %]?op=add_sort_rule"><i class="fa fa-plus"></i> New filing rule</a>
344     <a class="btn btn-default" id="newrule" href="[% script_name | url %]?op=add_split_rule"><i class="fa fa-plus"></i> New splitting rule</a>
345 </div>
346 <h1>Classification configuration</h1>
347 <div class="page-section">
348 <h2>Classification sources</h2>
349 <table>
350   <tr>
351     <th>Code</th>
352     <th>Description</th>
353     <th>In use</th>
354     <th>Filing rule</th>
355     <th>Splitting rule</th>
356     <th class="noExport">Actions</th>
357   </tr>
358   [% FOREACH class_source IN class_sources %]
359   <tr>
360     <td>[% class_source.cn_source | html %]</td>
361     <td>[% class_source.description |html | html %]</td>
362     <td>[% IF ( class_source.used ) %]Yes[% ELSE %]No[% END %]</td>
363     <td>[% class_source.class_sort_rule | html %]</td>
364     <td>[% class_source.class_split_rule | html %]</td>
365     <td class="actions">
366       <a class="btn btn-default btn-xs" href="[% script_name | url %]?op=add_source&amp;cn_source=[% class_source.cn_source | uri %]"><i class="fa fa-pencil"></i> Edit</a>
367       <a class="btn btn-default btn-xs delete_class_source" href="[% script_name | url %]?op=delete_source_confirmed&amp;cn_source=[% class_source.cn_source | uri%]"><i class="fa fa-trash"></i> Delete</a>
368     </td>
369   </tr>
370   [% END %]
371 </table>
372 </div> <!-- /.page-section -->
373
374 <div class="page-section">
375 <h2>Classification filing rules</h2>
376 <table>
377   <tr>
378     <th>Code</th>
379     <th>Description</th>
380     <th>Sorting routine</th>
381     <th class="noExport">Actions</th>
382   </tr>
383   [% FOREACH rule IN sort_rules %]
384   <tr>
385     <td>[% rule.class_sort_rule | html %]</td>
386     <td>[% rule.description |html | html %]</td>
387     <td>[% rule.sort_routine | html %]</td>
388     <td class="actions">
389       <a class="btn btn-default btn-xs" href="[% script_name | html %]?op=add_sort_rule&amp;class_sort_rule=[% rule.class_sort_rule |url %]"><i class="fa fa-pencil"></i> Edit</a>
390       <a class="btn btn-default btn-xs delete_sort_rule" href="[% script_name | html %]?op=delete_sort_rule&amp;class_sort_rule=[% rule.class_sort_rule |url %]"><i class="fa fa-trash"></i> Delete</a>
391     </td>
392   </tr>
393   [% END %]
394 </table>
395 </div> <!-- /.page-section -->
396
397 <div class="page-section">
398 <h2>Classification splitting rules</h2>
399 <table>
400   <tr>
401     <th>Code</th>
402     <th>Description</th>
403     <th>Splitting routine</th>
404     <th class="noExport">Actions</th>
405   </tr>
406   [% FOREACH rule IN split_rules %]
407   <tr>
408     <td>[% rule.class_split_rule | html %]</td>
409     <td>[% rule.description | html %]</td>
410     <td>[% rule.split_routine | html %]</td>
411     <td class="actions">
412       <a class="btn btn-default btn-xs" href="[% script_name | url %]?op=add_split_rule&amp;class_split_rule=[% rule.class_split_rule | uri %]"><i class="fa fa-pencil"></i> Edit</a>
413       <a class="btn btn-default btn-xs delete_split_rule" href="[% script_name | url %]?op=delete_split_rule&amp;class_split_rule=[% rule.class_split_rule | uri %]"><i class="fa fa-trash"></i> Delete</a>
414     </td>
415   </tr>
416   [% END %]
417 </table>
418 </div> <!-- /.page-section -->
419
420
421 [% END %]
422
423             </main>
424         </div> <!-- /.col-sm-10.col-sm-push-2 -->
425
426         <div class="col-sm-2 col-sm-pull-10">
427             <aside>
428                 [% INCLUDE 'admin-menu.inc' %]
429             </aside>
430         </div> <!-- /.col-sm-2.col-sm-pull-10 -->
431      </div> <!-- /.row -->
432
433 [% MACRO jsinclude BLOCK %]
434     [% Asset.js("js/admin-menu.js") | $raw %]
435
436     <script>
437         function update_regex_block(){
438             if ( $("#split_routine option:selected").val() == 'RegEx' ) {
439                 $("#regex_block").show();
440                 $("#split_regex").attr('required', 'required');
441             } else {
442                 $("#regex_block").hide();
443                 $("#split_regex").removeAttr('required');
444             }
445         };
446         function update_delete_links_visibility() {
447             if( $("div.split_regex").length > 1 ) {
448                 $("div.split_regex").find('a.del_regex').show();
449             } else {
450                 $("div.split_regex").find('a.del_regex').hide();
451             }
452         }
453
454         function add_regex() {
455             var div_node = $("div.split_regex:last");
456             var div_clone = $(div_node).clone(true);
457             $(div_clone).find("input").val("");
458             $(div_node).after(div_clone);
459             update_delete_links_visibility();
460         }
461         function del_regex(a_node) {
462             $(a_node).parent('div').remove();
463             update_delete_links_visibility();
464         }
465
466         $(document).ready(function(){
467             update_regex_block();
468             update_delete_links_visibility();
469             $("#split_routine").on("change", function(){
470                 update_regex_block();
471             });
472
473             $(".delete_class_source").on("click", function(e){
474                 return confirm(_("Are you sure you want to delete this class source?"));
475             });
476             $(".delete_sort_rule").on("click", function(e){
477                 return confirm(_("Are you sure you want to delete this filing rule?"));
478             });
479             $(".delete_split_rule").on("click", function(e){
480                 return confirm(_("Are you sure you want to delete this splitting rule?"));
481             });
482
483             $(".add_regex").on("click", function(e){
484                 e.preventDefault();
485                 add_regex();
486             });
487             $(".del_regex").on("click", function(e){
488                 e.preventDefault();
489                 del_regex(this);
490             });
491
492             $("button[name='test_split_cns']").on("click", function(e){
493                 e.preventDefault();
494                 var regexs = [];
495                 $("input[name='split_regex']").each(function(){
496                     regexs.push($(this).val());
497                 });
498                 var callnumbers = $("textarea[name='callnumbers']").val();
499                 $.getJSON('/cgi-bin/koha/svc/split_callnumbers', {regexs: JSON.stringify(regexs), callnumbers: callnumbers}, function(answer){
500                     var callnumbers = answer['split_callnumbers'];
501                     $("#result_split_callnumbers").html('');
502                     var list_node = $('<ol></ol>');
503                     $(callnumbers).each(function(){
504                         var split_cn = this['split'].join('<br/>');
505                         var li_node = $('<li><label>'+this['inline']+'</label><div class="split_callnumber">'+split_cn+'</div></li>');
506                         $(list_node).append(li_node);
507                     });
508                     $("#result_split_callnumbers").append(list_node);
509                 }).fail(function(){alert("Something went wrong.")});
510             });
511         });
512
513     </script>
514 [% END %]
515 [% INCLUDE 'intranet-bottom.inc' %]