From d43a54df76b558b6189b460792f5099425cd51ea Mon Sep 17 00:00:00 2001 From: Thibaud Guillot Date: Thu, 6 Apr 2023 17:16:22 +0200 Subject: [PATCH] Bug 32748: Prevent data erasing when editing items When we set an authorised value linked to one library, users who do not belong to this library do not get the value and can therefore overwrite it. This patch add current value to the dropdown list even if it comes from an authorized value of another library. Test plan : 1) Edit an item with one of these fields has an authorized value from another library. 2) See that you don't get this value on 'edit' 3) Apply this patch 4) Refresh and do step 1 5) Now you have the value in dropdown list and a tooltip info --- C4/Koha.pm | 15 +++++++++++---- Koha/UI/Form/Builder/Item.pm | 8 ++++++-- .../prog/en/includes/html_helpers.inc | 11 +++++++++-- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/C4/Koha.pm b/C4/Koha.pm index 7132910adf..8e2f359058 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -486,32 +486,39 @@ C<$opac> If set to a true value, displays OPAC descriptions rather than normal o sub GetAuthorisedValues { my $category = shift // ''; # optional parameter my $opac = shift ? 1 : 0; # normalise to be safe + my $options = shift // ''; + my $no_limit = $options->{'no_limit'} if $options; #optional parameter to ignore library limitation # Is this cached already? my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; my $cache_key = - "AuthorisedValues-$category-$opac-$branch_limit"; + "AuthorisedValues-$category-$opac-$branch_limit-$no_limit"; my $cache = Koha::Caches->get_instance(); my $result = $cache->get_from_cache($cache_key); return $result if $result; my @results; my $dbh = C4::Context->dbh; + my $select_clause = 'SELECT av.*'; + my @where_args; + if ($branch_limit && $no_limit) { + $select_clause .= ', IF (branchcode = ? OR branchcode IS NULL, 0, 1) as restricted'; + push @where_args, $branch_limit; + } my $query = qq{ - SELECT DISTINCT av.* + $select_clause FROM authorised_values av }; $query .= qq{ LEFT JOIN authorised_values_branches ON ( id = av_id ) } if $branch_limit; my @where_strings; - my @where_args; if($category) { push @where_strings, "category = ?"; push @where_args, $category; } - if($branch_limit) { + if($branch_limit && !defined $no_limit) { push @where_strings, "( branchcode = ? OR branchcode IS NULL )"; push @where_args, $branch_limit; } diff --git a/Koha/UI/Form/Builder/Item.pm b/Koha/UI/Form/Builder/Item.pm index 3a478ee05e..180b6f8ba6 100644 --- a/Koha/UI/Form/Builder/Item.pm +++ b/Koha/UI/Form/Builder/Item.pm @@ -174,6 +174,7 @@ sub generate_subfield_form { if ( $subfield->{authorised_value} ) { my @authorised_values; my %authorised_lib; + my %authorised_restricted; # builds list, depending on authorised value... if ( $subfield->{authorised_value} eq "LOST" ) { @@ -251,10 +252,12 @@ sub generate_subfield_form { } else { push @authorised_values, qq{}; - my $av = GetAuthorisedValues( $subfield->{authorised_value} ); + my $av = GetAuthorisedValues( $subfield->{authorised_value}, undef, { 'no_limit' => 1 } ); for my $r (@$av) { push @authorised_values, $r->{authorised_value}; - $authorised_lib{ $r->{authorised_value} } = $r->{lib}; + + $authorised_lib{ $r->{authorised_value} } = $r->{lib}; + $authorised_restricted{ $r->{authorised_value} } = $r->{restricted}; } } @@ -282,6 +285,7 @@ sub generate_subfield_form { . $index_subfield, values => \@authorised_values, labels => \%authorised_lib, + restricted => \%authorised_restricted, default => $value, ( ( diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc index 535cbca2c9..9eebb2d3fe 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc @@ -113,12 +113,20 @@ [% FOREACH aval IN mv.values %] [% IF aval == mv.default %] [% SET matched = 1 %] - + [% IF mv.restricted.$aval %] + + [% ELSE %] + + [% END %] [% ELSE %] [% IF subfield.IS_LOST_AV && Koha.Preference("ClaimReturnedLostValue") && aval == Koha.Preference("ClaimReturnedLostValue") %] [% ELSIF subfield.IS_LOST_AV && Koha.Preference("BundleLostValue") && aval == Koha.Preference("BundleLostValue") %] + [% ELSIF mv.restricted.$aval %] + [% ELSE %] [% END %] @@ -210,7 +218,6 @@ [% END %] - [% END %] -- 2.30.2