4 [% INCLUDE 'doc-head-open.inc' %]
5 <title>Koha › Administration › Classification sources
6 [% IF op == 'add_source' %]
8 [% IF class_source %]Modify classification source[% ELSE %]Add classification source[% END %]
9 [% ELSIF op == 'add_sort_rule' %]
11 [% IF sort_rule %]Modify filing rule[% ELSE %]Add filing rule[% END %]
12 [% ELSIF op == 'add_split_rule' %]
14 [% IF split_rule %]Modify splitting rule[% ELSE %]Add splitting rule[% END %]
18 [% INCLUDE 'doc-head-close.inc' %]
19 <style type="text/css">
29 <body id="admin_classsources" class="admin">
30 [% INCLUDE 'header.inc' %]
31 [% INCLUDE 'prefs-admin-search.inc' %]
33 <div id="breadcrumbs">
34 <a href="/cgi-bin/koha/mainpage.pl">Home</a>
35 › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
36 › <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
37 [% IF op == 'add_source' %]
38 › [% IF class_source %]Modify classification source[% ELSE %]Add classification source[% END %]
39 [% ELSIF op == 'add_sort_rule' %]
40 › [% IF sort_rule %]Modify filing rule[% ELSE %]Add filing rule[% END %]
41 [% ELSIF op == 'add_split_rule' %]
42 › [% IF split_rule %]Modify splitting rule[% ELSE %]Add splitting rule[% END %]
46 <div class="main container-fluid">
48 <div class="col-sm-10 col-sm-push-2">
51 [% FOR m IN messages %]
52 <div class="dialog [% m.type %]">
54 [% CASE 'error_on_update_source' %]
55 An error occurred when updating this classification source.
56 [% CASE 'success_on_update_source' %]
57 Classification source updated successfully.
58 [% CASE 'error_on_insert_source' %]
59 An error occurred when adding this classification source. Perhaps the code already exists?
60 [% CASE 'success_on_insert_source' %]
61 Classification source added successfully.
62 [% CASE 'error_on_delete_source' %]
63 An error occurred when deleting this classification source.
64 [% CASE 'success_on_delete_source' %]
65 Classification source deleted successfully.
66 [% CASE 'error_on_update_sort_rule' %]
67 An error occurred when adding this filing rule. Perhaps the code already exists?
68 [% CASE 'success_on_update_sort_rule' %]
69 Filing rule updated successfully.
70 [% CASE 'error_on_insert_sort_rule' %]
71 An error occurred when adding this filing rule. Perhaps the code already exists?
72 [% CASE 'success_on_insert_sort_rule' %]
73 Filing rule added successfully.
74 [% CASE 'error_on_delete_sort_rule' %]
75 An error occurred when deleting this filing rule. Perhaps it is used by at least one classification source?
76 [% CASE 'success_on_delete_sort_rule' %]
77 Filing rule deleted successfully.
78 [% CASE 'error_on_update_split_rule' %]
79 An error occurred when adding this splitting rule. Perhaps the code already exists?
80 [% CASE 'success_on_update_split_rule' %]
81 Splitting rule updated successfully.
82 [% CASE 'error_on_insert_split_rule' %]
83 An error occurred when adding this splitting rule. Perhaps the code already exists?
84 [% CASE 'success_on_insert_split_rule' %]
85 Splitting rule added successfully.
86 [% CASE 'error_on_delete_split_rule' %]
87 An error occurred when deleting this splitting rule. Perhaps it is used by at least one classification source?
88 [% CASE 'success_on_delete_split_rule' %]
89 Splitting rule deleted successfully.
97 [% IF op == 'add_source' %]
99 <h2>Modify classification source</h2>
101 <h2>Add classification source</h2>
103 <form action="[% script_name | html %]" name="Aform" class="validated" method="post">
104 <input type="hidden" name="op" value="add_source_validate" />
105 <fieldset class="rows">
108 [% IF class_source %]
109 <span class="label">Classification source code: </span>
110 <input type="hidden" name="cn_source" value="[% class_source.cn_source | html %]" />
111 [% class_source.cn_source | html %]
113 <label class="required" for="class_source">Classification source code: </label>
114 <input class="required" required="required" type="text" id="class_source" name="cn_source" size="10" maxlength="10" />
115 <span class="required">Required</span>
118 <li><label class="required" for="description">Description: </label>
119 <input class="required" required="required" type="text" id="description" name="description" size="50" maxlength="250" value="[% class_source.description | html %]" />
120 <span class="required">Required</span>
122 <li><label for="used">Source in use?</label>
123 [% IF ( class_source.used ) %]<input type="checkbox" id="used" name="used" value="used" checked="checked" />[% ELSE %]
124 <input type="checkbox" id="used" name="used" value="used" />[% END %]
127 <label class="required" for="class_sort_rule">Filing rule: </label>
128 <select class="required" required="required" id="class_sort_rule" name="class_sort_rule">
129 [% FOREACH r IN sort_rules %]
130 [% IF class_source.class_sort_rule == r.class_sort_rule %]
131 <option value="[% r.class_sort_rule | html %]" selected="selected">[% r.description | html %] ([% r.class_sort_rule | html %])</option>
133 <option value="[% r.class_sort_rule | html %]">[% r.description | html %] ([% r.class_sort_rule | html %])</option>
137 <span class="required">Required</span>
140 <label class="required" for="class_split_rule">Splitting rule: </label>
141 <select class="required" required="required" id="split_rule" name="class_split_rule">
142 [% FOREACH r IN split_rules %]
143 [% IF class_source.class_split_rule == r.class_split_rule %]
144 <option value="[% r.class_split_rule | html %]" selected="selected">[% r.description | html %] ([% r.class_split_rule | html %])</option>
146 <option value="[% r.class_split_rule | html %]">[% r.description | html %] ([% r.class_split_rule | html %])</option>
150 <span class="required">Required</span>
154 <fieldset class="action">
155 <input type="submit" value="Save" />
156 <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
161 [% IF op == 'add_sort_rule' %]
163 <h2>Modify filing rule</h2>
165 <h2>Add filing rule</h2>
167 <form action="[% script_name | html %]" name="Aform" class="validated" method="post">
168 <input type="hidden" name="op" value="add_sort_rule_validate" />
169 <fieldset class="rows">
173 <span class="label">Filing rule code: </span>
174 <input type="hidden" name="class_sort_rule" value="[% sort_rule.class_sort_rule | html %]" />
175 [% sort_rule.class_sort_rule | html %]
177 <label for="class_sort_rule" class="required">Filing rule code: </label>
178 <input class="required" required="required" type="text" id="class_sort_rule" name="class_sort_rule" size="10" maxlength="10" />
179 <span class="required">Required</span>
182 <li><label for="description" class="required">Description: </label>
183 <input class="required" required="required" type="text" id="description" name="description" size="50" maxlength="250" value="[% sort_rule.description | html %]" />
184 <span class="required">Required</span>
186 <li><label for="sort_routine" class="required">Filing routine: </label>
187 <select class="required" required="required" id="sort_routine" name="sort_routine">
188 [% FOREACH routine_name IN sort_routines %]
189 [% IF routine_name == sort_rule.sort_routine %]
190 <option value="[% routine_name | html %]" selected="selected">[% routine_name | html %]</option>
192 <option value="[% routine_name | html %]">[% routine_name %]</option>
196 <span class="required">Required</span>
200 <fieldset class="action">
201 <input type="submit" value="Save" />
202 <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
207 [% IF op == 'add_split_rule' %]
209 <h2>Modify splitting rule</h2>
211 <h2>Add splitting rule</h2>
213 <form action="[% script_name | html %]" name="Aform" class="validated" method="post">
214 <input type="hidden" name="op" value="add_split_rule_validate" />
215 <fieldset class="rows">
219 <span class="label">Splitting rule code: </span>
220 <input type="hidden" name="class_split_rule" value="[% split_rule.class_split_rule | html %]" />
221 [% split_rule.class_split_rule | html %]
223 <label for="class_split_rule" class="required">Splitting rule code: </label>
224 <input class="required" required="required" type="text" id="class_split_rule" name="class_split_rule" size="10" maxlength="10" />
225 <span class="required">Required</span>
228 <li><label for="description" class="required">Description: </label>
229 <input class="required" required="required" type="text" id="description" name="description" size="50" maxlength="250" value="[% split_rule.description | html %]" />
230 <span class="required">Required</span>
232 <li><label for="split_routine" class="required">Splitting routine: </label>
233 <select class="required" required="required" id="split_routine" name="split_routine">
234 [% FOREACH routine_name IN split_routines %]
235 [% IF routine_name == split_rule.split_routine %]
236 <option value="[% routine_name | html %]" selected="selected">[% routine_name | html %]</option>
238 <option value="[% routine_name | html %]">[% routine_name | html %]</option>
242 <span class="required">Required</span>
244 <li id="regex_block">
245 <label for="split_regex" class="required">Regular expression: </label>
247 [% IF split_rule AND split_rule.regexs.count %]
248 [% FOR re IN split_rule.regexs %]
249 <div class="split_regex">
250 <input type="text" name="split_regex" id="split_regex" value="[% re | html %]" />
251 <a href="#" title="Delete" class="del_regex"><i class="fa fa-fw fa-trash"></i>Delete</a>
255 <div class="split_regex">
256 <input type="text" name="split_regex" id="split_regex" value="" />
260 <div id="button_add">
261 <a href="#" class="add_regex" title="Add a new regular expression"><i class="fa fa-fw fa-plus"></i> New</a>
262 <span class="required">Required</span>
264 <label for="callnumbers">Test the regular expressions:</label>
265 <div id="test_split">
266 <textarea name="callnumbers"></textarea>
267 <button name="test_split_cns">Test</button>
268 <div id="result_split_callnumbers"></div>
273 <fieldset class="action">
274 <input type="submit" value="Save" />
275 <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
280 [% IF op == 'list' %]
282 <div id="toolbar" class="btn-toolbar">
283 <a class="btn btn-default btn-sm" id="newsource" href="[% script_name | url %]?op=add_source"><i class="fa fa-plus"></i> New classification source</a>
284 <a class="btn btn-default btn-sm" id="newrule" href="[% script_name | url %]?op=add_sort_rule"><i class="fa fa-plus"></i> New filing rule</a>
285 <a class="btn btn-default btn-sm" id="newrule" href="[% script_name | url %]?op=add_split_rule"><i class="fa fa-plus"></i> New splitting rule</a>
288 <h2>Classification sources</h2>
295 <th>Splitting rule</th>
298 [% FOREACH class_source IN class_sources %]
300 <td>[% class_source.cn_source | html %]</td>
301 <td>[% class_source.description |html | html %]</td>
302 <td>[% IF ( class_source.used ) %]Yes[% ELSE %]No[% END %]</td>
303 <td>[% class_source.class_sort_rule | html %]</td>
304 <td>[% class_source.class_split_rule | html %]</td>
306 <a class="btn btn-default btn-xs" href="[% script_name | url %]?op=add_source&cn_source=[% class_source.cn_source | uri %]"><i class="fa fa-pencil"></i> Edit</a>
307 <a class="btn btn-default btn-xs delete_class_source" href="[% script_name | url %]?op=delete_source&cn_source=[% class_source.cn_source | uri%]"><i class="fa fa-trash"></i> Delete</a>
313 <h2>Classification filing rules</h2>
318 <th>Sorting routine</th>
321 [% FOREACH rule IN sort_rules %]
323 <td>[% rule.class_sort_rule | html %]</td>
324 <td>[% rule.description |html | html %]</td>
325 <td>[% rule.sort_routine | html %]</td>
327 <a class="btn btn-default btn-xs" href="[% script_name | html %]?op=add_sort_rule&class_sort_rule=[% rule.class_sort_rule |url %]"><i class="fa fa-pencil"></i> Edit</a>
328 <a class="btn btn-default btn-xs delete_sort_rule" href="[% script_name | html %]?op=delete_sort_rule&class_sort_rule=[% rule.class_sort_rule |url %]"><i class="fa fa-trash"></i> Delete</a>
334 <h2>Classification splitting rules</h2>
339 <th>Splitting routine</th>
342 [% FOREACH rule IN split_rules %]
344 <td>[% rule.class_split_rule | html %]</td>
345 <td>[% rule.description | html %]</td>
346 <td>[% rule.split_routine | html %]</td>
348 <a class="btn btn-default btn-xs" href="[% script_name | url %]?op=add_split_rule&class_split_rule=[% rule.class_split_rule | uri %]"><i class="fa fa-pencil"></i> Edit</a>
349 <a class="btn btn-default btn-xs delete_split_rule" href="[% script_name | url %]?op=delete_split_rule&class_split_rule=[% rule.class_split_rule | uri %]"><i class="fa fa-trash"></i> Delete</a>
359 </div> <!-- /.col-sm-10.col-sm-push-2 -->
361 <div class="col-sm-2 col-sm-pull-10">
363 [% INCLUDE 'admin-menu.inc' %]
365 </div> <!-- /.col-sm-2.col-sm-pull-10 -->
366 </div> <!-- /.row -->
368 [% MACRO jsinclude BLOCK %]
369 [% Asset.js("js/admin-menu.js") | $raw %]
372 function update_regex_block(){
373 if ( $("#split_routine option:selected").val() == 'RegEx' ) {
374 $("#regex_block").show();
375 $("#split_regex").attr('required', 'required');
377 $("#regex_block").hide();
378 $("#split_regex").removeAttr('required');
381 function update_delete_links_visibility() {
382 if( $("div.split_regex").length > 1 ) {
383 $("div.split_regex").find('a.del_regex').show();
385 $("div.split_regex").find('a.del_regex').hide();
389 function add_regex() {
390 var div_node = $("div.split_regex:last");
391 var div_clone = $(div_node).clone(true);
392 $(div_clone).find("input").val("");
393 $(div_node).after(div_clone);
394 update_delete_links_visibility();
396 function del_regex(a_node) {
397 $(a_node).parent('div').remove();
398 update_delete_links_visibility();
401 $(document).ready(function(){
402 update_regex_block();
403 $("#split_routine").on("change", function(){
404 update_regex_block();
407 $(".delete_class_source").on("click", function(e){
408 return confirm(_("Are you sure you want to delete this class source?"));
410 $(".delete_sort_rule").on("click", function(e){
411 return confirm(_("Are you sure you want to delete this filing rule?"));
413 $(".delete_split_rule").on("click", function(e){
414 return confirm(_("Are you sure you want to delete this splitting rule?"));
417 $(".add_regex").on("click", function(e){
421 $(".del_regex").on("click", function(e){
426 $("button[name='test_split_cns']").on("click", function(e){
429 $("input[name='split_regex']").each(function(){
430 regexs.push($(this).val());
432 var callnumbers = $("textarea[name='callnumbers']").val();
433 $.getJSON('/cgi-bin/koha/svc/split_callnumbers', {regexs: JSON.stringify(regexs), callnumbers: callnumbers}, function(answer){
434 var callnumbers = answer['split_callnumbers'];
435 $("#result_split_callnumbers").html('');
436 var list_node = $('<ol></ol>');
437 $(callnumbers).each(function(){
438 var split_cn = this['split'].join('<br/>');
439 var li_node = $('<li><label>'+this['inline']+'</label><div class="split_callnumber">'+split_cn+'</div></li>');
440 $(list_node).append(li_node);
442 $("#result_split_callnumbers").append(list_node);
443 }).fail(function(){alert("Something went wrong.")});
449 [% INCLUDE 'intranet-bottom.inc' %]