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