From 62e483b0b21d1f2a9ae49ab94a5b1a169d2e36b0 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 partial patch adds the possibility to define default indicators in the MARC frameworks. It does NOT yet load those defaults in the cataloguing form. 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. --- C4/Biblio.pm | 8 +++-- admin/marctagstructure.pl | 36 ++++++++++++++------ installer/data/mysql/kohastructure.sql | 2 ++ installer/data/mysql/updatedatabase.pl | 12 +++++++ .../prog/en/modules/admin/marctagstructure.tt | 12 +++++++ 5 files changed, 56 insertions(+), 14 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index ae1f2f3..edd1a6c 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1129,19 +1129,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 7728687..2e79b0f 100755 --- a/admin/marctagstructure.pl +++ b/admin/marctagstructure.pl @@ -98,7 +98,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; } @@ -121,9 +121,11 @@ if ($op eq 'add_form') { $template->param('use_heading_flags_p' => 1); $template->param(liblibrarian => $data->{'liblibrarian'}, libopac => $data->{'libopac'}, - repeatable => $data->{'repeatable'}, - mandatory => $data->{'mandatory'}, + repeatable => $data->{'repeatable'}, + mandatory => $data->{'mandatory'}, authorised_value => $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 @@ -136,22 +138,26 @@ 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'); unless (C4::Context->config('demo')) { 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, @@ -159,6 +165,8 @@ if ($op eq 'add_form') { $repeatable, $mandatory, $authorised_value, + $ind1_defaultvalue, + $ind2_defaultvalue, $frameworkcode ); } @@ -171,7 +179,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( @@ -232,6 +240,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"); @@ -253,6 +263,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; @@ -292,6 +304,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; @@ -324,7 +338,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 @@ -340,11 +354,11 @@ sub StringSearch { sub duplicate_framework { my ($newframeworkcode,$oldframeworkcode) = @_; my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from marc_tag_structure where frameworkcode=?"); + my $sth = $dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value,ind1_defaultvalue,ind2_defaulvalue from marc_tag_structure where frameworkcode=?"); $sth->execute($oldframeworkcode); - my $sth_insert = $dbh->prepare("insert into marc_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, frameworkcode) values (?,?,?,?,?,?,?)"); - while ( my ($tagfield,$liblibrarian,$libopac,$repeatable,$mandatory,$authorised_value) = $sth->fetchrow) { - $sth_insert->execute($tagfield,$liblibrarian,$libopac,$repeatable,$mandatory,$authorised_value,$newframeworkcode); + my $sth_insert = $dbh->prepare("insert into marc_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, ind1_defaultvalue, ind2_defaultvalue, frameworkcode) values (?,?,?,?,?,?,?,?,?)"); + while ( my ($tagfield,$liblibrarian,$libopac,$repeatable,$mandatory,$authorised_value,$ind1_defaultvalue,$ind2_defaultvalue) = $sth->fetchrow) { + $sth_insert->execute($tagfield,$liblibrarian,$libopac,$repeatable,$mandatory,$authorised_value,$ind1_defaultvalue,$ind2_defaultvalue,$newframeworkcode); } $sth = $dbh->prepare("select frameworkcode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,authorised_value,authtypecode,value_builder,seealso,hidden from marc_subfield_structure where frameworkcode=?"); diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index c5a3f4a..9c5ba33 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -1121,6 +1121,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=utf8 COLLATE=utf8_unicode_ci; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 657ba4e..f96692c 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -12614,6 +12614,18 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "16.06.00.002"; +if (CheckVersion($DBversion) ) { + $dbh->do(q{ + ALTER TABLE marc_tag_structure ADD COLUMN ind2_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorized_value; + }); + $dbh->do(q{ + ALTER TABLE marc_tag_structure ADD COLUMN ind1_defaultvalue VARCHAR(1) NOT NULL DEFAULT '' AFTER authorized_value; + }); + print "Upgrade to $DBversion done (Bug 9701 - Configure default indicator)" + SetVersion($DBversion) +} + # DEVELOPER PROCESS, search for anything to execute in the db_update directory # SEE bug 13068 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 1f0a5d8..e493495 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marctagstructure.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marctagstructure.tt @@ -93,6 +93,12 @@ $(document).ready(function() { [% END %] +
  • + +
  • +
  • + +