Bug 30952: Staff interface redesign (header)
[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"><i class="fa fa-home"></i></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 <h2>Classification sources</h2>
348 <table>
349   <tr>
350     <th>Code</th>
351     <th>Description</th>
352     <th>In use</th>
353     <th>Filing rule</th>
354     <th>Splitting rule</th>
355     <th class="noExport">Actions</th>
356   </tr>
357   [% FOREACH class_source IN class_sources %]
358   <tr>
359     <td>[% class_source.cn_source | html %]</td>
360     <td>[% class_source.description |html | html %]</td>
361     <td>[% IF ( class_source.used ) %]Yes[% ELSE %]No[% END %]</td>
362     <td>[% class_source.class_sort_rule | html %]</td>
363     <td>[% class_source.class_split_rule | html %]</td>
364     <td class="actions">
365       <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>
366       <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>
367     </td>
368   </tr>
369   [% END %]
370 </table>
371
372 <h2>Classification filing rules</h2>
373 <table>
374   <tr>
375     <th>Code</th>
376     <th>Description</th>
377     <th>Sorting routine</th>
378     <th class="noExport">Actions</th>
379   </tr>
380   [% FOREACH rule IN sort_rules %]
381   <tr>
382     <td>[% rule.class_sort_rule | html %]</td>
383     <td>[% rule.description |html | html %]</td>
384     <td>[% rule.sort_routine | html %]</td>
385     <td class="actions">
386       <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>
387       <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>
388     </td>
389   </tr>
390   [% END %]
391 </table>
392
393 <h2>Classification splitting rules</h2>
394 <table>
395   <tr>
396     <th>Code</th>
397     <th>Description</th>
398     <th>Splitting routine</th>
399     <th class="noExport">Actions</th>
400   </tr>
401   [% FOREACH rule IN split_rules %]
402   <tr>
403     <td>[% rule.class_split_rule | html %]</td>
404     <td>[% rule.description | html %]</td>
405     <td>[% rule.split_routine | html %]</td>
406     <td class="actions">
407       <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>
408       <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>
409     </td>
410   </tr>
411   [% END %]
412 </table>
413
414
415 [% END %]
416
417             </main>
418         </div> <!-- /.col-sm-10.col-sm-push-2 -->
419
420         <div class="col-sm-2 col-sm-pull-10">
421             <aside>
422                 [% INCLUDE 'admin-menu.inc' %]
423             </aside>
424         </div> <!-- /.col-sm-2.col-sm-pull-10 -->
425      </div> <!-- /.row -->
426
427 [% MACRO jsinclude BLOCK %]
428     [% Asset.js("js/admin-menu.js") | $raw %]
429
430     <script>
431         function update_regex_block(){
432             if ( $("#split_routine option:selected").val() == 'RegEx' ) {
433                 $("#regex_block").show();
434                 $("#split_regex").attr('required', 'required');
435             } else {
436                 $("#regex_block").hide();
437                 $("#split_regex").removeAttr('required');
438             }
439         };
440         function update_delete_links_visibility() {
441             if( $("div.split_regex").length > 1 ) {
442                 $("div.split_regex").find('a.del_regex').show();
443             } else {
444                 $("div.split_regex").find('a.del_regex').hide();
445             }
446         }
447
448         function add_regex() {
449             var div_node = $("div.split_regex:last");
450             var div_clone = $(div_node).clone(true);
451             $(div_clone).find("input").val("");
452             $(div_node).after(div_clone);
453             update_delete_links_visibility();
454         }
455         function del_regex(a_node) {
456             $(a_node).parent('div').remove();
457             update_delete_links_visibility();
458         }
459
460         $(document).ready(function(){
461             update_regex_block();
462             update_delete_links_visibility();
463             $("#split_routine").on("change", function(){
464                 update_regex_block();
465             });
466
467             $(".delete_class_source").on("click", function(e){
468                 return confirm(_("Are you sure you want to delete this class source?"));
469             });
470             $(".delete_sort_rule").on("click", function(e){
471                 return confirm(_("Are you sure you want to delete this filing rule?"));
472             });
473             $(".delete_split_rule").on("click", function(e){
474                 return confirm(_("Are you sure you want to delete this splitting rule?"));
475             });
476
477             $(".add_regex").on("click", function(e){
478                 e.preventDefault();
479                 add_regex();
480             });
481             $(".del_regex").on("click", function(e){
482                 e.preventDefault();
483                 del_regex(this);
484             });
485
486             $("button[name='test_split_cns']").on("click", function(e){
487                 e.preventDefault();
488                 var regexs = [];
489                 $("input[name='split_regex']").each(function(){
490                     regexs.push($(this).val());
491                 });
492                 var callnumbers = $("textarea[name='callnumbers']").val();
493                 $.getJSON('/cgi-bin/koha/svc/split_callnumbers', {regexs: JSON.stringify(regexs), callnumbers: callnumbers}, function(answer){
494                     var callnumbers = answer['split_callnumbers'];
495                     $("#result_split_callnumbers").html('');
496                     var list_node = $('<ol></ol>');
497                     $(callnumbers).each(function(){
498                         var split_cn = this['split'].join('<br/>');
499                         var li_node = $('<li><label>'+this['inline']+'</label><div class="split_callnumber">'+split_cn+'</div></li>');
500                         $(list_node).append(li_node);
501                     });
502                     $("#result_split_callnumbers").append(list_node);
503                 }).fail(function(){alert("Something went wrong.")});
504             });
505         });
506
507     </script>
508 [% END %]
509 [% INCLUDE 'intranet-bottom.inc' %]