From 16ed5c01099be2845e407219dcf99173f15a41f4 Mon Sep 17 00:00:00 2001
From: Ere Maijala <ere.maijala@helsinki.fi>
Date: Thu, 11 Jun 2015 10:39:17 +0300
Subject: [PATCH] Added better error message when a new PIN code contains
 characters Voyager doesn't allow.

---
 languages/en.ini                                 |  1 +
 languages/fi.ini                                 |  1 +
 languages/sv.ini                                 |  3 ++-
 .../src/VuFind/ILS/Driver/VoyagerRestful.php     | 16 ++++++++++------
 4 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/languages/en.ini b/languages/en.ini
index bb007928d00..ddc7c1e431e 100644
--- a/languages/en.ini
+++ b/languages/en.ini
@@ -675,6 +675,7 @@ Page not found. = "Page not found."
 Password = "Password"
 Password Again = "Password Again"
 Password cannot be blank = "Password cannot be blank"
+password_error_invalid = "New password is invalid (e.g. contains invalid characters)"
 password_error_not_unique = "Password was not changed"
 password_maximum_length = "Maximum password length is %%maxlength%% characters"
 password_minimum_length = "Minimum password length is %%minlength%% characters"
diff --git a/languages/fi.ini b/languages/fi.ini
index a32ecf9ee5d..52a2b54e068 100644
--- a/languages/fi.ini
+++ b/languages/fi.ini
@@ -665,6 +665,7 @@ Page not found. = "Sivua ei löytynyt."
 Password = "Salasana / PIN*"
 Password Again = "Salasana uudelleen"
 Password cannot be blank = "Salasana ei voi olla tyhjä"
+password_error_invalid = "Uusi salasana on virheellinen (esim. sisältää kiellettyjä merkkejä)"
 password_error_not_unique = "Salasanaa ei muutettu"
 password_maximum_length = "Salasanan enimmäispituus on %%maxlength%% merkkiä"
 password_minimum_length = "Salasanan vähimmäispituus on %%minlength%% merkkiä"
diff --git a/languages/sv.ini b/languages/sv.ini
index c36d1c91d7a..0a4786eb531 100644
--- a/languages/sv.ini
+++ b/languages/sv.ini
@@ -664,7 +664,8 @@ Other Sources = "Andra källor"
 Page not found. = "Sidan hittades inte."
 Password = "Lösenord / PIN *"
 Password Again = "Lösenord igen"
-Password cannot be blank = "Lösenordet kan inte lämnas tom"
+Password cannot be blank = "Lösenordet kan inte lämnas tomt"
+password_error_invalid = "Nytt lösenord är ogiltigt (t.ex. innehåller ogiltiga tecken)"
 password_error_not_unique = "Lösenordet inte ändrat"
 password_maximum_length = "Högsta längd på lösenord är %%maxlength%% tecken"
 password_minimum_length = "Minsta längd på lösenord är %%minlength%% tecken"
diff --git a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
index 84806a944ec..6ab787492ef 100644
--- a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
+++ b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php
@@ -3163,6 +3163,11 @@ EOT;
                 $this->sanitizePIN($details['newPassword']), ENT_COMPAT, 'UTF-8'
             )
         );
+        if ($newPIN === '') {
+            return [
+                'success' => false, 'status' => 'password_error_invalid'
+            ];
+        }
         $barcode = htmlspecialchars($patron['cat_username'], ENT_COMPAT, 'UTF-8');
 
         $xml =  <<<EOT
@@ -3206,12 +3211,11 @@ EOT;
                 ];
             }
             if ($code == $exceptionNamespace . 'ValidateLengthException') {
-                // This issue should not be encountered if the settings are correct.
-                // Log an error and let through for an exception
-                $this->error(
-                    'ValidateLengthException encountered when trying to'
-                    . ' change patron PIN. Verify PIN length settings.'
-                );
+                // This error may happen even with correct settings if the new PIN
+                // contains invalid characters.
+                return [
+                    'success' => false, 'status' => 'password_error_invalid'
+                ];
             }
             throw new ILSException((string)$error);
         }
-- 
GitLab