Bug 9701: Configure default indicator

This patch adds the possibility to define default indicators in
the MARC frameworks. It adds 2 columns in the marc_tag_structure table in
the database in order to accomplish this. All files that reference this
table have also been updated to reflect these added fields.

Test: Add or edit a MARC framework. In the Field list should be 2 extra
columns. It should be possible to add default indicators (1 character)
    in these fields. Nothing else should have changed in the meantime.
    The default indicator values are not yet visible in the cataloguing module.

The default values are also loaded in the cataloguing form.

Test: Define default values in some MARC framework. Go to cataloguing
and create a new record using this framework. Verify that the defined
defaults are visible when set. Verify the default is empty (as before)
    if no default was set. Verify that if the default is changed, the
    record is saved with the manually changed value. Verify that upon
    changing such a new record, the manually set indicator value is used
    and not the default one from the framework.

Don't forget to run database and database schema update

Signed-off-by: Eugene Jose Espinoza <eugenegf@yahoo.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Joachim Ganseman 2016-06-04 12:58:36 +00:00 committed by Jonathan Druart
parent 8012cc5ebd
commit 031604f59b
6 changed files with 45 additions and 12 deletions

View File

@ -906,19 +906,21 @@ sub GetMarcStructure {
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(
"SELECT tagfield,liblibrarian,libopac,mandatory,repeatable
"SELECT tagfield,liblibrarian,libopac,mandatory,repeatable,ind1_defaultvalue,ind2_defaultvalue
FROM marc_tag_structure
WHERE frameworkcode=?
ORDER BY tagfield"
);
$sth->execute($frameworkcode);
my ( $liblibrarian, $libopac, $tag, $res, $tab, $mandatory, $repeatable );
my ( $liblibrarian, $libopac, $tag, $res, $tab, $mandatory, $repeatable, $ind1_defaultvalue, $ind2_defaultvalue );
while ( ( $tag, $liblibrarian, $libopac, $mandatory, $repeatable ) = $sth->fetchrow ) {
while ( ( $tag, $liblibrarian, $libopac, $mandatory, $repeatable, $ind1_defaultvalue, $ind2_defaultvalue ) = $sth->fetchrow ) {
$res->{$tag}->{lib} = ( $forlibrarian or !$libopac ) ? $liblibrarian : $libopac;
$res->{$tag}->{tab} = "";
$res->{$tag}->{mandatory} = $mandatory;
$res->{$tag}->{repeatable} = $repeatable;
$res->{$tag}->{ind1_defaultvalue} = $ind1_defaultvalue;
$res->{$tag}->{ind2_defaultvalue} = $ind2_defaultvalue;
}
$sth = $dbh->prepare(

View File

@ -89,7 +89,7 @@ if ($op eq 'add_form') {
#---- if primkey exists, it's a modify action, so read values to modify...
my $data;
if ($searchfield) {
$sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from marc_tag_structure where tagfield=? and frameworkcode=?");
$sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,ind1_defaultvalue,ind2_defaultvalue from marc_tag_structure where tagfield=? and frameworkcode=?");
$sth->execute($searchfield,$frameworkcode);
$data=$sth->fetchrow_hashref;
}
@ -108,6 +108,8 @@ if ($op eq 'add_form') {
repeatable => $data->{'repeatable'},
mandatory => $data->{'mandatory'},
authorised_value => $data->{authorised_value},
ind1_defaultvalue => $data->{'ind1_defaultvalue'},
ind2_defaultvalue => $data->{'ind2_defaultvalue'},
frameworkcode => $frameworkcode,
); # FIXME: move checkboxes to presentation layer
# END $OP eq ADD_FORM
@ -120,21 +122,25 @@ if ($op eq 'add_form') {
my $repeatable = $input->param('repeatable') ? 1 : 0;
my $mandatory = $input->param('mandatory') ? 1 : 0;
my $authorised_value = $input->param('authorised_value');
my $ind1_defaultvalue = $input->param('ind1_defaultvalue');
my $ind2_defaultvalue = $input->param('ind2_defaultvalue');
if ($input->param('modif')) {
$sth = $dbh->prepare(
"UPDATE marc_tag_structure SET liblibrarian=? ,libopac=? ,repeatable=? ,mandatory=? ,authorised_value=? WHERE frameworkcode=? AND tagfield=?"
"UPDATE marc_tag_structure SET liblibrarian=? ,libopac=? ,repeatable=? ,mandatory=? ,authorised_value=?, ind1_defaultvalue=?, ind2_defaultvalue=? WHERE frameworkcode=? AND tagfield=?"
);
$sth->execute( $liblibrarian,
$libopac,
$repeatable,
$mandatory,
$authorised_value,
$ind1_defaultvalue,
$ind2_defaultvalue,
$frameworkcode,
$tagfield
);
} else {
$sth = $dbh->prepare(
"INSERT INTO marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,frameworkcode) values (?,?,?,?,?,?,?)"
"INSERT INTO marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,ind1_defaultvalue,ind2_defaultvalue,frameworkcode) values (?,?,?,?,?,?,?,?,?)"
);
$sth->execute($tagfield,
$liblibrarian,
@ -142,6 +148,8 @@ if ($op eq 'add_form') {
$repeatable,
$mandatory,
$authorised_value,
$ind1_defaultvalue,
$ind2_defaultvalue,
$frameworkcode
);
}
@ -155,7 +163,7 @@ if ($op eq 'add_form') {
################## DELETE_CONFIRM ##################################
# called by default form, used to confirm deletion of data in DB
} elsif ($op eq 'delete_confirm') {
$sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from marc_tag_structure where tagfield=? and frameworkcode=?");
$sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,ind1_defaultvalue,ind2_defaultvalue from marc_tag_structure where tagfield=? and frameworkcode=?");
$sth->execute($searchfield, $frameworkcode);
my $data = $sth->fetchrow_hashref;
$template->param(
@ -215,6 +223,8 @@ if ($op eq 'add_form') {
marc_tag_structure.repeatable as mts_repeatable,
marc_tag_structure.mandatory as mts_mandatory,
marc_tag_structure.authorised_value as mts_authorized_value,
marc_tag_structure.ind1_defaultvalue as mts_ind1_defaultvalue,
marc_tag_structure.ind1_defaultvalue as mts_ind2_defaultvalue,
marc_subfield_structure.*
FROM marc_tag_structure
LEFT JOIN marc_subfield_structure ON (marc_tag_structure.tagfield=marc_subfield_structure.tagfield AND marc_tag_structure.frameworkcode=marc_subfield_structure.frameworkcode) WHERE (marc_tag_structure.tagfield >= ? and marc_tag_structure.frameworkcode=?) AND marc_subfield_structure.tab>=0 ORDER BY marc_tag_structure.tagfield,marc_subfield_structure.tagsubfield");
@ -236,6 +246,8 @@ if ($op eq 'add_form') {
$row_data{repeatable} = $results[$i]->{'mts_repeatable'};
$row_data{mandatory} = $results[$i]->{'mts_mandatory'};
$row_data{authorised_value} = $results[$i]->{'mts_authorised_value'};
$row_data{ind1_defaultvalue} = $results[$i]->{'mts_ind1_defaultvalue'};
$row_data{ind2_defaultvalue} = $results[$i]->{'mts_ind2_defaultvalue'};
$row_data{subfield_link} = "marc_subfields_structure.pl?op=add_form&amp;tagfield=".$results[$i]->{'mts_tagfield'}."&amp;frameworkcode=".$frameworkcode;
$row_data{edit} = "$script_name?op=add_form&amp;searchfield=" .$results[$i]->{'mts_tagfield'}."&amp;frameworkcode=".$frameworkcode;
$row_data{delete} = "$script_name?op=delete_confirm&amp;searchfield=" .$results[$i]->{'mts_tagfield'}."&amp;frameworkcode=".$frameworkcode;
@ -281,6 +293,8 @@ if ($op eq 'add_form') {
$row_data{repeatable} = $results->[$i]{'repeatable'};
$row_data{mandatory} = $results->[$i]{'mandatory'};
$row_data{authorised_value} = $results->[$i]{'authorised_value'};
$row_data{ind1_defaultvalue} = $results->[$i]{'ind1_defaultvalue'};
$row_data{ind2_defaultvalue} = $results->[$i]{'ind2_defaultvalue'};
$row_data{subfield_link} = "marc_subfields_structure.pl?tagfield=" .$results->[$i]{'tagfield'}."&amp;frameworkcode=".$frameworkcode;
$row_data{edit} = "$script_name?op=add_form&amp;searchfield=" .$results->[$i]{'tagfield'}."&amp;frameworkcode=".$frameworkcode;
$row_data{delete} = "$script_name?op=delete_confirm&amp;searchfield=".$results->[$i]{'tagfield'}."&amp;frameworkcode=".$frameworkcode;
@ -313,7 +327,7 @@ output_html_with_http_headers $input, $cookie, $template->output;
sub StringSearch {
my ($searchstring,$frameworkcode)=@_;
my $sth = C4::Context->dbh->prepare("
SELECT tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value
SELECT tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,ind1_defaultvalue,ind2_defaultvalue
FROM marc_tag_structure
WHERE (tagfield >= ? and frameworkcode=?)
ORDER BY tagfield
@ -329,8 +343,8 @@ sub StringSearch {
sub duplicate_framework {
my ($newframeworkcode,$oldframeworkcode) = @_;
my $dbh = C4::Context->dbh;
$dbh->do(q|INSERT INTO marc_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, frameworkcode)
SELECT tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value, ? from marc_tag_structure where frameworkcode=?|, undef, $newframeworkcode, $oldframeworkcode );
$dbh->do(q|INSERT INTO marc_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, ind1_defaultvalue, ind2_defaultvalue, frameworkcode)
SELECT tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value, ind1_defaultvalue, ind2_defaultvalue, ? from marc_tag_structure where frameworkcode=?|, undef, $newframeworkcode, $oldframeworkcode );
$dbh->do(q|INSERT INTO marc_subfield_structure (frameworkcode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso,hidden)
SELECT ?,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso,hidden from marc_subfield_structure where frameworkcode=?

View File

@ -657,8 +657,8 @@ sub build_tabs {
tag_lib => $tagslib->{$tag}->{lib},
repeatable => $tagslib->{$tag}->{repeatable},
mandatory => $tagslib->{$tag}->{mandatory},
indicator1 => $indicator1,
indicator2 => $indicator2,
indicator1 => ( $indicator1 || $tagslib->{$tag}->{ind1_defaultvalue} ), #if not set, try to load the default value
indicator2 => ( $indicator2 || $tagslib->{$tag}->{ind2_defaultvalue} ), #use short-circuit operator for efficiency
subfield_loop => \@subfields_data,
tagfirstsubfield => $subfields_data[0],
fixedfield => $tag < 10?1:0,

View File

@ -0,0 +1,3 @@
ALTER TABLE marc_tag_structure
ADD COLUMN ind2_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorised_value,
ADD COLUMN ind1_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorised_value;

View File

@ -1141,6 +1141,8 @@ CREATE TABLE `marc_tag_structure` (
`repeatable` tinyint(4) NOT NULL default 0,
`mandatory` tinyint(4) NOT NULL default 0,
`authorised_value` varchar(10) default NULL,
`ind1_defaultvalue` varchar(1) NOT NULL default '',
`ind2_defaultvalue` varchar(1) NOT NULL default '',
`frameworkcode` varchar(4) NOT NULL default '',
PRIMARY KEY (`frameworkcode`,`tagfield`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

View File

@ -79,6 +79,12 @@
<input type="checkbox" name="mandatory" id="mandatory" value="1" />
[% END %]
</li>
<li><label for="ind1_defaultvalue">First indicator default value: </label>
<input id="ind1_defaultvalue" type="text" name="ind1_defaultvalue" value="[% ind1_defaultvalue |html %]" maxlength="1" size="1" />
</li>
<li><label for="ind2_defaultvalue">Second indicator default value: </label>
<input id="ind2_defaultvalue" type="text" name="ind2_defaultvalue" value="[% ind2_defaultvalue |html %]" maxlength="1" size="1" />
</li>
<li><label for="authorised_value">Authorized value: </label>
<select name="authorised_value" id="authorised_value" size="1">
<option value=""></option>
@ -170,6 +176,8 @@
<th>Repeatable</th>
<th>Mandatory</th>
<th>Auth value</th>
<th>Indicator 1</th>
<th>Indicator 2</th>
<th>&nbsp;</th>
</tr>
</thead>
@ -190,6 +198,8 @@
<td>[% IF ( loo.repeatable ) %]Yes[% ELSE %]No[% END %]</td>
<td>[% IF ( loo.mandatory ) %]Yes[% ELSE %]No[% END %]</td>
<td>[% loo.authorised_value %]</td>
<td>[% loo.ind1_defaultvalue %]</td>
<td>[% loo.ind2_defaultvalue %]</td>
<td>
<div class="dropdown">
<a class="btn btn-default btn-xs dropdown-toggle" id="marctagactions[% loo.tagfield %]" role="button" data-toggle="dropdown" href="#">
@ -211,6 +221,8 @@
<td>[% IF ( loo.repeatable ) %]Yes[% ELSE %]No[% END %]</td>
<td>[% IF ( loo.mandatory ) %]Yes[% ELSE %]No[% END %]</td>
<td>[% loo.authorised_value %]</td>
<td>[% loo.ind1_defaultvalue %]</td>
<td>[% loo.ind2_defaultvalue %]</td>
<td>
<div class="dropdown">
<a class="btn btn-default btn-xs dropdown-toggle" id="marctagactions[% loo.tagfield %]" role="button" data-toggle="dropdown" href="#">