4 [% INCLUDE 'doc-head-open.inc' %]
6 [% IF op == 'add_source' %]
8 Modify classification source
10 Add classification source
11 [% END %] › [% ELSIF op == 'add_sort_rule' %]
16 [% END %] › [% ELSIF op == 'add_split_rule' %]
21 [% END %] › [% END %]
22 Classification sources › Administration › Koha
24 [% INCLUDE 'doc-head-close.inc' %]
35 <body id="admin_classsources" class="admin">
36 [% WRAPPER 'header.inc' %]
37 [% INCLUDE 'prefs-admin-search.inc' %]
40 [% WRAPPER 'sub-header.inc' %]
41 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
44 <a href="/cgi-bin/koha/mainpage.pl"><i class="fa fa-home"></i></a>
47 <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
50 [% IF op == 'add_source' %]
52 <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
55 <a href="#" aria-current="page">
57 Modify classification source
59 Add classification source
64 [% ELSIF op == 'add_sort_rule' %]
66 <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
69 <a href="#" aria-current="page">
78 [% ELSIF op == 'add_split_rule' %]
80 <a href="/cgi-bin/koha/admin/classsources.pl">Classification sources</a>
83 <a href="#" aria-current="page">
94 <a href="#" aria-current="page">
95 Classification sources
104 <div class="main container-fluid">
106 <div class="col-sm-10 col-sm-push-2">
109 [% FOR m IN messages %]
110 <div class="dialog [% m.type | html %]">
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>
149 <span>[% m.code | html %]</span>
155 [% IF op == 'add_source' %]
156 [% IF class_source %]
157 <h1>Modify classification source</h1>
159 <h1>Add classification source</h1>
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">
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 %]
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>
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>
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 %]
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>
191 <option value="[% r.class_sort_rule | html %]">[% r.description | html %] ([% r.class_sort_rule | html %])</option>
195 <span class="required">Required</span>
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>
204 <option value="[% r.class_split_rule | html %]">[% r.description | html %] ([% r.class_split_rule | html %])</option>
208 <span class="required">Required</span>
212 <fieldset class="action">
213 <input type="submit" value="Save" />
214 <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
219 [% IF op == 'add_sort_rule' %]
221 <h1>Modify filing rule</h1>
223 <h1>Add filing rule</h1>
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">
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 %]
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>
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>
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>
250 <option value="[% routine_name | html %]">[% routine_name | html %]</option>
254 <span class="required">Required</span>
258 <fieldset class="action">
259 <input type="submit" value="Save" />
260 <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
265 [% IF op == 'add_split_rule' %]
267 <h1>Modify splitting rule</h1>
269 <h1>Add splitting rule</h1>
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">
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 %]
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>
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>
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>
296 <option value="[% routine_name | html %]">[% routine_name | html %]</option>
300 <span class="required">Required</span>
302 <li id="regex_block">
303 <label for="split_regex" class="required">Regular expression: </label>
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>
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>
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>
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>
332 <fieldset class="action">
333 <input type="submit" value="Save" />
334 <a class="cancel" href="/cgi-bin/koha/admin/classsources.pl">Cancel</a>
339 [% IF op == 'list' %]
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>
346 <h1>Classification configuration</h1>
347 <h2>Classification sources</h2>
354 <th>Splitting rule</th>
355 <th class="noExport">Actions</th>
357 [% FOREACH class_source IN class_sources %]
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>
365 <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>
366 <a class="btn btn-default btn-xs delete_class_source" href="[% script_name | url %]?op=delete_source_confirmed&cn_source=[% class_source.cn_source | uri%]"><i class="fa fa-trash"></i> Delete</a>
372 <h2>Classification filing rules</h2>
377 <th>Sorting routine</th>
378 <th class="noExport">Actions</th>
380 [% FOREACH rule IN sort_rules %]
382 <td>[% rule.class_sort_rule | html %]</td>
383 <td>[% rule.description |html | html %]</td>
384 <td>[% rule.sort_routine | html %]</td>
386 <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>
387 <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>
393 <h2>Classification splitting rules</h2>
398 <th>Splitting routine</th>
399 <th class="noExport">Actions</th>
401 [% FOREACH rule IN split_rules %]
403 <td>[% rule.class_split_rule | html %]</td>
404 <td>[% rule.description | html %]</td>
405 <td>[% rule.split_routine | html %]</td>
407 <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>
408 <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>
418 </div> <!-- /.col-sm-10.col-sm-push-2 -->
420 <div class="col-sm-2 col-sm-pull-10">
422 [% INCLUDE 'admin-menu.inc' %]
424 </div> <!-- /.col-sm-2.col-sm-pull-10 -->
425 </div> <!-- /.row -->
427 [% MACRO jsinclude BLOCK %]
428 [% Asset.js("js/admin-menu.js") | $raw %]
431 function update_regex_block(){
432 if ( $("#split_routine option:selected").val() == 'RegEx' ) {
433 $("#regex_block").show();
434 $("#split_regex").attr('required', 'required');
436 $("#regex_block").hide();
437 $("#split_regex").removeAttr('required');
440 function update_delete_links_visibility() {
441 if( $("div.split_regex").length > 1 ) {
442 $("div.split_regex").find('a.del_regex').show();
444 $("div.split_regex").find('a.del_regex').hide();
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();
455 function del_regex(a_node) {
456 $(a_node).parent('div').remove();
457 update_delete_links_visibility();
460 $(document).ready(function(){
461 update_regex_block();
462 update_delete_links_visibility();
463 $("#split_routine").on("change", function(){
464 update_regex_block();
467 $(".delete_class_source").on("click", function(e){
468 return confirm(_("Are you sure you want to delete this class source?"));
470 $(".delete_sort_rule").on("click", function(e){
471 return confirm(_("Are you sure you want to delete this filing rule?"));
473 $(".delete_split_rule").on("click", function(e){
474 return confirm(_("Are you sure you want to delete this splitting rule?"));
477 $(".add_regex").on("click", function(e){
481 $(".del_regex").on("click", function(e){
486 $("button[name='test_split_cns']").on("click", function(e){
489 $("input[name='split_regex']").each(function(){
490 regexs.push($(this).val());
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);
502 $("#result_split_callnumbers").append(list_node);
503 }).fail(function(){alert("Something went wrong.")});
509 [% INCLUDE 'intranet-bottom.inc' %]