From 031604f59bc92d68a0cc439d4ddc8b6d9a9660f4 Mon Sep 17 00:00:00 2001 From: Joachim Ganseman Date: Sat, 4 Jun 2016 12:58:36 +0000 Subject: [PATCH] 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 Signed-off-by: Nick Clemens Signed-off-by: Marcel de Rooy Signed-off-by: Jonathan Druart --- C4/Biblio.pm | 8 ++++-- admin/marctagstructure.pl | 28 ++++++++++++++----- cataloguing/addbiblio.pl | 4 +-- .../bug_9701-add_default_indicators.sql | 3 ++ installer/data/mysql/kohastructure.sql | 2 ++ .../prog/en/modules/admin/marctagstructure.tt | 12 ++++++++ 6 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_9701-add_default_indicators.sql diff --git a/C4/Biblio.pm b/C4/Biblio.pm index f68853481c..eaff2564b6 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -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( diff --git a/admin/marctagstructure.pl b/admin/marctagstructure.pl index 3ca143b000..43de4fb4ae 100755 --- a/admin/marctagstructure.pl +++ b/admin/marctagstructure.pl @@ -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&tagfield=".$results[$i]->{'mts_tagfield'}."&frameworkcode=".$frameworkcode; $row_data{edit} = "$script_name?op=add_form&searchfield=" .$results[$i]->{'mts_tagfield'}."&frameworkcode=".$frameworkcode; $row_data{delete} = "$script_name?op=delete_confirm&searchfield=" .$results[$i]->{'mts_tagfield'}."&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'}."&frameworkcode=".$frameworkcode; $row_data{edit} = "$script_name?op=add_form&searchfield=" .$results->[$i]{'tagfield'}."&frameworkcode=".$frameworkcode; $row_data{delete} = "$script_name?op=delete_confirm&searchfield=".$results->[$i]{'tagfield'}."&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=? diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 4ecaf69e21..0f40ecd18f 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -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, diff --git a/installer/data/mysql/atomicupdate/bug_9701-add_default_indicators.sql b/installer/data/mysql/atomicupdate/bug_9701-add_default_indicators.sql new file mode 100644 index 0000000000..7cccd91fad --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_9701-add_default_indicators.sql @@ -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; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 52f0922967..6842eb580c 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -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; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marctagstructure.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marctagstructure.tt index f4d8023da1..366e99e78b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marctagstructure.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marctagstructure.tt @@ -79,6 +79,12 @@ [% END %] +
  • + +
  • +
  • + +