Owen Leonard
a344b8cf8c
This patch makes a number of changes in order to improve the way the staff client's header menu adjusts at narrower browser widths: - Updated version of Bootstrap 3.3.7 which includes the "collapse" JavaScript plugin. - Modified default Bootstrap CSS using Bootstrap's customization tool. These changes facilitate the removal of some custom CSS (overriding Bootstrap) from staff-global.scss. - Added Bootstrap config file for loading customizations at https://getbootstrap.com/docs/3.3/customize/ - Revised button classes for buttons in Bootstrap-styled toolbars. The modified default CSS resets the base font size in Bootstrap to better match our global CSS. A side-effect of this is that toolbar buttons ended up looking smaller than they should. Changing the button class solves this. - Restructure the header menu in order to allow different rules to govern the appearance of the navigational part of the menu (Circulation, Search, etc) and the user menu (Set library, My account, Log out). - Modify the cart JS to so that the popup works well at narrow widths. To test, apply the patch, regenerate the staff client CSS, and clear your browser cache. - Log in to the staff client and observe the layout of the header menu as you adjust the browser to various widths. - Confirm that sections of the menu "collapse" as the window gets narrower. - Confirm that dropdown menus behave correctly and that links work. - Confirm that the Cart link works as expected when the cart empty and when it has items. - Install and enable multiple translations, including at least one set of sub-languages (e.g. fr-FR and fr-CA). - Test the appearance of the language menus in the footer at various browser widths. - View pages with button toolbars and confirm that they appear unchanged (e.g. biblio detail page, patron detail page). NOTE: While this patch is intended to make improvements to staff client responsiveness, it does so within a limited scope. There are still many pages which do not work well at narrower browser widths. Signed-off-by: Hayley Mapley <hayleymapley@catalyst.net.nz> Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
731 lines
34 KiB
Text
731 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 %][% 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' %]
|