Bug 12904: Force browser to load new javascript files after upgrade
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / admin / matching-rules.tt
1 [% SET footerjs = 1 %]
2 [% INCLUDE 'doc-head-open.inc' %]
3 <title>Koha &rsaquo; Administration &rsaquo; Record matching rules
4 [% IF ( matching_rule_form ) %]
5   [% IF ( edit_matching_rule ) %]
6     &rsaquo; Modify record matching rule
7   [% ELSE %]
8     &rsaquo; Add record matching rule
9   [% END %]
10 [% END %]
11 [% IF ( delete_matching_rule_form ) %]
12   &rsaquo; Confirm deletion of record matching rule &quot;[% code %]&quot;
13 [% END %]
14 </title>
15 [% INCLUDE 'doc-head-close.inc' %]
16
17 [% BLOCK norms_text %]
18 [%    SWITCH norm %]
19 [%        CASE 'none'           %]None
20 [%        CASE 'remove_spaces'  %]Remove spaces
21 [%        CASE 'upper_case'     %]Uppercase
22 [%        CASE 'lower_case'     %]Lowercase
23 [%        CASE 'legacy_default' %]Legacy default
24 [%        CASE %][% norm %]
25 [%    END %]
26 [% END %]
27
28 [% BLOCK norms_options %]
29 [%# PARAMS: selected_norm %]
30 [%    FOREACH norm IN valid_norms %]
31 [%        IF ( norm == selected_norm ) %]
32         <option value="[% norm %]" selected="selected">[% PROCESS norms_text norm=norm %]</option>
33 [%        ELSE %]
34         <option value="[% norm %]">[% PROCESS norms_text norm=norm %]</option>
35 [%        END %]
36 [%    END %]
37 [% END %]
38
39 [% BLOCK norms_select %]
40 [%# PARAMS: selected_norm, id, name %]
41 [%    UNLESS valid_norms.grep(selected_norm).size %]
42 [%#       Fallback to 'none' %]
43 [%        selected_norm = 'none' %]
44 [%    END %]
45     <select id="[% id %]" name="[% name %]">
46 [%    PROCESS norms_options selected_norm=selected_norm %]
47     </select>
48 [% END %]
49
50 <style type="text/css">
51   fieldset.rows fieldset.rows { border-width : 0; }
52   fieldset.rows fieldset.rows fieldset.rows { border-width : 1px; }
53   fieldset, fieldset.rows { width : 90%; padding: .3em .6em .3em .6em; }
54         fieldset.rows fieldset {font-size:100%;}
55   div.matchgroup { border:1px solid #DDD; border-left-width: 15px; padding:.4em; margin-bottom:.6em;}
56 </style>
57 </head>
58 <body id="admin_matching-rules" class="admin">
59 [% INCLUDE 'header.inc' %]
60 [% INCLUDE 'prefs-admin-search.inc' %]
61
62 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; [% IF ( display_list ) %]Record matching rules[% ELSE %]<a href="/cgi-bin/koha/admin/matching-rules.pl">Record matching rules</a>[% END %]
63 [% IF ( matching_rule_form ) %]
64   [% IF ( edit_matching_rule ) %]
65     &rsaquo; Modify record matching rule
66   [% ELSE %]
67     &rsaquo; Add record matching rule
68   [% END %]
69 [% END %]
70 [% IF ( delete_matching_rule_form ) %]
71   &rsaquo; Confirm deletion of record matching rule &quot;[% code %]&quot;
72 [% END %]
73 </div>
74
75 <div id="doc3" class="yui-t2">
76
77    <div id="bd">
78     <div id="yui-main">
79     <div class="yui-b">
80
81 [% IF ( matching_rule_form ) %]
82   [% IF ( edit_matching_rule ) %]
83 <h2>Modify record matching rule</h2>
84   [% ELSE %]
85 <h2>Add record matching rule</h2>
86   [% END %]
87 <form action="[% script_name %]" name="Aform" method="post">
88   <input type="hidden" name="op" value="[% confirm_op %]" />
89   <fieldset class="rows">
90     <ol>
91       <li>
92           [% IF ( edit_matching_rule ) %]
93                   <span class="label">Matching rule code: </span>
94             <input type="hidden" name="matcher_id" value="[% matcher_id %]" />
95             <input type="hidden" name="code" value="[% code %]" />
96             [% code %]
97           [% ELSE %]
98                   <label for="code" class="required">Matching rule code: </label>
99             <input type="text" id="code" name="code"  size="10" maxlength="10" /> <span class="required">Required</span>
100           [% END %]
101        </li>
102        <li><label for="description" class="required">Description: </label>
103            <input type="text" id="description" name="description" size="50" maxlength="250" 
104                   value="[% description |html %]" /> <span class="required">Required</span>
105        </li>
106        <li><label for="threshold" class="required">Match threshold: </label>
107            <input type="text" id="threshold" name="threshold" size="5" maxlength="5" 
108                   value="[% threshold |html %]" /> <span class="required">Required</span>
109        </li>
110        <li><label for="record_type" class="required">Record type: </label>
111            <select id="record_type" name="record_type">
112                [% IF ( record_type == "authority" ) %]
113                    <option value="biblio">Bibliographic record</option>
114                    <option value="authority" selected="selected">Authority record</option>
115                [% ELSE %]
116                    <option value="biblio" selected="selected">Bibliographic record</option>
117                    <option value="authority">Authority record</option>
118                [% END %]
119            </select><span class="required">Required</span>
120        </li>
121     </ol>
122   </fieldset>
123
124   <fieldset class="rows" id="match_points">
125   <h4>Match points</h4>
126   [% IF ( edit_matching_rule ) %]
127   [% IF ( matchpoints ) %]<p id="addMatchPoint" style="display:none;">[% ELSE %]<p id="addMatchPoint">[% END %]<a href="#" class="button" onclick="InsertMatchpoint('mp_1', 'mp_template'); return false;">Add match point</a></p>
128   [% ELSE %]<p id="addMatchPoint" style="display:none;"><a href="#" class="button" onclick="InsertMatchpoint('mp_1', 'mp_template'); return false;">Add match point</a></p>[% END %]
129   [% IF ( edit_matching_rule ) %]
130   [% FOREACH matchpoint IN matchpoints %]
131   <div id="mp_[% matchpoint.mp_num %]" class="matchgroup">
132   <fieldset class="rows">
133     <legend>Match point [% matchpoint.mp_num %] | <a href="#" class="button" onclick="InsertMatchpoint('mp_[% matchpoint.mp_num %]', 'mp_template'); return false;">Add match point</a> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
134     <ol>
135       <li>
136         <label for="mp_[% matchpoint.mp_num %]_search_index">Search index: </label>
137         <input type ="text" id="mp_[% matchpoint.mp_num %]_search_index" 
138                name="mp_[% matchpoint.mp_num %]_search_index" size="20" 
139                value="[% matchpoint.index |html %]"
140           maxlength="30" />
141       </li>
142       <li>
143         <label for="mp_[% matchpoint.mp_num %]_score">Score: </label>
144         <input type ="text" id="mp_[% matchpoint.mp_num %]_score" 
145                name="mp_[% matchpoint.mp_num %]_score" size="5"
146                value="[% matchpoint.score |html %]" 
147                maxlength="5" />
148       </li>
149       </ol>
150       [% FOREACH component IN matchpoint.components %]
151       <fieldset class="rows" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]">
152       <legend>Matchpoint components</legend>
153         <ol>
154           <li>
155             <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_tag">Tag: </label>
156             <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_tag" 
157                    name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_tag" 
158                    value="[% component.tag |html %]"
159                    size="3" maxlength="3" />
160           </li>
161           <li>
162             <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_subfields">Subfields: </label>
163             <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_subfields" 
164                    name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_subfields" 
165                    value="[% component.subfields |html %]"
166                    size="10" maxlength="40" />
167           </li>
168           <li>
169             <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_offset">Offset: </label>
170             <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_offset" 
171                    name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_offset" 
172                    value="[% component.offset |html %]"
173                    size="5" maxlength="5" />
174           </li>
175           <li>
176             <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_length">Length: </label>
177             <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_length" 
178                    name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_length" 
179                    value="[% component.length |html %]"
180                    size="5" maxlength="5" />
181           </li>
182               [% FOREACH norm IN component.norms %]
183               <li id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_n_[% norm.norm_num %]">
184                 <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_n__[% norm.norm_num %]_norm">Normalization rule: </label>
185                 [%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
186                 [% PROCESS norms_select selected_norm=norm.norm id="mp_${norm.mp_num}_c_${component.comp_num}_n__${norm.norm_num}_norm" name="mp_${matchpoint.mp_num}_c_${component.comp_num}_n_${norm.norm_num}_norm" %]
187               </li>
188               [% END %]
189         </ol>
190       </fieldset>
191       [% END %]
192       </fieldset>
193       <br style="clear:both;" />
194       </div>
195   </fieldset>
196
197   [% END %]
198   [% ELSE %]
199   <div id="mp_1" class="matchgroup">
200   <fieldset class="rows">
201     <legend>Match point 1 | <a href="#" class="button" onclick="InsertMatchpoint('mp_1', 'mp_template'); return false;">Add match point</a> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
202     <ol>
203       <li>
204         <label for="mp_1_search_index">Search index: </label>
205         <input type ="text" id="mp_1_search_index" name="mp_1_search_index" size="20" 
206           maxlength="30" />
207       </li>
208       <li>
209         <label for="mp_1_score">Score: </label>
210         <input type ="text" id="mp_1_score" name="mp_1_score" size="5" maxlength="5" />
211       </li>
212     </ol>
213     <fieldset class="rows" id="mp_1_c_1">
214       <legend>Matchpoint components</legend>
215         <ol>
216           <li>
217             <label for="mp_1_c_1_tag">Tag: </label>
218             <input type="text" id="mp_1_c_1_tag" name="mp_1_c_1_tag" size="3" maxlength="3" />
219           </li>
220           <li>
221             <label for="mp_1_c_1_subfields">Subfields: </label>
222             <input type="text" id="mp_1_c_1_subfields" name="mp_1_c_1_subfields" size="10" maxlength="40" />
223           </li>
224           <li>
225             <label for="mp_1_c_1_offset">Offset: </label>
226             <input type="text" id="mp_1_c_1_offset" name="mp_1_c_1_offset" size="5" maxlength="5" />
227           </li>
228           <li>
229             <label for="mp_1_c_1_length">Length: </label>
230             <input type="text" id="mp_1_c_1_length" name="mp_1_c_1_length" size="5" maxlength="5" />
231           </li>
232             <li id="mp_1_c_1_n_1">
233               <label for="mp_1_c_1_n_1_norm">Normalization rule: </label>
234                 [% PROCESS norms_select selected_norm="none" id="mp_1_c_1_n_1_norm" name="mp_1_c_1_n_1_norm" %]
235             </li>
236         </ol>
237     </fieldset>
238     </fieldset>
239       <br style="clear:both;" />
240       </div>
241
242   </fieldset>
243   [% END %]
244
245   <fieldset class="rows" id="match_checks">
246   <h4>Required match checks</h4>
247   [% IF ( edit_matching_rule ) %]
248   [% IF ( matchchecks ) %]<p id="addMatchCheck" style="display:none;">[% ELSE %]<p id="addMatchCheck">[% END %]<a href="#" class="button" onclick="InsertMatchcheck('mc_1', 'mc_template'); return false;">Add match check</a></p>
249   [% ELSE %]<p id="addMatchCheck" style="display:none;"><a href="#" class="button" onclick="InsertMatchcheck('mc_1', 'mc_template'); return false;">Add match check</a></p>[% END %]
250   [% IF ( edit_matching_rule ) %]
251   [% FOREACH matchcheck IN matchchecks %]
252   <div id="mc_[% matchcheck.mc_num %]" class="matchgroup">
253   <fieldset class="rows">
254     <legend>Match check [% matchcheck.mc_num %]<a href="#" class="button" onclick="InsertMatchcheck('mc_[% matchcheck.mc_num %]', 'mc_template'); return false;">Add match check</a> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
255     <input type="hidden" id="mc_[% matchcheck.mc_num %]_id" name="mc_[% matchcheck.mc_num %]_id" value="1" />
256       [% FOREACH src_component IN matchcheck.src_components %]
257       <fieldset class="rows" id="mc_[% src_component.mc_num %]_src_c_[% src_component.comp_num %]">
258         <legend>Source (incoming) record check field</legend>
259         <ol>
260           <li>
261             <label for="mc_[% src_component.mc_num %]_src_c_[% src_component.comp_num %]_tag">Tag: </label>
262             <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_tag" 
263                    name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_tag" 
264                    value="[% src_component.tag |html %]"
265                    size="3" maxlength="3" />
266           </li>
267           <li>
268             <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_subfields">Subfields: </label>
269             <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_subfields" 
270                    name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_subfields" 
271                    value="[% src_component.subfields |html %]"
272                    size="10" maxlength="40" />
273           </li>
274           <li>
275             <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_offset">Offset: </label>
276             <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_offset" 
277                    name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_offset" 
278                    value="[% src_component.offset |html %]"
279                    size="5" maxlength="5" />
280           </li>
281           <li>
282             <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_length">Length: </label>
283             <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_length" 
284                    name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_length" 
285                    value="[% src_component.length |html %]"
286                    size="5" maxlength="5" />
287           </li>
288           [% FOREACH norm IN src_component.norms %]
289             <li id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_n_[% norm.norm_num %]">
290               <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_n_[% norm.norm_num %]_norm">Normalization rule: </label>
291                 [%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
292                 [% PROCESS norms_select selected_norm=norm.norm id="mc_${matchcheck.mc_num}_src_c_${src_component.comp_num}_n_${norm.norm_num}_norm" name="mc_${matchcheck.mc_num}_src_c_${src_component.comp_num}_n_${norm.norm_num}_norm" %]
293             </li>
294           [% END %]
295         </ol>
296       </fieldset>
297       [% END %]
298       [% FOREACH tgt_component IN matchcheck.tgt_components %]
299       <fieldset class="rows" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]">
300         <legend>Target (database) record check field</legend>
301         <ol>
302           <li>
303             <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_tag">Tag: </label>
304             <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_tag" 
305                    name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_tag" 
306                    value="[% tgt_component.tag |html %]"
307                    size="3" maxlength="3" />
308           </li>
309           <li>
310             <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_subfields">Subfields: </label>
311             <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_subfields" 
312                    name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_subfields" 
313                    value="[% tgt_component.subfields |html %]"
314                    size="10" maxlength="40" />
315           </li>
316           <li>
317             <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_offset">Offset: </label>
318             <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_offset" 
319                    name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_offset" 
320                    value="[% tgt_component.offset |html %]"
321                    size="5" maxlength="5" />
322           </li>
323           <li>
324             <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_length">Length: </label>
325             <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_length" 
326                    name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_length" 
327                    value="[% tgt_component.length |html %]"
328                    size="5" maxlength="5" />
329           </li>
330           [% FOREACH norm IN tgt_component.norms %]
331             <li id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_n_[% norm.norm_num %]">
332               <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_n_[% norm.norm_num %]_norm">Normalization rule: </label>
333                 [%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
334                 [% PROCESS norms_select selected_norm=norm.norm id="mc_${matchcheck.mc_num}_tgt_c_${tgt_component.comp_num}_n_${norm.norm_num}_norm" name="mc_${matchcheck.mc_num}_tgt_c_${tgt_component.comp_num}_n_${norm.norm_num}_norm" %]
335             </li>
336           [% END %]
337         </ol>
338       </fieldset>
339       [% END %]
340   </fieldset>
341   <br style="clear:both;" />
342   </div>
343   [% END %]
344   [% ELSE %]
345   <div id="mc_1" class="matchgroup">
346   <fieldset class="rows">
347     <legend>Match check 1 | <a href="#" class="button" onclick="InsertMatchcheck('mc_1', 'mc_template'); return false;">Add match check</a> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
348     <input type="hidden" id="mc_1_id" name="mc_1_id" value="1" />
349       <fieldset class="rows" id="mc_1_src_c_1">
350         <legend>Source (incoming) record check field</legend>
351         <ol>
352           <li>
353             <label for="mc_1_src_c_1_tag">Tag: </label>
354             <input type="text" id="mc_1_src_c_1_tag" name="mc_1_src_c_1_tag" size="3" maxlength="3" />
355           </li>
356           <li>
357             <label for="mc_1_src_c_1_subfields">Subfields: </label>
358             <input type="text" id="mc_1_src_c_1_subfields" name="mc_1_src_c_1_subfields" size="10" maxlength="40" />
359           </li>
360           <li>
361             <label for="mc_1_src_c_1_offset">Offset: </label>
362             <input type="text" id="mc_1_src_c_1_offset" name="mc_1_src_c_1_offset" size="5" maxlength="5" />
363           </li>
364           <li>
365             <label for="mc_1_src_c_1_length">Length: </label>
366             <input type="text" id="mc_1_src_c_1_length" name="mc_1_src_c_1_length" size="5" maxlength="5" />
367           </li>
368             <li id="mc_1_src_c_1_n_1">
369               <label for="mc_1_src_c_1_n_1_norm">Normalization rule: </label>
370                 [% PROCESS norms_select selected_norm="none" id="mc_1_src_c_1_n_1_norm" name="mc_1_src_c_1_n_1_norm" %]
371             </li>
372         </ol>
373       </fieldset>
374
375       <fieldset class="rows" id="mc_1_tgt_c_1">
376         <legend>Target (database) record check field</legend>
377         <ol>
378           <li>
379             <label for="mc_1_tgt_c_1_tag">Tag: </label>
380             <input type="text" id="mc_1_tgt_c_1_tag" name="mc_1_tgt_c_1_tag" size="3" maxlength="3" />
381           </li>
382           <li>
383             <label for="mc_1_tgt_c_1_subfields">Subfields: </label>
384             <input type="text" id="mc_1_tgt_c_1_subfields" name="mc_1_tgt_c_1_subfields" size="10" maxlength="40" />
385           </li>
386           <li>
387             <label for="mc_1_tgt_c_1_offset">Offset: </label>
388             <input type="text" id="mc_1_tgt_c_1_offset" name="mc_1_tgt_c_1_offset" size="5" maxlength="5" />
389           </li>
390           <li>
391             <label for="mc_1_tgt_c_1_length">Length: </label>
392             <input type="text" id="mc_1_tgt_c_1_length" name="mc_1_tgt_c_1_length" size="5" maxlength="5" />
393           </li>
394             <li id="mc_1_tgt_c_1_n_1">
395               <label for="mc_1_tgt_c_1_n_1_norm">Normalization rule: </label>
396                 [% PROCESS norms_select selected_norm="none" id="mc_1_tgt_c_1_n_1_norm" name="mc_1_tgt_c_1_n_1_norm" %]
397             </li>
398         </ol>
399       </fieldset>
400   </fieldset>
401   <br style="clear:both;" />
402   </div>
403   [% END %]
404   </fieldset>
405   <fieldset class="action">
406     [% IF ( edit_matching_rule ) %]
407     <input type="button" value="Save"
408            onclick="CheckMatchingRuleForm(this.form)" />
409     [% ELSE %]
410     <input type="button" value="Save"
411            onclick="CheckMatchingRuleForm(this.form)" />
412     [% END %]
413     <a class="cancel" href="/cgi-bin/koha/admin/matching-rules.pl">Cancel</a>
414   </fieldset>
415 </form>
416 [% END %]
417
418 [% IF ( delete_matching_rule_form ) %]
419     <div class="dialog alert">
420         <h3>Confirm deletion of record matching rule <span class="ex">'[% code %]' ([% description %])</span>?</h3>
421         <form action="[% script_name %]" name="Aform" method="post">
422             <input type="hidden" name="op" value="[% confirm_op %]" />
423             <input type="hidden" name="matcher_id" value="[% matcher_id %]" />
424             <button type="submit" class="approve"><i class="fa fa-fw fa-check"></i> Yes, delete record matching rule</button>
425         </form>
426         <form action="[% script_name %]" method="get">
427             <button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> No, do not delete</button>
428         </form>
429     </div>
430 [% END %]
431
432 [% IF ( display_list ) %]
433
434 <div id="toolbar" class="btn-toolbar">
435     <a class="btn btn-default btn-sm" id="newrule" href="[% script_name %]?op=add_matching_rule"><i class="fa fa-plus"></i> New record matching rule</a>
436 </div>
437
438 <h2>Record matching rules</h2>
439 [% IF ( added_matching_rule ) %]
440 <div class="dialog message">Added record matching rule &quot;[% added_matching_rule %]&quot;</div>
441 [% END %]
442 [% IF ( edited_matching_rule ) %]
443 <div class="dialog message">Modified record matching rule &quot;[% edited_matching_rule %]&quot;</div>
444 [% END %]
445 [% IF ( deleted_matching_rule ) %]
446 <div class="dialog message">Deleted record matching rule &quot;[% deleted_matching_rule %]&quot;</div>
447 [% END %]
448 [% IF ( available_matching_rules ) %]<table>
449   <tr>
450     <th>#</th>
451     <th>Code</th>
452     <th>Description</th>
453     <th>Actions</th>
454   </tr>
455   [% FOREACH available_matching_rule IN available_matching_rules %]
456   <tr>
457     <td>[% available_matching_rule.matcher_id %]</td>
458     <td>[% available_matching_rule.code %]</td>
459     <td>[% available_matching_rule.description |html %]</td>
460     <td class="actions">
461       <a class="btn btn-default btn-xs" href="[% available_matching_rule.script_name %]?op=edit_matching_rule&amp;matcher_id=[% available_matching_rule.matcher_id |html %]"><i class="fa fa-pencil"></i> Edit</a>
462       <a class="btn btn-default btn-xs" href="[% available_matching_rule.script_name %]?op=delete_matching_rule&amp;matcher_id=[% available_matching_rule.matcher_id |html %]"><i class="fa fa-trash"></i> Delete</a>
463     </td>
464   </tr>
465   [% END %]
466 </table>[% ELSE %]<p>There are no saved matching rules.</p>[% END %]
467
468 <div class="pages">[% pagination_bar %]</div>
469
470 [% END %]
471  [% IF ( matching_rule_form ) %]
472 <div id="mp_template" class="matchgroup" style="display:none;">
473   <fieldset class="rows">
474     <legend>Match point <span class="counter"></span> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
475     <ol>
476       <li>
477         <label for="mp_num_search_index">Search index: </label>
478         <input type ="text" id="mp_num_search_index" name="mp_num_search_index" size="20" 
479           maxlength="30" />
480       </li>
481       <li>
482         <label for="mp_num_score">Score: </label>
483         <input type ="text" id="mp_num_score" name="mp_num_score" size="5" maxlength="5" />
484       </li>
485     </ol>
486       <fieldset id="mp_num_c_1" class="rows">
487       <legend>Matchpoint components</legend>
488         <ol>
489           <li>
490             <label for="mp_num_c_1_tag">Tag: </label>
491             <input type="text" id="mp_num_c_1_tag" name="mp_num_c_1_tag" size="3" maxlength="3" />
492           </li>
493           <li>
494             <label for="mp_num_c_1_subfields">Subfields: </label>
495             <input type="text" id="mp_num_c_1_subfields" name="mp_num_c_1_subfields" size="10" maxlength="40" />
496           </li>
497           <li>
498             <label for="mp_num_c_1_offset">Offset: </label>
499             <input type="text" id="mp_num_c_1_offset" name="mp_num_c_1_offset" size="5" maxlength="5" />
500           </li>
501           <li>
502             <label for="mp_num_c_1_length">Length: </label>
503             <input type="text" id="mp_num_c_1_length" name="mp_num_c_1_length" size="5" maxlength="5" />
504           </li>
505             <li id="mp_num_c_1_n_1">
506               <label for="mp_num_c_1_n_1_norm">Normalization rule: </label>
507                 [% PROCESS norms_select selected_norm="none" id="mp_num_c_1_n_1_norm" name="mp_num_c_1_n_1_norm" %]
508             </li>
509         </ol>
510       </fieldset>
511   </fieldset>
512       <br style="clear:both;" />
513       </div>
514
515 <div id="mc_template" class="matchgroup" style="display:none">
516 <fieldset class="rows">
517   <legend>Match check <span class="counter"></span> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
518   <input type="hidden" id="mc_num_id" name="mc_num_id" value="1" />
519     <fieldset class="rows" id="mc_num_src_c_1">
520       <legend>Source (incoming) record check field</legend>
521       <ol>
522         <li>
523           <label for="mc_num_src_c_1_tag">Tag: </label>
524           <input type="text" id="mc_num_src_c_1_tag" name="mc_num_src_c_1_tag" size="3" maxlength="3" />
525         </li>
526         <li>
527           <label for="mc_num_src_c_1_subfields">Subfields: </label>
528           <input type="text" id="mc_num_src_c_1_subfields" name="mc_num_src_c_1_subfields" size="10" maxlength="40" />
529         </li>
530         <li>
531           <label for="mc_num_src_c_1_offset">Offset: </label>
532           <input type="text" id="mc_num_src_c_1_offset" name="mc_num_src_c_1_offset" size="5" maxlength="5" />
533         </li>
534         <li>
535           <label for="mc_num_src_c_1_length">Length: </label>
536           <input type="text" id="mc_num_src_c_1_length" name="mc_num_src_c_1_length" size="5" maxlength="5" />
537         </li>
538           <li id="mc_num_src_c_1_n_1">
539             <label for="mc_num_src_c_1_n_1_norm">Normalization rule: </label>
540                [% PROCESS norms_select selected_norm="none" id="mc_num_src_c_1_n_1_norm" name="mc_num_src_c_1_n_1_norm" %]
541           </li>
542       </ol>
543     </fieldset>
544     <fieldset class="rows" id="mc_num_tgt_c_1">
545       <legend>Target (database) record check field</legend>
546       <ol>
547         <li>
548           <label for="mc_num_tgt_c_1_tag">Tag: </label>
549           <input type="text" id="mc_num_tgt_c_1_tag" name="mc_num_tgt_c_1_tag" size="3" maxlength="3" />
550         </li>
551         <li>
552           <label for="mc_num_tgt_c_1_subfields">Subfields: </label>
553           <input type="text" id="mc_num_tgt_c_1_subfields" name="mc_num_tgt_c_1_subfields" size="10" maxlength="40" />
554         </li>
555         <li>
556           <label for="mc_num_tgt_c_1_offset">Offset: </label>
557           <input type="text" id="mc_num_tgt_c_1_offset" name="mc_num_tgt_c_1_offset" size="5" maxlength="5" />
558         </li>
559         <li>
560           <label for="mc_num_tgt_c_1_length">Length: </label>
561           <input type="text" id="mc_num_tgt_c_1_length" name="mc_num_tgt_c_1_length" size="5" maxlength="5" />
562         </li>
563           <li id="mc_num_tgt_c_1_n_1">
564             <label for="mc_num_tgt_c_1_n_1_norm">Normalization rule: </label>
565                [% PROCESS norms_select selected_norm="none" id="mc_num_tgt_c_1_n_1_norm" name="mc_num_tgt_c_1_n_1_norm" %]
566           </li>
567       </ol>
568     </fieldset>
569 </fieldset>
570 <br style="clear:both;" />
571 </div>
572 [% END %]
573
574 </div>
575 </div>
576 <div class="yui-b">
577 [% INCLUDE 'admin-menu.inc' %]
578 </div>
579 </div>
580
581 [% MACRO jsinclude BLOCK %]
582     <script type="text/javascript" src="[% interface %]/[% theme %]/js/admin-menu_[% KOHA_VERSION %].js"></script>
583     <script type="text/javascript">
584         var maxMatchPoint = [% max_matchpoint %];
585         var maxMatchCheck = [% max_matchcheck %];
586
587         function InsertMatchpoint(loc, index) {
588             var original= $("#"+index);
589             var clone = original.clone();
590             clone.show();
591
592             // update IDs and form names
593             maxMatchPoint++;
594             clone.attr('id', 'mp_' + maxMatchPoint);
595             $("span.counter",clone).html(maxMatchPoint);
596             $("label",clone).each(function(){
597               var s = $(this).attr("for");
598                 if (s.match(/mp_num/)) {
599                     $(this).attr("for",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
600                 }
601             });
602
603             $("div",clone).each(function(){
604               var s = $(this).attr("id");
605                 if (s.match(/mp_num/)) {
606                     $(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
607                 }
608             });
609             $("input",clone).each(function(){
610                 var s = $(this).attr("id");
611                 if(s.match(/mp_num/)){
612                   $(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
613                 }
614
615                 var s = $(this).attr("name");
616                 if(s.match(/mp_num/)){
617                   $(this).attr("name",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
618                 }
619             });
620             $("#match_points").append(clone);
621         }
622
623         function InsertMatchcheck(loc, index) {
624             var original= $("#"+index);
625             var clone = original.clone();
626             clone.show();
627
628             // update IDs and form names
629             maxMatchCheck++;
630             clone.attr('id', 'mc_' + maxMatchCheck);
631             $("span.counter",clone).html(maxMatchCheck);
632             $("label",clone).each(function(){
633               var s = $(this).attr("for");
634                 if (s.match(/mc_num/)) {
635                     $(this).attr("for",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
636                 }
637             });
638
639             $("div",clone).each(function(){
640               var s = $(this).attr("id");
641                 if (s.match(/mc_num/)) {
642                     $(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
643                 }
644             });
645             $("input",clone).each(function(){
646                 var s = $(this).attr("id");
647                 if(s.match(/mc_num/)){
648                   $(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
649                 }
650
651                 var s = $(this).attr("name");
652                 if(s.match(/mc_num/)){
653                   $(this).attr("name",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
654                 }
655             });
656             $("#match_checks").append(clone);
657         }
658
659         function DeleteMatchpoint(loc) {
660             $(loc).parent().parent().parent().remove();
661             if($(".matchgroup",$("#match_points")).length == 0){
662               maxMatchPoint = 0;
663               $("#addMatchPoint").show();
664             }
665         }
666
667         function DeleteMatchcheck(loc) {
668             $(loc).parent().parent().parent().remove();
669             if($(".matchgroup",$("#match_checks")).length == 0){
670               maxMatchCheck = 0;
671               $("#addMatchCheck").show();
672             }
673         }
674
675         function DoCancel(f) {
676           f.op.value='';
677           document.Aform.submit();
678         }
679
680         function CheckMatchingRuleForm(f) {
681             var ok=1;
682             var _alertString="";
683             var alertString2;
684             if (f.code.value.length==0) {
685                 _alertString += "\n- " + _("Matching rule code missing");
686             }
687             if (f.description.value.length==0) {
688                 _alertString += "\n- " + _("Description missing");
689             }
690             if (f.threshold.value.length==0) {
691                 _alertString += "\n- " + _("Threshold missing");
692             }
693             if (_alertString.length==0) {
694                 document.Aform.submit();
695             } else {
696                 alertString2  = _("Form not submitted because of the following problem(s)");
697                 alertString2 += "\n------------------------------------------------------------------------------------\n";
698                 alertString2 += _alertString;
699                 alert(alertString2);
700             }
701         }
702
703         function CheckRuleForm(f) {
704             var ok=1;
705             var _alertString="";
706             var alertString2;
707             if (f.sort_rule.value.length==0) {
708                 _alertString += "\n- " + _("Filing rule code missing");
709             }
710             if (f.description.value.length==0) {
711                 _alertString += "\n- " + _("Description missing");
712             }
713             if (f.sort_routine.value.length==0) {
714                 _alertString += "\n- " + _("Sort routine missing");
715             }
716             if (_alertString.length==0) {
717                 document.Aform.submit();
718             } else {
719                 alertString2  = _("Form not submitted because of the following problem(s)");
720                 alertString2 += "\n------------------------------------------------------------------------------------\n";
721                 alertString2 += _alertString;
722                 alert(alertString2);
723             }
724         }
725     </script>
726 [% END %]
727 [% INCLUDE 'intranet-bottom.inc' %]