# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
-use C4::Output;
-use C4::Auth;
+use Encode qw( encode_utf8 );
+use C4::Output qw( output_html_with_http_headers );
+use C4::Auth qw( get_template_and_user );
use CGI qw ( -utf8 );
use C4::Context;
use List::MoreUtils qw( uniq );
-sub string_search {
- my ( $searchstring, $frameworkcode ) = @_;
- my $dbh = C4::Context->dbh;
- $searchstring =~ s/\'/\\\'/g;
- my @data = split( ' ', $searchstring );
- my $count = @data;
- my $sth =
- $dbh->prepare(
-"Select * from marc_subfield_structure where (tagfield like ? and frameworkcode=?) order by tagfield, display_order"
- );
- $sth->execute( "$searchstring%", $frameworkcode );
- my @results;
- my $cnt = 0;
- my $u = 1;
-
- while ( my $data = $sth->fetchrow_hashref ) {
- push( @results, $data );
- $cnt++;
- $u++;
- }
- $sth->finish;
- return ( $cnt, \@results );
-}
-
-sub marc_subfield_structure_exists {
- my ($tagfield, $tagsubfield, $frameworkcode) = @_;
- my $dbh = C4::Context->dbh;
- my $sql = "select tagfield from marc_subfield_structure where tagfield = ? and tagsubfield = ? and frameworkcode = ?";
- my $rows = $dbh->selectall_arrayref($sql, {}, $tagfield, $tagsubfield, $frameworkcode);
- return @$rows > 0;
-}
-
my $input = CGI->new;
my $tagfield = $input->param('tagfield');
my $tagsubfield = $input->param('tagsubfield');
query => $input,
type => "intranet",
flagsrequired => { parameters => 'manage_marc_frameworks' },
- debug => 1,
}
);
my $cache = Koha::Caches->get_instance();
$sth2->finish;
$sth2 = $dbh->prepare("select distinct category from authorised_values");
$sth2->execute;
- my @av_cat = Koha::AuthorisedValueCategories->search;
- my @authorised_values = map { $_->category_name } @av_cat;
+ my @authorised_values= Koha::AuthorisedValueCategories->search->get_column('category_name');
# build thesaurus categories list
- my @authtypes = uniq( "", map { $_->authtypecode } Koha::Authority::Types->search );
+ my @authtypes = uniq( "", map { $_->authtypecode } Koha::Authority::Types->search->as_list );
# build value_builder list
my @value_builder = ('');
closedir DIR;
# build values list
- my $sth =
- $dbh->prepare(
-"select * from marc_subfield_structure where tagfield=? and frameworkcode=? order by display_order"
- ); # and tagsubfield='$tagsubfield'");
- $sth->execute( $tagfield, $frameworkcode );
+ my $mss = Koha::MarcSubfieldStructures->search(
+ { tagfield => $tagfield, frameworkcode => $frameworkcode },
+ { order_by => 'display_order' }
+ )->unblessed;
my @loop_data = ();
my $i = 0;
- 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} = $data->{tab};
- $row_data{tagsubfield} = $data->{tagsubfield};
- $row_data{subfieldcode} = $data->{'tagsubfield'};
+ for my $m ( @$mss ) {
+ my %row_data = %$m; # get a fresh hash for the row data
+ $row_data{subfieldcode} = $m->{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{important} = $data->{important};
- $row_data{hidden} = $data->{hidden};
- $row_data{isurl} = $data->{isurl};
$row_data{row} = $i;
- $row_data{link} = $data->{'link'};
- if ( defined $data->{kohafield}
- and $data->{kohafield} eq 'biblio.biblionumber' )
+ if ( defined $m->{kohafield}
+ and $m->{kohafield} eq 'biblio.biblionumber' )
{
my $hidden_opac = Koha::Filter::MARC::ViewPolicy->should_hide_marc(
{
$template->param(
action => "Edit subfields",
tagfield => $tagfield,
+ tagsubfield => $tagsubfield,
loop => \@loop_data,
more_tag => $tagfield
);
elsif ( $op eq 'add_validate' ) {
my $dbh = C4::Context->dbh;
$template->param( tagfield => "$input->param('tagfield')" );
- my $sth_update = $dbh->prepare(qq{
- update marc_subfield_structure set tagfield=?, tagsubfield=?, liblibrarian=?, libopac=?, repeatable=?, mandatory=?, important=?, kohafield=?, tab=?, seealso=?, authorised_value=?, authtypecode=?, value_builder=?, hidden=?, isurl=?, frameworkcode=?, link=?, defaultvalue=?, maxlength=?, display_order=?
- where tagfield=? and tagsubfield=? and frameworkcode=?
- });
- 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');
+ my $tagfield = $input->param('tagfield');
+ my @tagsubfield = $input->multi_param('tagsubfield');
+ my @tab_ids = $input->multi_param('tab_id');
my $display_order;
- for ( my $i = 0 ; $i <= $#tagsubfield ; $i++ ) {
- my $tagfield = $input->param('tagfield');
- my $tagsubfield = $tagsubfield[$i];
+ for my $tagsubfield ( @tagsubfield ) {
$tagsubfield = "@" unless $tagsubfield ne '';
- my $liblibrarian = $liblibrarian[$i];
- my $libopac = $libopac[$i];
- my $repeatable = $input->param("repeatable$i") ? 1 : 0;
- my $mandatory = $input->param("mandatory$i") ? 1 : 0;
- my $important = $input->param("important$i") ? 1 : 0;
- my $kohafield = $kohafield[$i];
- my $tab = $tab[$i];
- my $seealso = $seealso[$i];
- my $authorised_value = $authorised_values[$i];
- my $authtypecode = $authtypecodes[$i];
- my $value_builder = $value_builder[$i];
- my $hidden = $hidden[$i]; #input->param("hidden$i");
- my $isurl = $input->param("isurl$i") ? 1 : 0;
- my $link = $link[$i];
- my $defaultvalue = $defaultvalue[$i];
- my $maxlength = $maxlength[$i] ? $maxlength[$i] : 9999;
-
+ my $id = shift @tab_ids;
+ my $liblibrarian = $input->param("liblibrarian_$id");
+ my $libopac = $input->param("libopac_$id");
+ my $repeatable = $input->param("repeatable_$id") ? 1 : 0;
+ my $mandatory = $input->param("mandatory_$id") ? 1 : 0;
+ my $important = $input->param("important_$id") ? 1 : 0;
+ my $kohafield = $input->param("kohafield_$id");
+ my $tab = $input->param("tab_$id");
+ my $seealso = $input->param("seealso_$id");
+ my $authorised_value = $input->param("authorised_values_$id");
+ my $authtypecode = $input->param("authtypecodes_$id");
+ my $value_builder = $input->param("value_builder_$id");
+ my $hidden = $input->param("hidden_$id");
+ my $isurl = $input->param("isurl_$id") ? 1 : 0;
+ my $link = $input->param("link_$id");
+ my $defaultvalue = $input->param("defaultvalue_$id");
+ my $maxlength = $input->param("maxlength_$id") || 9999;
+
if (defined($liblibrarian) && $liblibrarian ne "") {
- if (marc_subfield_structure_exists($tagfield, $tagsubfield, $frameworkcode)) {
- $sth_update->execute(
- $tagfield,
- $tagsubfield,
- $liblibrarian,
- $libopac,
- $repeatable,
- $mandatory,
- $important,
- $kohafield,
- $tab,
- $seealso,
- $authorised_value,
- $authtypecode,
- $value_builder,
- $hidden,
- $isurl,
- $frameworkcode,
- $link,
- $defaultvalue,
- $maxlength,
- $display_order->{$tagfield} || 0,
- (
- $tagfield,
- $tagsubfield,
- $frameworkcode,
- )
+ my $mss = Koha::MarcSubfieldStructures->find({tagfield => $tagfield, tagsubfield => $tagsubfield, frameworkcode => $frameworkcode });
+ if ($mss) {
+ $mss->update(
+ {
+ liblibrarian => $liblibrarian,
+ libopac => $libopac,
+ repeatable => $repeatable,
+ mandatory => $mandatory,
+ important => $important,
+ kohafield => $kohafield,
+ tab => $tab,
+ seealso => $seealso,
+ authorised_value => $authorised_value,
+ authtypecode => $authtypecode,
+ value_builder => $value_builder,
+ hidden => $hidden,
+ isurl => $isurl,
+ link => $link,
+ defaultvalue => $defaultvalue,
+ maxlength => $maxlength,
+ display_order => $display_order->{$tagfield} || 0
+ }
);
} else {
if( $frameworkcode ne q{} ) {
$display_order->{$tagfield}++;
}
}
- $sth_update->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");
+ $cache->clear_from_cache("MarcCodedFields-$frameworkcode");
print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
exit;
# called by default form, used to confirm deletion of data in DB
}
elsif ( $op eq 'delete_confirm' ) {
- my $dbh = C4::Context->dbh;
- my $sth =
- $dbh->prepare(
-"select * from marc_subfield_structure where tagfield=? and tagsubfield=? and frameworkcode=?"
- );
-
- $sth->execute( $tagfield, $tagsubfield, $frameworkcode );
- my $data = $sth->fetchrow_hashref;
- $sth->finish;
+ my $mss = Koha::MarcSubfieldStructures->find(
+ {
+ tagfield => $tagfield,
+ tagsubfield => $tagsubfield,
+ frameworkcode => $frameworkcode
+ }
+ );
$template->param(
- liblibrarian => $data->{'liblibrarian'},
- tagsubfield => $data->{'tagsubfield'},
+ mss => $mss,
delete_link => $script_name,
- tagfield => $tagfield,
- tagsubfield => $tagsubfield,
- frameworkcode => $frameworkcode,
);
# END $OP eq DELETE_CONFIRM
# called by delete_confirm, used to effectively confirm deletion of data in DB
}
elsif ( $op eq 'delete_confirmed' ) {
- my $dbh = C4::Context->dbh;
- my $sth =
- $dbh->prepare(
-"delete from marc_subfield_structure where tagfield=? and tagsubfield=? and frameworkcode=?"
- );
- $sth->execute( $tagfield, $tagsubfield, $frameworkcode );
- $sth->finish;
+ Koha::MarcSubfieldStructures->find(
+ {
+ tagfield => $tagfield,
+ tagsubfield => $tagsubfield,
+ frameworkcode => $frameworkcode
+ }
+ )->delete;
+
$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");
+ $cache->clear_from_cache("MarcCodedFields-$frameworkcode");
print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
exit;
################## DEFAULT ##################################
}
else { # DEFAULT
- my ( $count, $results ) = string_search( $tagfield, $frameworkcode );
- my @loop_data = ();
- for ( my $i = 0; $i < $count; $i++ ) {
- my %row_data; # get a fresh hash for the row data
- $row_data{tagfield} = $results->[$i]{'tagfield'};
- $row_data{tagsubfield} = $results->[$i]{'tagsubfield'};
- $row_data{liblibrarian} = $results->[$i]{'liblibrarian'};
- $row_data{kohafield} = $results->[$i]{'kohafield'};
- $row_data{repeatable} = $results->[$i]{'repeatable'};
- $row_data{mandatory} = $results->[$i]{'mandatory'};
- $row_data{important} = $results->[$i]{'important'};
- $row_data{tab} = $results->[$i]{'tab'};
- $row_data{seealso} = $results->[$i]{'seealso'};
- $row_data{authorised_value} = $results->[$i]{'authorised_value'};
- $row_data{authtypecode} = $results->[$i]{'authtypecode'};
- $row_data{value_builder} = $results->[$i]{'value_builder'};
- $row_data{hidden} = $results->[$i]{'hidden'};
- $row_data{isurl} = $results->[$i]{'isurl'};
- $row_data{link} = $results->[$i]{'link'};
-
- if ( $row_data{tab} eq -1 ) {
- $row_data{subfield_ignored} = 1;
- }
+ my $mss = Koha::MarcSubfieldStructures->search(
+ {
+ tagfield => { -like => "$tagfield%" },
+ frameworkcode => $frameworkcode
+ },
+ { order_by => [ 'tagfield', 'display_order' ] }
+ )->unblessed;
- push( @loop_data, \%row_data );
- }
- $template->param( loop => \@loop_data );
+ $template->param( loop => $mss );
$template->param(
edit_tagfield => $tagfield,
edit_frameworkcode => $frameworkcode