#!/usr/bin/perl # This file is part of Koha. # # Copyright 2013 BibLibre # Copyright 2021 Catalyst IT # # 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. # # You should have received a copy of the GNU General Public License # along with Koha; if not, see . =head1 NAME automatic_item_modification_by_age.pl: Update new status for items. =cut =head1 DESCRIPTION This script allows a user to update the new status for items. =cut use Modern::Perl; use CGI; use JSON qw( to_json ); use C4::Auth qw( get_template_and_user ); use C4::Context; use C4::Output qw( output_html_with_http_headers ); use C4::Koha; use C4::Items qw( GetAutomaticItemModificationAgeFields ); use Koha::Items; use Koha::Biblioitems; use Koha::Biblios; my $cgi = CGI->new; # open template my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "tools/automatic_item_modification_by_age.tt", query => $cgi, type => "intranet", flagsrequired => { tools => 'items_modification_by_age' }, } ); my $op = $cgi->param('op') // 'show'; my @item_fields = map { "items.$_" } Koha::Items->columns; my @biblioitem_fields = map { "biblioitems.$_" } Koha::Biblioitems->columns; my @biblio_fields = map { "biblio.$_" } Koha::Biblios->columns; my @allowed_condition_fields = ( @item_fields, @biblioitem_fields, @biblio_fields ); my @allowed_substitution_fields = @item_fields; my @allowed_age_fields = GetAutomaticItemModificationAgeFields(); my $syspref_name = q|automatic_item_modification_by_age_configuration|; if ( $op eq 'cud-update' ) { my @rules; my @unique_ids = $cgi->multi_param('unique_id'); for my $unique_id (@unique_ids) { my @substitution_fields = $cgi->multi_param("substitution_field_$unique_id"); my @substitution_values = $cgi->multi_param("substitution_value_$unique_id"); my @condition_fields = $cgi->multi_param("condition_field_$unique_id"); my @condition_values = $cgi->multi_param("condition_value_$unique_id"); my @age_fields = $cgi->multi_param("agefield_$unique_id"); my $rule = { substitutions => [], conditions => [], }; for my $value (@substitution_values) { my $field = shift @substitution_fields; last unless $field; next unless grep { $_ eq $field } @allowed_substitution_fields; push @{ $rule->{substitutions} }, { field => $field, value => $value }; } push @{ $rule->{substitutions} }, {} unless @{ $rule->{substitutions} }; for my $value (@condition_values) { my $field = shift @condition_fields; last unless $field; next unless grep { $_ eq $field } @allowed_condition_fields; push @{ $rule->{conditions} }, { field => $field, value => $value }; } push @{ $rule->{conditions} }, {} unless @{ $rule->{conditions} }; $rule->{age} = $cgi->param("age_$unique_id"); for my $age_field (@age_fields) { next unless grep { $_ eq $age_field } @allowed_age_fields; $rule->{agefield} = $age_field ? $age_field : "items.dateaccessioned"; } push @rules, $rule; } my $syspref_content = to_json( \@rules ); C4::Context->set_preference( $syspref_name, $syspref_content ); $op = 'show'; } my @messages; my $syspref_content = C4::Context->preference($syspref_name); my $rules; $rules = eval { JSON::from_json($syspref_content) } if $syspref_content; if ($@) { push @messages, { type => 'error', code => 'unable_to_load_configuration' }; $template->param( messages => \@messages ); output_html_with_http_headers $cgi, $cookie, $template->output; exit; } $template->param( op => $op, messages => \@messages, agefields => \@allowed_age_fields, condition_fields => \@allowed_condition_fields, substitution_fields => \@allowed_substitution_fields, rules => $rules, ); output_html_with_http_headers $cgi, $cookie, $template->output;