Bug 13757: (QA followup) Make opac-memberentry.pl handle attrs deletion

The original code on this bug skipped empty-valued attributes. But
emptying attributes is the only way to tell the controller script that
the user wants to delete them.

This patch makes opac-memberentry.pl check the existence of attributes
sharing the code of the empty for the given patron, and it stores the
deletion on the Koha::Patron::Modification as needed. Otherwise
deletions got skipped.

To test:
- Verify setting/deleting attributes that are opac-editable and verify
the results are sound.

https://bugs.koha-community.org/show_bug.cgi?id=13737

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Tomás Cohen Arazi 2017-01-30 12:36:57 -03:00 committed by Kyle M Hall
parent b6797fdc87
commit c44a377d9c

View file

@ -89,7 +89,7 @@ $template->param(
OPACPatronDetails => C4::Context->preference('OPACPatronDetails'), OPACPatronDetails => C4::Context->preference('OPACPatronDetails'),
); );
my $attributes = ParsePatronAttributes($cgi); my $attributes = ParsePatronAttributes($borrowernumber,$cgi);
my $conflicting_attribute = 0; my $conflicting_attribute = 0;
foreach my $attr (@$attributes) { foreach my $attr (@$attributes) {
@ -560,17 +560,22 @@ sub GeneratePatronAttributesForm {
} }
sub ParsePatronAttributes { sub ParsePatronAttributes {
my ( $cgi ) = @_; my ($borrowernumber,$cgi) = @_;
my @codes = $cgi->multi_param('patron_attribute_code'); my @codes = $cgi->multi_param('patron_attribute_code');
my @values = $cgi->multi_param('patron_attribute_value'); my @values = $cgi->multi_param('patron_attribute_value');
my $ea = each_array( @codes, @values ); my $ea = each_array( @codes, @values );
my @attributes; my @attributes;
my %dups = (); my %dups = ();
while ( my ( $code, $value, $password ) = $ea->() ) { while ( my ( $code, $value ) = $ea->() ) {
next unless defined($value) and $value ne ''; # Don't skip if the patron already has attributes with $code, because
# it means we are being requested to remove the attributes.
next
unless defined($value) and $value ne ''
or Koha::Patron::Attributes->search(
{ borrowernumber => $borrowernumber, code => $code } )->count > 0;
next if exists $dups{$code}->{$value}; next if exists $dups{$code}->{$value};
$dups{$code}->{$value} = 1; $dups{$code}->{$value} = 1;
@ -579,3 +584,5 @@ sub ParsePatronAttributes {
return \@attributes; return \@attributes;
} }
1;