@@ -, +, @@ accounts have the same mail address - Create 3 Accounts, login names are test01, test02, test03, Email is the same - Go to OPAC -> Password recovery and indicate E-Mail only - You will get an email for only one of the accounts above. - Apply patch, restart memcached and plack - Go to db, delete from borrower_password_recovery; - Try steps above to reproduce. You will get an error message: Account identification with this email address only is ambiguous. Please use the field 'Login' as well. - Verify that other cases work as before (provide valid / invalid login only, provide valid email for an existing account, provide unknown email, provide both login and email with all combinations of valid / invalid) --- .../bootstrap/en/modules/opac-password-recovery.tt | 5 ++++- opac/opac-password-recovery.pl | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-password-recovery.tt +++ a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-password-recovery.tt @@ -54,6 +54,9 @@
Please try again later. [% ELSIF (errNoBorrowerFound) %] No account was found with the provided information. + [% ELSIF (errMultipleAccountsForEmail) %] + Account identification with this email address only is ambiguous. +
Please use the field 'Login' as well. [% ELSIF (errAlreadyStartRecovery) %] The process of password recovery has already been started for this account ("[% username %]")
You should have received an email with a link to reset your password. @@ -78,7 +81,7 @@
-

To reset your password, enter your login and email address. +

To reset your password, enter your login and your email address. --- a/opac/opac-password-recovery.pl +++ a/opac/opac-password-recovery.pl @@ -36,10 +36,12 @@ my $borrower_number; #errors my $hasError; +my $resultCount; #email form error my $errNoBorrowerFound; my $errNoBorrowerEmail; +my $errMultipleAccountsForEmail; my $errAlreadyStartRecovery; my $errTooManyEmailFound; my $errBadEmail; @@ -59,14 +61,25 @@ if ( $query->param('sendEmail') || $query->param('resendEmail') ) { # Find the borrower by his userid or email if ($username) { $search_results = [ Koha::Patrons->search( { userid => $username } ) ]; + $resultCount = Koha::Patrons->search( { userid => $username } ) -> count } elsif ($email) { $search_results = [ Koha::Patrons->search( { -or => { email => $email, emailpro => $email, B_email => $email } } ) ]; + $resultCount = Koha::Patrons->search( { -or => { email => $email, emailpro => $email, B_email => $email } } ) -> count; } - if ( not $search_results || scalar @$search_results > 1 ) { + + if ( not $search_results || $resultCount < 1) { + $hasError = 1; + $errNoBorrowerFound = 1; + } + elsif ( $username && scalar $resultCount > 1) { # Multiple accounts for username $hasError = 1; $errNoBorrowerFound = 1; } + elsif ( $email && scalar $resultCount > 1) { # Muliple accounts for E-Mail + $hasError = 1; + $errMultipleAccountsForEmail = 1; + } elsif ( $borrower = shift @$search_results ) { # One matching borrower $username ||= $borrower->userid; my @emails = ( $borrower->email, $borrower->emailpro, $borrower->B_email ); @@ -112,6 +125,7 @@ if ( $query->param('sendEmail') || $query->param('resendEmail') ) { errAlreadyStartRecovery => $errAlreadyStartRecovery, errBadEmail => $errBadEmail, errNoBorrowerEmail => $errNoBorrowerEmail, + errMultipleAccountsForEmail => $errMultipleAccountsForEmail, password_recovery => 1, email => HTML::Entities::encode($email), username => $username --