Nick Clemens
3d15819443
To test: 1 - Set SearchEngine to ElasticSearch 2 - Stage the sample file (import it if it doesn't already exist in your catalog and then stage again) 3 - Set matching rule to ISBN 4 - No matches found 5 - Apply patch 6 - Apply no matchign rule 7 - Change the ISBN matching rule to use ISBN normalizer 8 - Apply matching rule for ISBN 9 - It matches! Signed-off-by: Ron Houk <rhouk@ottumwapubliclibrary.org> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
732 lines
34 KiB
Text
732 lines
34 KiB
Text
[% USE raw %]
|
|
[% USE Asset %]
|
|
[% SET footerjs = 1 %]
|
|
[% INCLUDE 'doc-head-open.inc' %]
|
|
<title>Koha › Administration › Record matching rules
|
|
[% IF ( matching_rule_form ) %]
|
|
[% IF ( edit_matching_rule ) %]
|
|
› Modify record matching rule
|
|
[% ELSE %]
|
|
› Add record matching rule
|
|
[% END %]
|
|
[% END %]
|
|
[% IF ( delete_matching_rule_form ) %]
|
|
› Confirm deletion of record matching rule "[% code | html %]"
|
|
[% END %]
|
|
</title>
|
|
[% INCLUDE 'doc-head-close.inc' %]
|
|
|
|
[% BLOCK norms_text %]
|
|
[% SWITCH norm %]
|
|
[% CASE 'none' %]None
|
|
[% CASE 'remove_spaces' %]Remove spaces
|
|
[% CASE 'upper_case' %]Uppercase
|
|
[% CASE 'lower_case' %]Lowercase
|
|
[% CASE 'legacy_default' %]Legacy default
|
|
[% CASE 'ISBN' %]ISBN
|
|
[% CASE %][% norm | html %]
|
|
[% END %]
|
|
[% END %]
|
|
|
|
[% BLOCK norms_options %]
|
|
[%# PARAMS: selected_norm %]
|
|
[% FOREACH norm IN valid_norms %]
|
|
[% IF ( norm == selected_norm ) %]
|
|
<option value="[% norm | html %]" selected="selected">[% PROCESS norms_text norm=norm %]</option>
|
|
[% ELSE %]
|
|
<option value="[% norm | html %]">[% PROCESS norms_text norm=norm %]</option>
|
|
[% END %]
|
|
[% END %]
|
|
[% END %]
|
|
|
|
[% BLOCK norms_select %]
|
|
[%# PARAMS: selected_norm, id, name %]
|
|
[% UNLESS valid_norms.grep(selected_norm).size %]
|
|
[%# Fallback to 'none' %]
|
|
[% selected_norm = 'none' %]
|
|
[% END %]
|
|
<select id="[% id | html %]" name="[% name | html %]">
|
|
[% PROCESS norms_options selected_norm=selected_norm %]
|
|
</select>
|
|
[% END %]
|
|
|
|
<style>
|
|
fieldset.rows fieldset.rows { border-width : 0; }
|
|
fieldset.rows fieldset.rows fieldset.rows { border-width : 1px; }
|
|
fieldset, fieldset.rows { width : 90%; padding: .3em .6em .3em .6em; }
|
|
fieldset.rows fieldset {font-size:100%;}
|
|
div.matchgroup { border:1px solid #DDD; border-left-width: 15px; padding:.4em; margin-bottom:.6em;}
|
|
</style>
|
|
</head>
|
|
<body id="admin_matching-rules" class="admin">
|
|
[% INCLUDE 'header.inc' %]
|
|
[% INCLUDE 'prefs-admin-search.inc' %]
|
|
|
|
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › [% IF ( display_list ) %]Record matching rules[% ELSE %]<a href="/cgi-bin/koha/admin/matching-rules.pl">Record matching rules</a>[% END %]
|
|
[% IF ( matching_rule_form ) %]
|
|
[% IF ( edit_matching_rule ) %]
|
|
› Modify record matching rule
|
|
[% ELSE %]
|
|
› Add record matching rule
|
|
[% END %]
|
|
[% END %]
|
|
[% IF ( delete_matching_rule_form ) %]
|
|
› Confirm deletion of record matching rule "[% code | html %]"
|
|
[% END %]
|
|
</div>
|
|
|
|
<div class="main container-fluid">
|
|
<div class="row">
|
|
<div class="col-sm-10 col-sm-push-2">
|
|
<main>
|
|
|
|
[% IF ( matching_rule_form ) %]
|
|
[% IF ( edit_matching_rule ) %]
|
|
<h2>Modify record matching rule</h2>
|
|
[% ELSE %]
|
|
<h2>Add record matching rule</h2>
|
|
[% END %]
|
|
<form action="[% script_name | html %]" name="Aform" method="post">
|
|
<input type="hidden" name="op" value="[% confirm_op | html %]" />
|
|
<fieldset class="rows">
|
|
<ol>
|
|
<li>
|
|
[% IF ( edit_matching_rule ) %]
|
|
<span class="label">Matching rule code: </span>
|
|
<input type="hidden" name="matcher_id" value="[% matcher_id | html %]" />
|
|
<input type="hidden" name="code" value="[% code | html %]" />
|
|
[% code | html %]
|
|
[% ELSE %]
|
|
<label for="code" class="required">Matching rule code: </label>
|
|
<input type="text" id="code" name="code" size="10" maxlength="10" /> <span class="required">Required</span>
|
|
[% END %]
|
|
</li>
|
|
<li><label for="description" class="required">Description: </label>
|
|
<input type="text" id="description" name="description" size="50" maxlength="250"
|
|
value="[% description | html %]" /> <span class="required">Required</span>
|
|
</li>
|
|
<li><label for="threshold" class="required">Match threshold: </label>
|
|
<input type="text" id="threshold" name="threshold" size="5" maxlength="5"
|
|
value="[% threshold | html %]" /> <span class="required">Required</span>
|
|
</li>
|
|
<li><label for="record_type" class="required">Record type: </label>
|
|
<select id="record_type" name="record_type">
|
|
[% IF ( record_type == "authority" ) %]
|
|
<option value="biblio">Bibliographic record</option>
|
|
<option value="authority" selected="selected">Authority record</option>
|
|
[% ELSE %]
|
|
<option value="biblio" selected="selected">Bibliographic record</option>
|
|
<option value="authority">Authority record</option>
|
|
[% END %]
|
|
</select><span class="required">Required</span>
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
|
|
<fieldset class="rows" id="match_points">
|
|
<h4>Match points</h4>
|
|
[% IF ( edit_matching_rule ) %]
|
|
[% 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>
|
|
[% 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 %]
|
|
[% IF ( edit_matching_rule ) %]
|
|
[% FOREACH matchpoint IN matchpoints %]
|
|
<div id="mp_[% matchpoint.mp_num | html %]" class="matchgroup">
|
|
<fieldset class="rows">
|
|
<legend>Match point [% matchpoint.mp_num | html %] | <a href="#" class="button" onclick="InsertMatchpoint('mp_[% matchpoint.mp_num | html %]', 'mp_template'); return false;">Add match point</a> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mp_[% matchpoint.mp_num | html %]_search_index">Search index: </label>
|
|
<input type ="text" id="mp_[% matchpoint.mp_num | html %]_search_index"
|
|
name="mp_[% matchpoint.mp_num | html %]_search_index" size="20"
|
|
value="[% matchpoint.index | html %]"
|
|
maxlength="30" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_[% matchpoint.mp_num | html %]_score">Score: </label>
|
|
<input type ="text" id="mp_[% matchpoint.mp_num | html %]_score"
|
|
name="mp_[% matchpoint.mp_num | html %]_score" size="5"
|
|
value="[% matchpoint.score | html %]"
|
|
maxlength="5" />
|
|
</li>
|
|
</ol>
|
|
[% FOREACH component IN matchpoint.components %]
|
|
<fieldset class="rows" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]">
|
|
<legend>Matchpoint components</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_tag">Tag: </label>
|
|
<input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_tag"
|
|
name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_tag"
|
|
value="[% component.tag | html %]"
|
|
size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_subfields">Subfields: </label>
|
|
<input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_subfields"
|
|
name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_subfields"
|
|
value="[% component.subfields | html %]"
|
|
size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_offset">Offset: </label>
|
|
<input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_offset"
|
|
name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_offset"
|
|
value="[% component.offset | html %]"
|
|
size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_length">Length: </label>
|
|
<input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_length"
|
|
name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_length"
|
|
value="[% component.length | html %]"
|
|
size="5" maxlength="5" />
|
|
</li>
|
|
[% FOREACH norm IN component.norms %]
|
|
<li id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_n_[% norm.norm_num | html %]">
|
|
<label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_n__[% norm.norm_num | html %]_norm">Normalization rule: </label>
|
|
[%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
|
|
[% 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" %]
|
|
</li>
|
|
[% END %]
|
|
</ol>
|
|
</fieldset>
|
|
[% END %]
|
|
</fieldset>
|
|
<br style="clear:both;" />
|
|
</div>
|
|
</fieldset>
|
|
|
|
[% END %]
|
|
[% ELSE %]
|
|
<div id="mp_1" class="matchgroup">
|
|
<fieldset class="rows">
|
|
<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>
|
|
<ol>
|
|
<li>
|
|
<label for="mp_1_search_index">Search index: </label>
|
|
<input type ="text" id="mp_1_search_index" name="mp_1_search_index" size="20"
|
|
maxlength="30" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_1_score">Score: </label>
|
|
<input type ="text" id="mp_1_score" name="mp_1_score" size="5" maxlength="5" />
|
|
</li>
|
|
</ol>
|
|
<fieldset class="rows" id="mp_1_c_1">
|
|
<legend>Matchpoint components</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mp_1_c_1_tag">Tag: </label>
|
|
<input type="text" id="mp_1_c_1_tag" name="mp_1_c_1_tag" size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_1_c_1_subfields">Subfields: </label>
|
|
<input type="text" id="mp_1_c_1_subfields" name="mp_1_c_1_subfields" size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_1_c_1_offset">Offset: </label>
|
|
<input type="text" id="mp_1_c_1_offset" name="mp_1_c_1_offset" size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_1_c_1_length">Length: </label>
|
|
<input type="text" id="mp_1_c_1_length" name="mp_1_c_1_length" size="5" maxlength="5" />
|
|
</li>
|
|
<li id="mp_1_c_1_n_1">
|
|
<label for="mp_1_c_1_n_1_norm">Normalization rule: </label>
|
|
[% PROCESS norms_select selected_norm="none" id="mp_1_c_1_n_1_norm" name="mp_1_c_1_n_1_norm" %]
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
</fieldset>
|
|
<br style="clear:both;" />
|
|
</div>
|
|
|
|
</fieldset>
|
|
[% END %]
|
|
|
|
<fieldset class="rows" id="match_checks">
|
|
<h4>Required match checks</h4>
|
|
[% IF ( edit_matching_rule ) %]
|
|
[% 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>
|
|
[% 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 %]
|
|
[% IF ( edit_matching_rule ) %]
|
|
[% FOREACH matchcheck IN matchchecks %]
|
|
<div id="mc_[% matchcheck.mc_num | html %]" class="matchgroup">
|
|
<fieldset class="rows">
|
|
<legend>Match check [% matchcheck.mc_num | html %]<a href="#" class="button" onclick="InsertMatchcheck('mc_[% matchcheck.mc_num | html %]', 'mc_template'); return false;">Add match check</a> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
|
|
<input type="hidden" id="mc_[% matchcheck.mc_num | html %]_id" name="mc_[% matchcheck.mc_num | html %]_id" value="1" />
|
|
[% FOREACH src_component IN matchcheck.src_components %]
|
|
<fieldset class="rows" id="mc_[% src_component.mc_num | html %]_src_c_[% src_component.comp_num | html %]">
|
|
<legend>Source (incoming) record check field</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mc_[% src_component.mc_num | html %]_src_c_[% src_component.comp_num | html %]_tag">Tag: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_tag"
|
|
name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_tag"
|
|
value="[% src_component.tag | html %]"
|
|
size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_subfields">Subfields: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_subfields"
|
|
name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_subfields"
|
|
value="[% src_component.subfields | html %]"
|
|
size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_offset">Offset: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_offset"
|
|
name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_offset"
|
|
value="[% src_component.offset | html %]"
|
|
size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_length">Length: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_length"
|
|
name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_length"
|
|
value="[% src_component.length | html %]"
|
|
size="5" maxlength="5" />
|
|
</li>
|
|
[% FOREACH norm IN src_component.norms %]
|
|
<li id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_n_[% norm.norm_num | html %]">
|
|
<label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_n_[% norm.norm_num | html %]_norm">Normalization rule: </label>
|
|
[%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
|
|
[% 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" %]
|
|
</li>
|
|
[% END %]
|
|
</ol>
|
|
</fieldset>
|
|
[% END %]
|
|
[% FOREACH tgt_component IN matchcheck.tgt_components %]
|
|
<fieldset class="rows" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]">
|
|
<legend>Target (database) record check field</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_tag">Tag: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_tag"
|
|
name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_tag"
|
|
value="[% tgt_component.tag | html %]"
|
|
size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_subfields">Subfields: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_subfields"
|
|
name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_subfields"
|
|
value="[% tgt_component.subfields | html %]"
|
|
size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_offset">Offset: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_offset"
|
|
name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_offset"
|
|
value="[% tgt_component.offset | html %]"
|
|
size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_length">Length: </label>
|
|
<input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_length"
|
|
name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_length"
|
|
value="[% tgt_component.length | html %]"
|
|
size="5" maxlength="5" />
|
|
</li>
|
|
[% FOREACH norm IN tgt_component.norms %]
|
|
<li id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_n_[% norm.norm_num | html %]">
|
|
<label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_n_[% norm.norm_num | html %]_norm">Normalization rule: </label>
|
|
[%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
|
|
[% 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" %]
|
|
</li>
|
|
[% END %]
|
|
</ol>
|
|
</fieldset>
|
|
[% END %]
|
|
</fieldset>
|
|
<br style="clear:both;" />
|
|
</div>
|
|
[% END %]
|
|
[% ELSE %]
|
|
<div id="mc_1" class="matchgroup">
|
|
<fieldset class="rows">
|
|
<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>
|
|
<input type="hidden" id="mc_1_id" name="mc_1_id" value="1" />
|
|
<fieldset class="rows" id="mc_1_src_c_1">
|
|
<legend>Source (incoming) record check field</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mc_1_src_c_1_tag">Tag: </label>
|
|
<input type="text" id="mc_1_src_c_1_tag" name="mc_1_src_c_1_tag" size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_1_src_c_1_subfields">Subfields: </label>
|
|
<input type="text" id="mc_1_src_c_1_subfields" name="mc_1_src_c_1_subfields" size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_1_src_c_1_offset">Offset: </label>
|
|
<input type="text" id="mc_1_src_c_1_offset" name="mc_1_src_c_1_offset" size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_1_src_c_1_length">Length: </label>
|
|
<input type="text" id="mc_1_src_c_1_length" name="mc_1_src_c_1_length" size="5" maxlength="5" />
|
|
</li>
|
|
<li id="mc_1_src_c_1_n_1">
|
|
<label for="mc_1_src_c_1_n_1_norm">Normalization rule: </label>
|
|
[% PROCESS norms_select selected_norm="none" id="mc_1_src_c_1_n_1_norm" name="mc_1_src_c_1_n_1_norm" %]
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
|
|
<fieldset class="rows" id="mc_1_tgt_c_1">
|
|
<legend>Target (database) record check field</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mc_1_tgt_c_1_tag">Tag: </label>
|
|
<input type="text" id="mc_1_tgt_c_1_tag" name="mc_1_tgt_c_1_tag" size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_1_tgt_c_1_subfields">Subfields: </label>
|
|
<input type="text" id="mc_1_tgt_c_1_subfields" name="mc_1_tgt_c_1_subfields" size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_1_tgt_c_1_offset">Offset: </label>
|
|
<input type="text" id="mc_1_tgt_c_1_offset" name="mc_1_tgt_c_1_offset" size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_1_tgt_c_1_length">Length: </label>
|
|
<input type="text" id="mc_1_tgt_c_1_length" name="mc_1_tgt_c_1_length" size="5" maxlength="5" />
|
|
</li>
|
|
<li id="mc_1_tgt_c_1_n_1">
|
|
<label for="mc_1_tgt_c_1_n_1_norm">Normalization rule: </label>
|
|
[% PROCESS norms_select selected_norm="none" id="mc_1_tgt_c_1_n_1_norm" name="mc_1_tgt_c_1_n_1_norm" %]
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
</fieldset>
|
|
<br style="clear:both;" />
|
|
</div>
|
|
[% END %]
|
|
</fieldset>
|
|
<fieldset class="action">
|
|
[% IF ( edit_matching_rule ) %]
|
|
<input type="button" value="Save"
|
|
onclick="CheckMatchingRuleForm(this.form)" />
|
|
[% ELSE %]
|
|
<input type="button" value="Save"
|
|
onclick="CheckMatchingRuleForm(this.form)" />
|
|
[% END %]
|
|
<a class="cancel" href="/cgi-bin/koha/admin/matching-rules.pl">Cancel</a>
|
|
</fieldset>
|
|
</form>
|
|
[% END %]
|
|
|
|
[% IF ( delete_matching_rule_form ) %]
|
|
<div class="dialog alert">
|
|
<h3>Confirm deletion of record matching rule <span class="ex">'[% code | html %]' ([% description | html %])</span>?</h3>
|
|
<form action="[% script_name | html %]" name="Aform" method="post">
|
|
<input type="hidden" name="op" value="[% confirm_op | html %]" />
|
|
<input type="hidden" name="matcher_id" value="[% matcher_id | html %]" />
|
|
<button type="submit" class="approve"><i class="fa fa-fw fa-check"></i> Yes, delete record matching rule</button>
|
|
</form>
|
|
<form action="[% script_name | html %]" method="get">
|
|
<button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> No, do not delete</button>
|
|
</form>
|
|
</div>
|
|
[% END %]
|
|
|
|
[% IF ( display_list ) %]
|
|
|
|
<div id="toolbar" class="btn-toolbar">
|
|
<a class="btn btn-default" id="newrule" href="[% script_name | url %]?op=add_matching_rule"><i class="fa fa-plus"></i> New record matching rule</a>
|
|
</div>
|
|
|
|
<h2>Record matching rules</h2>
|
|
[% IF ( added_matching_rule ) %]
|
|
<div class="dialog message">Added record matching rule "[% added_matching_rule | html %]"</div>
|
|
[% END %]
|
|
[% IF ( edited_matching_rule ) %]
|
|
<div class="dialog message">Modified record matching rule "[% edited_matching_rule | html %]"</div>
|
|
[% END %]
|
|
[% IF ( deleted_matching_rule ) %]
|
|
<div class="dialog message">Deleted record matching rule "[% deleted_matching_rule | html %]"</div>
|
|
[% END %]
|
|
[% IF ( available_matching_rules ) %]<table>
|
|
<tr>
|
|
<th>#</th>
|
|
<th>Code</th>
|
|
<th>Description</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
[% FOREACH available_matching_rule IN available_matching_rules %]
|
|
<tr>
|
|
<td>[% available_matching_rule.matcher_id | html %]</td>
|
|
<td>[% available_matching_rule.code | html %]</td>
|
|
<td>[% available_matching_rule.description | html %]</td>
|
|
<td class="actions">
|
|
<a class="btn btn-default btn-xs" href="[% available_matching_rule.script_name | url %]?op=edit_matching_rule&matcher_id=[% available_matching_rule.matcher_id | uri %]"><i class="fa fa-pencil"></i> Edit</a>
|
|
<a class="btn btn-default btn-xs" href="[% available_matching_rule.script_name | url %]?op=delete_matching_rule&matcher_id=[% available_matching_rule.matcher_id | uri %]"><i class="fa fa-trash"></i> Delete</a>
|
|
</td>
|
|
</tr>
|
|
[% END %]
|
|
</table>[% ELSE %]<p>There are no saved matching rules.</p>[% END %]
|
|
|
|
<div class="pages">[% pagination_bar | $raw %]</div>
|
|
|
|
[% END %]
|
|
[% IF ( matching_rule_form ) %]
|
|
<div id="mp_template" class="matchgroup" style="display:none;">
|
|
<fieldset class="rows">
|
|
<legend>Match point <span class="counter"></span> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mp_num_search_index">Search index: </label>
|
|
<input type ="text" id="mp_num_search_index" name="mp_num_search_index" size="20"
|
|
maxlength="30" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_num_score">Score: </label>
|
|
<input type ="text" id="mp_num_score" name="mp_num_score" size="5" maxlength="5" />
|
|
</li>
|
|
</ol>
|
|
<fieldset id="mp_num_c_1" class="rows">
|
|
<legend>Matchpoint components</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mp_num_c_1_tag">Tag: </label>
|
|
<input type="text" id="mp_num_c_1_tag" name="mp_num_c_1_tag" size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_num_c_1_subfields">Subfields: </label>
|
|
<input type="text" id="mp_num_c_1_subfields" name="mp_num_c_1_subfields" size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_num_c_1_offset">Offset: </label>
|
|
<input type="text" id="mp_num_c_1_offset" name="mp_num_c_1_offset" size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mp_num_c_1_length">Length: </label>
|
|
<input type="text" id="mp_num_c_1_length" name="mp_num_c_1_length" size="5" maxlength="5" />
|
|
</li>
|
|
<li id="mp_num_c_1_n_1">
|
|
<label for="mp_num_c_1_n_1_norm">Normalization rule: </label>
|
|
[% PROCESS norms_select selected_norm="none" id="mp_num_c_1_n_1_norm" name="mp_num_c_1_n_1_norm" %]
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
</fieldset>
|
|
<br style="clear:both;" />
|
|
</div>
|
|
|
|
<div id="mc_template" class="matchgroup" style="display:none">
|
|
<fieldset class="rows">
|
|
<legend>Match check <span class="counter"></span> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
|
|
<input type="hidden" id="mc_num_id" name="mc_num_id" value="1" />
|
|
<fieldset class="rows" id="mc_num_src_c_1">
|
|
<legend>Source (incoming) record check field</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mc_num_src_c_1_tag">Tag: </label>
|
|
<input type="text" id="mc_num_src_c_1_tag" name="mc_num_src_c_1_tag" size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_num_src_c_1_subfields">Subfields: </label>
|
|
<input type="text" id="mc_num_src_c_1_subfields" name="mc_num_src_c_1_subfields" size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_num_src_c_1_offset">Offset: </label>
|
|
<input type="text" id="mc_num_src_c_1_offset" name="mc_num_src_c_1_offset" size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_num_src_c_1_length">Length: </label>
|
|
<input type="text" id="mc_num_src_c_1_length" name="mc_num_src_c_1_length" size="5" maxlength="5" />
|
|
</li>
|
|
<li id="mc_num_src_c_1_n_1">
|
|
<label for="mc_num_src_c_1_n_1_norm">Normalization rule: </label>
|
|
[% PROCESS norms_select selected_norm="none" id="mc_num_src_c_1_n_1_norm" name="mc_num_src_c_1_n_1_norm" %]
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
<fieldset class="rows" id="mc_num_tgt_c_1">
|
|
<legend>Target (database) record check field</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="mc_num_tgt_c_1_tag">Tag: </label>
|
|
<input type="text" id="mc_num_tgt_c_1_tag" name="mc_num_tgt_c_1_tag" size="3" maxlength="3" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_num_tgt_c_1_subfields">Subfields: </label>
|
|
<input type="text" id="mc_num_tgt_c_1_subfields" name="mc_num_tgt_c_1_subfields" size="10" maxlength="40" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_num_tgt_c_1_offset">Offset: </label>
|
|
<input type="text" id="mc_num_tgt_c_1_offset" name="mc_num_tgt_c_1_offset" size="5" maxlength="5" />
|
|
</li>
|
|
<li>
|
|
<label for="mc_num_tgt_c_1_length">Length: </label>
|
|
<input type="text" id="mc_num_tgt_c_1_length" name="mc_num_tgt_c_1_length" size="5" maxlength="5" />
|
|
</li>
|
|
<li id="mc_num_tgt_c_1_n_1">
|
|
<label for="mc_num_tgt_c_1_n_1_norm">Normalization rule: </label>
|
|
[% PROCESS norms_select selected_norm="none" id="mc_num_tgt_c_1_n_1_norm" name="mc_num_tgt_c_1_n_1_norm" %]
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
</fieldset>
|
|
<br style="clear:both;" />
|
|
</div>
|
|
[% END %]
|
|
|
|
</main>
|
|
</div> <!-- /.col-sm-10.col-sm-push-2 -->
|
|
|
|
<div class="col-sm-2 col-sm-pull-10">
|
|
<aside>
|
|
[% INCLUDE 'admin-menu.inc' %]
|
|
</aside>
|
|
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
|
|
</div> <!-- /.row -->
|
|
|
|
[% MACRO jsinclude BLOCK %]
|
|
[% Asset.js("js/admin-menu.js") | $raw %]
|
|
<script>
|
|
var maxMatchPoint = [% max_matchpoint | html %];
|
|
var maxMatchCheck = [% max_matchcheck | html %];
|
|
|
|
function InsertMatchpoint(loc, index) {
|
|
var original= $("#"+index);
|
|
var clone = original.clone();
|
|
clone.show();
|
|
|
|
// update IDs and form names
|
|
maxMatchPoint++;
|
|
clone.attr('id', 'mp_' + maxMatchPoint);
|
|
$("span.counter",clone).html(maxMatchPoint);
|
|
$("label",clone).each(function(){
|
|
var s = $(this).attr("for");
|
|
if (s.match(/mp_num/)) {
|
|
$(this).attr("for",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
|
|
}
|
|
});
|
|
|
|
$("div",clone).each(function(){
|
|
var s = $(this).attr("id");
|
|
if (s.match(/mp_num/)) {
|
|
$(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
|
|
}
|
|
});
|
|
$("input",clone).each(function(){
|
|
var s = $(this).attr("id");
|
|
if(s.match(/mp_num/)){
|
|
$(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
|
|
}
|
|
|
|
var s = $(this).attr("name");
|
|
if(s.match(/mp_num/)){
|
|
$(this).attr("name",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
|
|
}
|
|
});
|
|
$("#match_points").append(clone);
|
|
}
|
|
|
|
function InsertMatchcheck(loc, index) {
|
|
var original= $("#"+index);
|
|
var clone = original.clone();
|
|
clone.show();
|
|
|
|
// update IDs and form names
|
|
maxMatchCheck++;
|
|
clone.attr('id', 'mc_' + maxMatchCheck);
|
|
$("span.counter",clone).html(maxMatchCheck);
|
|
$("label",clone).each(function(){
|
|
var s = $(this).attr("for");
|
|
if (s.match(/mc_num/)) {
|
|
$(this).attr("for",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
|
|
}
|
|
});
|
|
|
|
$("div",clone).each(function(){
|
|
var s = $(this).attr("id");
|
|
if (s.match(/mc_num/)) {
|
|
$(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
|
|
}
|
|
});
|
|
$("input",clone).each(function(){
|
|
var s = $(this).attr("id");
|
|
if(s.match(/mc_num/)){
|
|
$(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
|
|
}
|
|
|
|
var s = $(this).attr("name");
|
|
if(s.match(/mc_num/)){
|
|
$(this).attr("name",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
|
|
}
|
|
});
|
|
$("#match_checks").append(clone);
|
|
}
|
|
|
|
function DeleteMatchpoint(loc) {
|
|
$(loc).parent().parent().parent().remove();
|
|
if($(".matchgroup",$("#match_points")).length == 0){
|
|
maxMatchPoint = 0;
|
|
$("#addMatchPoint").show();
|
|
}
|
|
}
|
|
|
|
function DeleteMatchcheck(loc) {
|
|
$(loc).parent().parent().parent().remove();
|
|
if($(".matchgroup",$("#match_checks")).length == 0){
|
|
maxMatchCheck = 0;
|
|
$("#addMatchCheck").show();
|
|
}
|
|
}
|
|
|
|
function DoCancel(f) {
|
|
f.op.value='';
|
|
document.Aform.submit();
|
|
}
|
|
|
|
function CheckMatchingRuleForm(f) {
|
|
var ok=1;
|
|
var _alertString="";
|
|
var alertString2;
|
|
if (f.code.value.length==0) {
|
|
_alertString += "\n- " + _("Matching rule code missing");
|
|
}
|
|
if (f.description.value.length==0) {
|
|
_alertString += "\n- " + _("Description missing");
|
|
}
|
|
if (f.threshold.value.length==0) {
|
|
_alertString += "\n- " + _("Threshold missing");
|
|
}
|
|
if (_alertString.length==0) {
|
|
document.Aform.submit();
|
|
} else {
|
|
alertString2 = _("Form not submitted because of the following problem(s)");
|
|
alertString2 += "\n------------------------------------------------------------------------------------\n";
|
|
alertString2 += _alertString;
|
|
alert(alertString2);
|
|
}
|
|
}
|
|
|
|
function CheckRuleForm(f) {
|
|
var ok=1;
|
|
var _alertString="";
|
|
var alertString2;
|
|
if (f.sort_rule.value.length==0) {
|
|
_alertString += "\n- " + _("Filing rule code missing");
|
|
}
|
|
if (f.description.value.length==0) {
|
|
_alertString += "\n- " + _("Description missing");
|
|
}
|
|
if (f.sort_routine.value.length==0) {
|
|
_alertString += "\n- " + _("Sort routine missing");
|
|
}
|
|
if (_alertString.length==0) {
|
|
document.Aform.submit();
|
|
} else {
|
|
alertString2 = _("Form not submitted because of the following problem(s)");
|
|
alertString2 += "\n------------------------------------------------------------------------------------\n";
|
|
alertString2 += _alertString;
|
|
alert(alertString2);
|
|
}
|
|
}
|
|
</script>
|
|
[% END %]
|
|
[% INCLUDE 'intranet-bottom.inc' %]
|