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