#
# This file is part of Koha.
#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-#use warnings; FIXME - Bug 2505
+use Modern::Perl;
use C4::Output;
use C4::Auth;
-use CGI;
+use CGI qw ( -utf8 );
use C4::Context;
+use Koha::Authority::Types;
+use Koha::AuthorisedValueCategories;
+
+use List::MoreUtils qw( uniq );
sub string_search {
my ( $searchstring, $frameworkcode ) = @_;
my $frameworkcode = $input->param('frameworkcode');
my $pkfield = "tagfield";
my $offset = $input->param('offset');
+$offset = 0 if not defined $offset or $offset < 0;
my $script_name = "/cgi-bin/koha/admin/marc_subfields_structure.pl";
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
{
- template_name => "admin/marc_subfields_structure.tmpl",
+ template_name => "admin/marc_subfields_structure.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
debug => 1,
}
);
+my $cache = Koha::Caches->get_instance();
-my $op = $input->param('op');
+my $op = $input->param('op') || "";
$tagfield =~ s/\,//g;
if ($op) {
################## ADD_FORM ##################################
# called by default. Used to create form to add or modify a record
if ( $op eq 'add_form' ) {
- my $data;
my $dbh = C4::Context->dbh;
- my $more_subfields = $input->param("more_subfields") + 1;
# builds kohafield tables
my @kohafields;
$sth2->finish;
$sth2 = $dbh->prepare("select distinct category from authorised_values");
$sth2->execute;
- my @authorised_values;
- push @authorised_values, "";
- while ( ( my $category ) = $sth2->fetchrow_array ) {
- push @authorised_values, $category;
- }
- push( @authorised_values, "branches" );
- push( @authorised_values, "itemtypes" );
- push( @authorised_values, "cn_source" );
+ my @av_cat = Koha::AuthorisedValueCategories->search;
+ my @authorised_values = map { $_->category_name } @av_cat;
# build thesaurus categories list
- $sth2->finish;
- $sth2 = $dbh->prepare("select authtypecode from auth_types");
- $sth2->execute;
- my @authtypes;
- push @authtypes, "";
- while ( ( my $authtypecode ) = $sth2->fetchrow_array ) {
- push @authtypes, $authtypecode;
- }
+ my @authtypes = uniq( "", map { $_->authtypecode } Koha::Authority::Types->search );
# build value_builder list
my @value_builder = ('');
# 2 cases here : on CVS install, $cgidir does not need a /cgi-bin
# on a standard install, /cgi-bin need to be added.
# test one, then the other
- my $cgidir = C4::Context->intranetdir . "/cgi-bin";
+ my $cgidir = C4::Context->config('intranetdir') . "/cgi-bin";
unless ( opendir( DIR, "$cgidir/cataloguing/value_builder" ) ) {
- $cgidir = C4::Context->intranetdir;
+ $cgidir = C4::Context->config('intranetdir');
opendir( DIR, "$cgidir/cataloguing/value_builder" )
|| die "can't opendir $cgidir/value_builder: $!";
}
while ( my $line = readdir(DIR) ) {
- if ( $line =~ /\.pl$/ ) {
+ if ( $line =~ /\.pl$/ &&
+ $line !~ /EXAMPLE\.pl$/ ) { # documentation purposes
push( @value_builder, $line );
}
}
$sth->execute( $tagfield, $frameworkcode );
my @loop_data = ();
my $i = 0;
- while ( $data = $sth->fetchrow_hashref ) {
+ while ( my $data = $sth->fetchrow_hashref ) {
my %row_data; # get a fresh hash for the row data
- $row_data{defaultvalue} = $data->{defaultvalue};
- $row_data{maxlength} = $data->{maxlength};
- $row_data{tab} = CGI::scrolling_list(
- -name => 'tab',
- -id => "tab$i",
- -values =>
- [ '-1', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ],
- -labels => {
- '-1' => 'ignore',
- '0' => '0',
- '1' => '1',
- '2' => '2',
- '3' => '3',
- '4' => '4',
- '5' => '5',
- '6' => '6',
- '7' => '7',
- '8' => '8',
- '9' => '9',
- '10' => 'items (10)',
- },
- -default => $data->{'tab'},
- -size => 1,
- -multiple => 0,
- );
- $row_data{tagsubfield} =
- $data->{'tagsubfield'}
- . "<input type=\"hidden\" name=\"tagsubfield\" value=\""
- . $data->{'tagsubfield'}
- . "\" id=\"tagsubfield\" />";
- $row_data{subfieldcode} = $data->{'tagsubfield'} eq '@'?'_':$data->{'tagsubfield'};
- $row_data{urisubfieldcode} = $row_data{subfieldcode} eq '%' ? 'pct' : $row_data{subfieldcode};
- $row_data{liblibrarian} = CGI::escapeHTML( $data->{'liblibrarian'} );
- $row_data{libopac} = CGI::escapeHTML( $data->{'libopac'} );
- $row_data{seealso} = CGI::escapeHTML( $data->{'seealso'} );
- $row_data{kohafield} = CGI::scrolling_list(
- -name => "kohafield",
- -id => "kohafield$i",
- -values => \@kohafields,
- -default => "$data->{'kohafield'}",
- -size => 1,
- -multiple => 0,
- );
- $row_data{authorised_value} = CGI::scrolling_list(
- -name => "authorised_value",
- -id => "authorised_value$i",
- -values => \@authorised_values,
- -default => $data->{'authorised_value'},
- -size => 1,
- -multiple => 0,
- );
- $row_data{value_builder} = CGI::scrolling_list(
- -name => "value_builder",
- -id => "value_builder$i",
- -values => \@value_builder,
- -default => $data->{'value_builder'},
- -size => 1,
- -multiple => 0,
- );
- $row_data{authtypes} = CGI::scrolling_list(
- -name => "authtypecode",
- -id => "authtypecode$i",
- -values => \@authtypes,
- -default => $data->{'authtypecode'},
- -size => 1,
- -multiple => 0,
- );
- $row_data{repeatable} = CGI::checkbox(
- -name => "repeatable$i",
- -checked => $data->{'repeatable'} ? 'checked' : '',
- -value => 1,
- -label => '',
- -id => "repeatable$i"
- );
- $row_data{mandatory} = CGI::checkbox(
- -name => "mandatory$i",
- -checked => $data->{'mandatory'} ? 'checked' : '',
- -value => 1,
- -label => '',
- -id => "mandatory$i"
- );
- $row_data{hidden} = CGI::escapeHTML( $data->{hidden} );
- $row_data{isurl} = CGI::checkbox(
- -name => "isurl$i",
- -id => "isurl$i",
- -checked => $data->{'isurl'} ? 'checked' : '',
- -value => 1,
- -label => ''
- );
- $row_data{row} = $i;
- $row_data{link} = CGI::escapeHTML( $data->{'link'} );
+ $row_data{defaultvalue} = $data->{defaultvalue};
+ $row_data{maxlength} = $data->{maxlength};
+ $row_data{tab} = $data->{tab};
+ $row_data{tagsubfield} = $data->{tagsubfield};
+ $row_data{subfieldcode} = $data->{'tagsubfield'} eq '@' ? '_' : $data->{'tagsubfield'};
+ $row_data{urisubfieldcode} = $row_data{subfieldcode} eq '%' ? 'pct' : $row_data{subfieldcode};
+ $row_data{liblibrarian} = $data->{'liblibrarian'};
+ $row_data{libopac} = $data->{'libopac'};
+ $row_data{seealso} = $data->{'seealso'};
+ $row_data{kohafields} = \@kohafields;
+ $row_data{kohafield} = $data->{kohafield};
+ $row_data{authorised_values} = \@authorised_values;
+ $row_data{authorised_value} = $data->{authorised_value};
+ $row_data{value_builders} = \@value_builder;
+ $row_data{value_builder} = $data->{'value_builder'};
+ $row_data{authtypes} = \@authtypes;
+ $row_data{authtypecode} = $data->{'authtypecode'};
+ $row_data{repeatable} = $data->{repeatable};
+ $row_data{mandatory} = $data->{mandatory};
+ $row_data{hidden} = $data->{hidden};
+ $row_data{isurl} = $data->{isurl};
+ $row_data{row} = $i;
+ $row_data{link} = $data->{'link'};
push( @loop_data, \%row_data );
$i++;
}
- # add more_subfields empty lines for add if needed
- my %row_data; # get a fresh hash for the row data
- $row_data{'new_subfield'} = 1;
- $row_data{'subfieldcode'} = '';
-
- $row_data{tab} = CGI::scrolling_list(
- -name => 'tab',
- -id => "tab$i",
- -values =>
- [ '-1', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ],
- -labels => {
- '-1' => 'ignore',
- '0' => '0',
- '1' => '1',
- '2' => '2',
- '3' => '3',
- '4' => '4',
- '5' => '5',
- '6' => '6',
- '7' => '7',
- '8' => '8',
- '9' => '9',
- '10' => 'items (10)',
- },
- -default => "",
- -size => 1,
- -multiple => 0,
- );
- $row_data{tagsubfield} =
- "<input type=\"text\" name=\"tagsubfield\" value=\""
- . $data->{'tagsubfield'}
- . "\" size=\"1\" id=\"tagsubfield\" maxlength=\"1\" />";
- $row_data{liblibrarian} = "";
- $row_data{libopac} = "";
- $row_data{seealso} = "";
- $row_data{kohafield} = CGI::scrolling_list(
- -name => 'kohafield',
- -id => "kohafield$i",
- -values => \@kohafields,
- -default => "",
- -size => 1,
- -multiple => 0,
- );
- $row_data{hidden} = "";
- $row_data{repeatable} = CGI::checkbox(
- -name => "repeatable$i",
- -id => "repeatable$i",
- -checked => '',
- -value => 1,
- -label => ''
- );
- $row_data{mandatory} = CGI::checkbox(
- -name => "mandatory$i",
- -id => "mandatory$i",
- -checked => '',
- -value => 1,
- -label => ''
- );
- $row_data{isurl} = CGI::checkbox(
- -name => "isurl$i",
- -id => "isurl$i",
- -checked => '',
- -value => 1,
- -label => ''
- );
- $row_data{value_builder} = CGI::scrolling_list(
- -name => "value_builder",
- -id => "value_builder$i",
- -values => \@value_builder,
- -default => $data->{'value_builder'},
- -size => 1,
- -multiple => 0,
- );
- $row_data{authorised_value} = CGI::scrolling_list(
- -name => "authorised_value",
- -id => "authorised_value$i",
- -values => \@authorised_values,
- -size => 1,
- -multiple => 0,
- );
- $row_data{authtypes} = CGI::scrolling_list(
- -name => "authtypecode",
- -id => "authtypecode$i",
- -values => \@authtypes,
- -size => 1,
- -multiple => 0,
- );
- $row_data{link} = CGI::escapeHTML( $data->{'link'} );
- $row_data{row} = $i;
- push( @loop_data, \%row_data );
+ # Add a new row for the "New" tab
+ my %row_data; # get a fresh hash for the row data
+ $row_data{'new_subfield'} = 1;
+ $row_data{'subfieldcode'} = '';
+ $row_data{'maxlength'} = 9999;
+ $row_data{tab} = -1; #ignore
+ $row_data{tagsubfield} = "";
+ $row_data{liblibrarian} = "";
+ $row_data{libopac} = "";
+ $row_data{seealso} = "";
+ $row_data{hidden} = "";
+ $row_data{repeatable} = 0;
+ $row_data{mandatory} = 0;
+ $row_data{isurl} = 0;
+ $row_data{kohafields} = \@kohafields;
+ $row_data{authorised_values} = \@authorised_values;
+ $row_data{value_builders} = \@value_builder;
+ $row_data{authtypes} = \@authtypes;
+ $row_data{link} = "";
+ $row_data{row} = $i;
+ push( @loop_data, \%row_data );
$template->param( 'use_heading_flags_p' => 1 );
$template->param( 'heading_edit_subfields_p' => 1 );
action => "Edit subfields",
tagfield => $tagfield,
loop => \@loop_data,
- more_subfields => $more_subfields,
more_tag => $tagfield
);
update marc_subfield_structure set tagfield=?, tagsubfield=?, liblibrarian=?, libopac=?, repeatable=?, mandatory=?, kohafield=?, tab=?, seealso=?, authorised_value=?, authtypecode=?, value_builder=?, hidden=?, isurl=?, frameworkcode=?, link=?, defaultvalue=?, maxlength=?
where tagfield=? and tagsubfield=? and frameworkcode=?
});
- my @tagsubfield = $input->param('tagsubfield');
- my @liblibrarian = $input->param('liblibrarian');
- my @libopac = $input->param('libopac');
- my @kohafield = $input->param('kohafield');
- my @tab = $input->param('tab');
- my @seealso = $input->param('seealso');
- my @hidden = $input->param('hidden');
- my @authorised_values = $input->param('authorised_value');
- my @authtypecodes = $input->param('authtypecode');
- my @value_builder = $input->param('value_builder');
- my @link = $input->param('link');
- my @defaultvalue = $input->param('defaultvalue');
- my @maxlength = $input->param('maxlength');
+ my @tagsubfield = $input->multi_param('tagsubfield');
+ my @liblibrarian = $input->multi_param('liblibrarian');
+ my @libopac = $input->multi_param('libopac');
+ my @kohafield = $input->multi_param('kohafield');
+ my @tab = $input->multi_param('tab');
+ my @seealso = $input->multi_param('seealso');
+ my @hidden = $input->multi_param('hidden');
+ my @authorised_values = $input->multi_param('authorised_value');
+ my @authtypecodes = $input->multi_param('authtypecode');
+ my @value_builder = $input->multi_param('value_builder');
+ my @link = $input->multi_param('link');
+ my @defaultvalue = $input->multi_param('defaultvalue');
+ my @maxlength = $input->multi_param('maxlength');
for ( my $i = 0 ; $i <= $#tagsubfield ; $i++ ) {
my $tagfield = $input->param('tagfield');
my $isurl = $input->param("isurl$i") ? 1 : 0;
my $link = $link[$i];
my $defaultvalue = $defaultvalue[$i];
- my $maxlength = $maxlength[$i];
+ my $maxlength = $maxlength[$i] ? $maxlength[$i] : 9999;
if (defined($liblibrarian) && $liblibrarian ne "") {
- unless ( C4::Context->config('demo') eq 1 ) {
- if (marc_subfield_structure_exists($tagfield, $tagsubfield, $frameworkcode)) {
- $sth_update->execute(
+ if (marc_subfield_structure_exists($tagfield, $tagsubfield, $frameworkcode)) {
+ $sth_update->execute(
+ $tagfield,
+ $tagsubfield,
+ $liblibrarian,
+ $libopac,
+ $repeatable,
+ $mandatory,
+ $kohafield,
+ $tab,
+ $seealso,
+ $authorised_value,
+ $authtypecode,
+ $value_builder,
+ $hidden,
+ $isurl,
+ $frameworkcode,
+ $link,
+ $defaultvalue,
+ $maxlength,
+ (
$tagfield,
$tagsubfield,
- $liblibrarian,
- $libopac,
- $repeatable,
- $mandatory,
- $kohafield,
- $tab,
- $seealso,
- $authorised_value,
- $authtypecode,
- $value_builder,
- $hidden,
- $isurl,
$frameworkcode,
- $link,
- $defaultvalue,
- $maxlength,
- (
- $tagfield,
- $tagsubfield,
- $frameworkcode,
- ),
- );
- } else {
- $sth_insert->execute(
- $tagfield,
- $tagsubfield,
- $liblibrarian,
- $libopac,
- $repeatable,
- $mandatory,
- $kohafield,
- $tab,
- $seealso,
- $authorised_value,
- $authtypecode,
- $value_builder,
- $hidden,
- $isurl,
- $frameworkcode,
- $link,
- $defaultvalue,
- $maxlength,
- );
+ )
+ );
+ } else {
+ if( $frameworkcode ne q{} ) {
+ # BZ 19096: Overwrite kohafield from Default when adding a new record
+ my $rec = Koha::MarcSubfieldStructures->find( q{}, $tagfield, $tagsubfield );
+ $kohafield = $rec->kohafield if $rec;
}
+ $sth_insert->execute(
+ $tagfield,
+ $tagsubfield,
+ $liblibrarian,
+ $libopac,
+ $repeatable,
+ $mandatory,
+ $kohafield,
+ $tab,
+ $seealso,
+ $authorised_value,
+ $authtypecode,
+ $value_builder,
+ $hidden,
+ $isurl,
+ $frameworkcode,
+ $link,
+ $defaultvalue,
+ $maxlength,
+ );
}
}
}
$sth_insert->finish;
$sth_update->finish;
- print
-"Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode\"></html>";
+ $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
+ $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
+ $cache->clear_from_cache("default_value_for_mod_marc-");
+ $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
+
+ print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
exit;
# END $OP eq ADD_VALIDATE
}
elsif ( $op eq 'delete_confirmed' ) {
my $dbh = C4::Context->dbh;
- unless ( C4::Context->config('demo') eq 1 ) {
- my $sth =
- $dbh->prepare(
+ my $sth =
+ $dbh->prepare(
"delete from marc_subfield_structure where tagfield=? and tagsubfield=? and frameworkcode=?"
- );
- $sth->execute( $tagfield, $tagsubfield, $frameworkcode );
- $sth->finish;
- }
- print
-"Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode\"></html>";
+ );
+ $sth->execute( $tagfield, $tagsubfield, $frameworkcode );
+ $sth->finish;
+ $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
+ $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
+ $cache->clear_from_cache("default_value_for_mod_marc-");
+ $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
+ print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
exit;
- $template->param( tagfield => $tagfield );
# END $OP eq DELETE_CONFIRMED
################## DEFAULT ##################################