Bugzilla – Attachment 117799 Details for
Bug 27668
Improve validation of patron entry form in the OPAC
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 27668: Improve validation of patron entry form in the OPAC
Bug-27668-Improve-validation-of-patron-entry-form-.patch (text/plain), 79.07 KB, created by
Martin Renvoize (ashimema)
on 2021-03-05 10:21:06 UTC
(
hide
)
Description:
Bug 27668: Improve validation of patron entry form in the OPAC
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2021-03-05 10:21:06 UTC
Size:
79.07 KB
patch
obsolete
>From a67a5d2e4cd31eed80c0c3e139579bf481bca4e3 Mon Sep 17 00:00:00 2001 >From: Owen Leonard <oleonard@myacpl.org> >Date: Wed, 10 Feb 2021 19:43:25 +0000 >Subject: [PATCH] Bug 27668: Improve validation of patron entry form in the > OPAC > >This patch improves the way we handle required fields in the patron >entry/update form in the OPAC. Instead of doing multiple checks for each >field using mandatory.defined(), the template now loops over a list of >fields and sets a "required" variable for any which are required. > >Then, for each form field, the "required" variable is used to set >classes on labels, input fields, and the "required" text hints. The >class on form fields acts as a hook for the jQuery validator plugin. The >class on the text hints allows us to hide the text hint using CSS, >eliminating the necessity of using a template conditional. > >The patch also adds the missing validator-strings include which enables >translation of the jQuery validator plugin's validation error messages. > >To test, apply the patch and rebuild the OPAC CSS >(https://wiki.koha-community.org/wiki/Working_with_SCSS_in_the_OPAC_and_staff_client). > > - Go to Administration -> System preferences and enable > PatronSelfRegistration. > - Select multiple fields to be required using the > PatronSelfRegistrationBorrowerMandatoryField preference. > - In the OPAC, start the process of registering for an account. > - The fields you designated as mandatory should each have a "Required" > label under them. > - Try to submit the form without entering any data. The required fields > should now be highlighted in red and have another label, "This field > is required." > - Fill in the required fields and submit the form. It should submit > correctly. > - Modify the PatronSelfRegistrationBorrowerMandatoryField preference > and select all fields as mandatory. Confirm that all fields in the > patron entry form work correctly. > - Test that form validation works correctly when modifying a logged-in > patron's existing account. > >Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > .../opac-tmpl/bootstrap/css/src/opac.scss | 40 +- > .../en/includes/validator-strings.inc | 24 + > .../bootstrap/en/modules/opac-memberentry.tt | 481 ++++++------------ > 3 files changed, 211 insertions(+), 334 deletions(-) > create mode 100644 koha-tmpl/opac-tmpl/bootstrap/en/includes/validator-strings.inc > >diff --git a/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss b/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss >index 8f411ae789..37c843a918 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss >+++ b/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss >@@ -624,8 +624,24 @@ th { > } > } > >+div { >+ &.required_label { >+ display: none; >+ >+ &.required { >+ color: #C00; >+ display: block; >+ font-size: 95%; >+ margin-left: 10rem; >+ margin-top: 3px; >+ } >+ } >+} >+ > .required { >- color: #C00; >+ &.valid { >+ color: #000; >+ } > } > > >@@ -686,12 +702,21 @@ fieldset { > .label { > float: left; > font-weight: bold; >- margin-right: 1em; >+ margin-right: 1rem; > text-align: right; >- width: 9em; >+ width: 9rem; > } > > label { >+ &.error { >+ color: #C00; >+ float: none; >+ font-style: italic; >+ font-weight: normal; >+ margin-left: 1rem; >+ text-align: left; >+ width: auto; >+ } > &.lradio { > float: none; > margin: inherit; >@@ -744,7 +769,7 @@ fieldset { > > .hint { > display: block; >- margin-left: 11em; >+ margin-left: 10rem; > } > } > >@@ -784,7 +809,7 @@ div { > font-weight: bold; > margin-right: 1em; > text-align: left; >- width: 9em; >+ width: 9rem; > } > } > >@@ -2246,14 +2271,11 @@ nav { > #memberentry-form { > input.error { > border-color: #C00; >- box-shadow: 0 1px 1px #C00 inset, 0 0 8px #C00; >- color: #F00; > outline: 0 none; > > &:focus { > border-color: #C00; >- box-shadow: 0 1px 1px #C00 inset, 0 0 8px #C00; >- color: #F00; >+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(204, 0, 0, .6); > outline: 0 none; > } > >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/validator-strings.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/validator-strings.inc >new file mode 100644 >index 0000000000..0600f0a672 >--- /dev/null >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/validator-strings.inc >@@ -0,0 +1,24 @@ >+<!-- validator-strings.inc --> >+<script> >+ $(document).ready(function(){ >+ jQuery.extend(jQuery.validator.messages, { >+ required: _("This field is required."), >+ remote: _("Please fix this field."), >+ email: _("Please enter a valid email address."), >+ url: _("Please enter a valid URL."), >+ date: _("Please enter a valid date."), >+ dateISO: _("Please enter a valid date (ISO)."), >+ number: _("Please enter a valid number."), >+ digits: _("Please enter only digits."), >+ equalTo: _("Please enter the same value again."), >+ maxlength: $.validator.format(_("Please enter no more than {0} characters.")), >+ minlength: $.validator.format(_("Please enter at least {0} characters.")), >+ rangelength: $.validator.format(_("Please enter a value between {0} and {1} characters long.")), >+ range: $.validator.format(_("Please enter a value between {0} and {1}.")), >+ max: $.validator.format(_("Please enter a value less than or equal to {0}.")), >+ min: $.validator.format(_("Please enter a value greater than or equal to {0}.")), >+ phone: $.validator.format(_("Please enter a valid phone number.")) >+ }); >+ }); >+</script> >+<!-- / validator-strings.inc --> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt >index fc46fedda5..580a780767 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt >@@ -10,14 +10,10 @@ > [% BLOCK streetnumber %] > [% UNLESS hidden.defined('streetnumber') %] > <li> >- [% IF mandatory.defined('streetnumber') %] >- <label for="borrower_streetnumber" class="required">Street number:</label> >- [% ELSE %] >- <label for="borrower_streetnumber">Street number:</label> >- [% END %] >+ <label for="borrower_streetnumber" class="[% required.streetnumber | html %]">Street number:</label> > >- <input type="text" id="borrower_streetnumber" name="borrower_streetnumber" value="[% borrower.streetnumber | html %]" /> >- [% IF mandatory.defined('streetnumber') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_streetnumber" name="borrower_streetnumber" value="[% borrower.streetnumber | html %]" class="[% required.streetnumber | html %]" /> >+ <div class="required_label [% required.streetnumber | html %]">Required</div> > </li> > [% END %] > [% END %] >@@ -191,6 +187,12 @@ > > <form method="post" action="/cgi-bin/koha/opac-memberentry.pl" id="memberentry-form" autocomplete="off"> > >+ [% FOREACH field = ['streetnumber' 'cardnumber' 'branchcode' 'categorycode' 'title' 'surname' 'firstname' 'dateofbirth' 'initials' 'othernames' 'address' 'address2' 'city' 'state' 'zipcode' 'country' 'phone' 'phonepro' 'mobile' 'email' 'emailpro' 'fax' 'B_address' 'B_address2' 'B_city' 'B_state' 'B_zipcode' 'B_country' 'B_phone' 'B_email' 'contactnote' 'altcontactsurname' 'altcontactfirstname' 'altcontactaddress1' 'altcontactaddress2' 'altcontactaddress3' 'altcontactstate' 'altcontactzipcode' 'altcontactcountry' 'altcontactphone' 'password' ] %] >+ [% IF mandatory.defined( field ) %] >+ [% SET required.$field = 'required' %] >+ [% END %] >+ [% END %] >+ > [%# Following on one line for translatability %] > [% UNLESS ( hidden.defined('cardnumber') || ( !borrower && Koha.Preference('autoMemberNum') ) ) && hidden.defined('dateexpiry') && hidden.defined('branchcode') && hidden.defined('categorycode') %] > <div class="row"> >@@ -201,29 +203,27 @@ > <ol> > [% UNLESS hidden.defined('cardnumber') || ( !borrower && Koha.Preference('autoMemberNum') ) %] > <li> >- [% IF mandatory.defined('cardnumber') %] >- <label for="borrower_cardnumber" class="required">Library card number:</label> >- [% ELSE %] >- <label for="borrower_cardnumber">Library card number:</label> >- [% END %] >+ >+ <label for="borrower_cardnumber" class="[% required.cardnumber | html %]">Library card number:</label> >+ > [% IF borrower && !(cardnumber_wrong_length || cardnumber_already_exists) %] > [% borrower.cardnumber | html %] > [% ELSE %] > [% IF minlength_cardnumber == maxlength_cardnumber %] >- <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" minlength="[% minlength_cardnumber | html %]" maxlength="[% maxlength_cardnumber | html %]" /> >- [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" minlength="[% minlength_cardnumber | html %]" maxlength="[% maxlength_cardnumber | html %]" class="[% required.cardnumber | html %]" /> >+ <div class="required_label [% required.cardnumber | html %]">Required</div> > <div class="hint">Card number must be exactly [% minlength_cardnumber | html %] characters.</div> > [% ELSIF minlength_cardnumber && maxlength_cardnumber %] >- <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" minlength="[% minlength_cardnumber | html %]" maxlength="[% maxlength_cardnumber | html %]" /> >- [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" minlength="[% minlength_cardnumber | html %]" maxlength="[% maxlength_cardnumber | html %]" class="[% required.cardnumber | html %]" /> >+ <div class="required_label [% required.cardnumber | html %]">Required</div> > <div class="hint">Card number must be between [% minlength_cardnumber | html %] and [% maxlength_cardnumber | html %] characters.</div> > [% ELSIF maxlength_cardnumber %] >- <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" maxlength="[% maxlength_cardnumber | html %]" /> >- [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" maxlength="[% maxlength_cardnumber | html %]" class="[% required.cardnumber | html %]" /> >+ <div class="required_label [% required.cardnumber | html %]">Required</div> > <div class="hint">Card number can be up to [% maxlength_cardnumber | html %] characters.</div> > [% ELSE %] >- <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" /> >- [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber | html %]" class="[% required.cardnumber | html %]" /> >+ <div class="required_label [% required.cardnumber | html %]">Required</div> > <div class="hint">There is no minimum or maximum character length.</div> > [% END %] > [% END %] >@@ -240,13 +240,9 @@ > [% UNLESS hidden.defined('branchcode') %] > <li> > [% IF ( libraries.size > 1 ) %] >- [% IF mandatory.defined('branchcode') %] >- <label for="borrower_branchcode" class="required">Home library:</label> >- [% ELSE %] >- <label for="borrower_branchcode">Home library:</label> >- [% END %] >+ <label for="borrower_branchcode" class="[% required.branchcode | html %]">Home library:</label> > >- <select id="borrower_branchcode" name="borrower_branchcode"> >+ <select id="borrower_branchcode" name="borrower_branchcode" class="[% required.branchcode | html %]"> > [% FOREACH l IN libraries %] > [% IF l.branchcode == borrower.branchcode %] > <option value="[% l.branchcode | html %]" selected="selected">[% l.branchname | html %]</option> >@@ -255,6 +251,7 @@ > [% END %] > [% END %] > </select> >+ <div class="required_label [% required.branchcode | html %]">Required</div> > [% ELSE %] > <span class="label">Home library:</span> > [% FOREACH l IN libraries %] >@@ -267,14 +264,14 @@ > > [% UNLESS hidden.defined('categorycode') %] > <li> >- <label for="borrower_categorycode"> >+ <label for="borrower_categorycode" class="[% required.categorycode | html %]"> > Category:</label> > > [% IF borrower %] > [% Categories.GetName( borrower.categorycode ) | html %] > <input type="hidden" name="borrower_categorycode" value="[% borrower.categorycode | html %]" /> > [% ELSE %] >- <select id="borrower_categorycode" name="borrower_categorycode"> >+ <select id="borrower_categorycode" name="borrower_categorycode" class="[% required.categorycode | html %]"> > [% FOREACH c IN Categories.all() %] > [% IF c.categorycode == Koha.Preference('PatronSelfRegistrationDefaultCategory') %] > <option value="[% c.categorycode | html %]" data-pwd-length="[% c.effective_min_password_length | html %]" data-pwd-strong="[% c.effective_require_strong_password | html %]" selected="selected">[% c.description | html %]</option> >@@ -283,6 +280,7 @@ > [% END %] > [% END %] > </select> >+ <div class="required_label [% required.categorycode | html %]">Required</div> > [% END %] > </li> > [% END %] >@@ -302,13 +300,9 @@ > <ol> > [% UNLESS hidden.defined('title') || !Koha.Preference('BorrowersTitles') %] > <li> >- [% IF mandatory.defined('title') %] >- <label for="borrower_title" class="required">Salutation:</label> >- [% ELSE %] >- <label for="borrower_title">Salutation:</label> >- [% END %] >+ <label for="borrower_title" class="[% required.title | html %]">Salutation:</label> > >- <select id="borrower_title" name="borrower_title"> >+ <select id="borrower_title" name="borrower_title" class="[% required.title | html %]"> > <option value=""></option> > [% FOREACH mt IN Koha.Preference('BorrowersTitles').split('\|') %] > [% IF mt == borrower.title %] >@@ -318,44 +312,33 @@ > [% END %] > [% END %] > </select> >+ <div class="required_label [% required.title | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('surname') %] > <li> >- [% IF mandatory.defined('surname') %] >- <label for="borrower_surname" class="required">Surname:</label> >- [% ELSE %] >- <label for="borrower_surname">Surname:</label> >- [% END %] >+ <label for="borrower_surname" class="[% required.surname | html %]">Surname:</label> > >- <input type="text" id="borrower_surname" name="borrower_surname" value="[% borrower.surname | html %]" /> >- [% IF mandatory.defined('surname') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_surname" name="borrower_surname" value="[% borrower.surname | html %]" class="[% required.surname | html %]" /> >+ <div class="required_label [% required.surname | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('firstname') %] > <li> >- [% IF mandatory.defined('firstname') %] >- <label for="borrower_firstname" class="required">First name:</label> >- [% ELSE %] >- <label for="borrower_firstname">First name:</label> >- [% END %] >+ <label for="borrower_firstname" class="[% required.firstname | html %]">First name:</label> > >- <input type="text" id="borrower_firstname" name="borrower_firstname" value="[% borrower.firstname | html %]" /> >- [% IF mandatory.defined('firstname') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_firstname" name="borrower_firstname" value="[% borrower.firstname | html %]" class="[% required.firstname | html %]" /> >+ <div class="required_label [% required.firstname | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('dateofbirth') %] > <li> >- [% IF mandatory.defined('dateofbirth') %] >- <label for="borrower_dateofbirth" class="required">Date of birth:</label> >- [% ELSE %] >- <label for="borrower_dateofbirth">Date of birth:</label> >- [% END %] >+ <label for="borrower_dateofbirth" class="[% required.dateofbirth | html %]">Date of birth:</label> > >- <input type="text" id="borrower_dateofbirth" name="borrower_dateofbirth" value="[% borrower.dateofbirth | $KohaDates %]" size="10" /> >+ <input type="text" id="borrower_dateofbirth" name="borrower_dateofbirth" value="[% borrower.dateofbirth | $KohaDates %]" size="10" class="[% required.dateofbirth | html %]" /> > > [% UNLESS action == 'edit' && !OPACPatronDetails %] > [% UNLESS ( mandatory.defined('dateofbirth') ) %] >@@ -363,33 +346,25 @@ > [% END %] > [% END %] > >- [% IF mandatory.defined('dateofbirth') %]<span class="required">Required</span>[% END %] >+ <div class="required_label [% required.dateofbirth | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('initials') %] > <li> >- [% IF mandatory.defined('initials') %] >- <label for="borrower_initials" class="required">Initials:</label> >- [% ELSE %] >- <label for="borrower_initials">Initials:</label> >- [% END %] >+ <label for="borrower_initials" class="[% required.initials | html %]">Initials:</label> > >- <input type="text" id="borrower_initials" name="borrower_initials" value="[% borrower.initials | html %]" /> >- [% IF mandatory.defined('initials') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_initials" name="borrower_initials" value="[% borrower.initials | html %]" class="[% required.initials | html %]" /> >+ <div class="required_label [% required.initials | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('othernames') %] > <li> >- [% IF mandatory.defined('othernames') %] >- <label for="borrower_othernames" class="required">Other names:</label> >- [% ELSE %] >- <label for="borrower_othernames">Other names:</label> >- [% END %] >+ <label for="borrower_othernames" class="[% required.othernames | html %]">Other names:</label> > >- <input type="text" id="borrower_othernames" name="borrower_othernames" value="[% borrower.othernames | html %]" /> >- [% IF mandatory.defined('othernames') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_othernames" name="borrower_othernames" value="[% borrower.othernames | html %]" class="[% required.othernames | html %]" /> >+ <div class="required_label [% required.initials | html %]">Required</div> > </li> > [% END %] > >@@ -449,14 +424,10 @@ > > [% UNLESS hidden.defined('address') %] > <li> >- [% IF mandatory.defined('address') %] >- <label for="borrower_address" class="required">Address:</label> >- [% ELSE %] >- <label for="borrower_address">Address:</label> >- [% END %] >+ <label for="borrower_address" class="[% required.address | html %]">Address:</label> > >- <input type="text" id="borrower_address" name="borrower_address" value="[% borrower.address | html %]" /> >- [% IF mandatory.defined('address') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_address" name="borrower_address" value="[% borrower.address | html %]" class="[% required.address | html %]" /> >+ <div class="required_label [% required.address | html %]">Required</div> > </li> > [% END %] > >@@ -464,66 +435,46 @@ > > [% UNLESS hidden.defined('address2') %] > <li> >- [% IF mandatory.defined('address2') %] >- <label for="borrower_address2" class="required">Address 2:</label> >- [% ELSE %] >- <label for="borrower_address2">Address 2:</label> >- [% END %] >+ <label for="borrower_address2" class="[% required.address2 | html %]">Address 2:</label> > >- <input type="text" id="borrower_address2" name="borrower_address2" value="[% borrower.address2 | html %]" /> >- [% IF mandatory.defined('address2') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_address2" name="borrower_address2" value="[% borrower.address2 | html %]" class="[% required.address2 | html %]" /> >+ <div class="required_label [% required.address2 | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('city') %] > <li> >- [% IF mandatory.defined('city') %] >- <label for="borrower_city" class="required">City:</label> >- [% ELSE %] >- <label for="borrower_city">City:</label> >- [% END %] >+ <label for="borrower_city" class="[% required.city | html %]">City:</label> > >- <input type="text" id="borrower_city" name="borrower_city" value="[% borrower.city | html %]" /> >- [% IF mandatory.defined('city') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_city" name="borrower_city" value="[% borrower.city | html %]" class="[% required.city | html %]" /> >+ <div class="required_label [% required.city | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('state') %] > <li> >- [% IF mandatory.defined('state') %] >- <label for="borrower_state" class="required">State:</label> >- [% ELSE %] >- <label for="borrower_state">State:</label> >- [% END %] >+ <label for="borrower_state" class="[% required.state | html %]">State:</label> > >- <input type="text" id="borrower_state" name="borrower_state" value="[% borrower.state | html %]" /> >- [% IF mandatory.defined('state') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_state" name="borrower_state" value="[% borrower.state | html %]" class="[% required.state | html %]" /> >+ <div class="required_label [% required.state | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('zipcode') %] > <li> >- [% IF mandatory.defined('zipcode') %] >- <label for="borrower_zipcode" class="required">ZIP/Postal code:</label> >- [% ELSE %] >- <label for="borrower_zipcode">ZIP/Postal code:</label> >- [% END %] >+ <label for="borrower_zipcode" class="[% required.zipcode | html %]">ZIP/Postal code:</label> > >- <input type="text" id="borrower_zipcode" name="borrower_zipcode" value="[% borrower.zipcode | html %]" /> >- [% IF mandatory.defined('zipcode') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_zipcode" name="borrower_zipcode" value="[% borrower.zipcode | html %]" class="[% required.zipcode | html %]" /> >+ <div class="required_label [% required.zipcode | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('country') %] > <li> >- [% IF mandatory.defined('country') %] >- <label for="borrower_country" class="required">Country:</label> >- [% ELSE %] >- <label for="borrower_country">Country:</label> >- [% END %] >+ <label for="borrower_country" class="[% required.country | html %]">Country:</label> > >- <input type="text" id="borrower_country" name="borrower_country" value="[% borrower.country | html %]" /> >- [% IF mandatory.defined('country') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_country" name="borrower_country" value="[% borrower.country | html %]" class="[% required.country | html %]" /> >+ <div class="required_label [% required.country | html %]">Required</div> > </li> > [% END %] > >@@ -543,92 +494,64 @@ > <ol> > [% UNLESS hidden.defined('phone') %] > <li> >- [% IF mandatory.defined('phone') %] >- <label for="borrower_phone" class="required">Primary phone:</label> >- [% ELSE %] >- <label for="borrower_phone">Primary phone:</label> >- [% END %] >+ <label for="borrower_phone" class="[% required.phone | html %]">Primary phone:</label> > >- <input type="text" id="borrower_phone" name="borrower_phone" value="[% borrower.phone | html %]" /> >- [% IF mandatory.defined('phone') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_phone" name="borrower_phone" value="[% borrower.phone | html %]" class="[% required.phone | html %]" /> >+ <div class="required_label [% required.phone | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('phonepro') %] > <li> >- [% IF mandatory.defined('phonepro') %] >- <label for="borrower_phonepro" class="required">Secondary phone:</label> >- [% ELSE %] >- <label for="borrower_phonepro">Secondary phone:</label> >- [% END %] >+ <label for="borrower_phonepro" class="[% required.phonepro | html %]">Secondary phone:</label> > >- <input type="text" id="borrower_phonepro" name="borrower_phonepro" value="[% borrower.phonepro | html %]" /> >- [% IF mandatory.defined('phonepro') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_phonepro" name="borrower_phonepro" value="[% borrower.phonepro | html %]" class="[% required.phonepro | html %]" /> >+ <div class="required_label [% required.phonepro | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('mobile') %] > <li> >- [% IF mandatory.defined('mobile') %] >- <label for="borrower_mobile" class="required">Other phone:</label> >- [% ELSE %] >- <label for="borrower_mobile">Other phone:</label> >- [% END %] >+ <label for="borrower_mobile" class="[% required.mobile | html %]">Other phone:</label> > >- <input type="text" id="borrower_mobile" name="borrower_mobile" value="[% borrower.mobile | html %]" /> >- [% IF mandatory.defined('mobile') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_mobile" name="borrower_mobile" value="[% borrower.mobile | html %]" class="[% required.mobile | html %]" /> >+ <div class="required_label [% required.mobile | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('email') %] > <li> >- [% IF mandatory.defined('email') %] >- <label for="borrower_email" class="required">Primary email:</label> >- [% ELSE %] >- <label for="borrower_email">Primary email:</label> >- [% END %] >+ <label for="borrower_email" class="[% required.email | html %]">Primary email:</label> > >- <input type="text" id="borrower_email" name="borrower_email" value="[% borrower.email | html %]" /> >- [% IF mandatory.defined('email') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_email" name="borrower_email" value="[% borrower.email | html %]" class="[% required.email | html %]" /> >+ <div class="required_label [% required.email | html %]">Required</div> > </li> > > [% IF action != 'edit' and Koha.Preference('PatronSelfRegistrationConfirmEmail') %] > <li> >- [% IF mandatory.defined('email') %] >- <label for="borrower_repeat_email" class="required">Confirm primary email:</label> >- [% ELSE %] >- <label for="borrower_repeat_email">Confirm primary email:</label> >- [% END %] >+ <label for="borrower_repeat_email" class="[% required.email | html %]">Confirm primary email:</label> > >- <input type="text" id="borrower_repeat_email" name="borrower_repeat_email" autocomplete=off> >- [% IF mandatory.defined('email') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_repeat_email" name="borrower_repeat_email" autocomplete="off" class="[% required.email | html %]"> >+ <div class="required_label [% required.email | html %]">Required</div> > </li> > [% END %] > [% END %] > > [% UNLESS hidden.defined('emailpro') %] > <li> >- [% IF mandatory.defined('emailpro') %] >- <label for="borrower_emailpro" class="required">Secondary email:</label> >- [% ELSE %] >- <label for="borrower_emailpro">Secondary email:</label> >- [% END %] >+ <label for="borrower_emailpro" class="[% required.emailpro | html %]">Secondary email:</label> > >- <input type="text" id="borrower_emailpro" name="borrower_emailpro" value="[% borrower.emailpro | html %]" /> >- [% IF mandatory.defined('emailpro') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_emailpro" name="borrower_emailpro" value="[% borrower.emailpro | html %]" class="[% required.emailpro | html %]" /> >+ <div class="required_label [% required.emailpro | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('fax') %] > <li> >- [% IF mandatory.defined('fax') %] >- <label for="borrower_fax" class="required">Fax:</label> >- [% ELSE %] >- <label for="borrower_fax">Fax:</label> >- [% END %] >+ <label for="borrower_fax" class="[% required.fax | html %]">Fax:</label> > >- <input type="text" id="borrower_fax" name="borrower_fax" value="[% borrower.fax | html %]" /> >- [% IF mandatory.defined('fax') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_fax" name="borrower_fax" value="[% borrower.fax | html %]" class="[% required.fax | html %]" /> >+ <div class="required_label [% required.fax | html %]">Required</div> > </li> > [% END %] > </ol> >@@ -647,118 +570,82 @@ > <ol> > [% UNLESS hidden.defined('B_address') %] > <li> >- [% IF mandatory.defined('B_address') %] >- <label for="borrower_B_address" class="required">Address:</label> >- [% ELSE %] >- <label for="borrower_B_address">Address:</label> >- [% END %] >+ <label for="borrower_B_address" class="[% required.B_address | html %]">Address:</label> > >- <input type="text" id="borrower_B_address" name="borrower_B_address" value="[% borrower.B_address | html %]" /> >- [% IF mandatory.defined('B_address') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_address" name="borrower_B_address" value="[% borrower.B_address | html %]" class="[% required.B_address | html %]" /> >+ <div class="required_label [% required.B_address | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_address2') %] > <li> >- [% IF mandatory.defined('B_address2') %] >- <label for="borrower_B_address2" class="required">Address 2:</label> >- [% ELSE %] >- <label for="borrower_B_address2">Address 2:</label> >- [% END %] >+ <label for="borrower_B_address2" class="[% required.B_address | html %]">Address 2:</label> > >- <input type="text" id="borrower_B_address2" name="borrower_B_address2" value="[% borrower.B_address2 | html %]" /> >- [% IF mandatory.defined('B_address2') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_address2" name="borrower_B_address2" value="[% borrower.B_address2 | html %]" class="[% required.B_address | html %]" /> >+ <div class="required_label [% required.B_address2 | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_city') %] > <li> >- [% IF mandatory.defined('B_city') %] >- <label for="borrower_B_city" class="required">City:</label> >- [% ELSE %] >- <label for="borrower_B_city">City:</label> >- [% END %] >+ <label for="borrower_B_city" class="[% required.B_city | html %]">City:</label> > >- <input type="text" id="borrower_B_city" name="borrower_B_city" value="[% borrower.B_city | html %]" /> >- [% IF mandatory.defined('B_city') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_city" name="borrower_B_city" value="[% borrower.B_city | html %]" class="[% required.B_city | html %]" /> >+ <div class="required_label [% required.B_city | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_state') %] > <li> >- [% IF mandatory.defined('B_state') %] >- <label for="borrower_B_state" class="required">State:</label> >- [% ELSE %] >- <label for="borrower_B_state">State:</label> >- [% END %] >+ <label for="borrower_B_state" class="[% required.B_state | html %]">State:</label> > >- <input type="text" id="borrower_B_state" name="borrower_B_state" value="[% borrower.B_state | html %]" /> >- [% IF mandatory.defined('B_state') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_state" name="borrower_B_state" value="[% borrower.B_state | html %]" class="[% required.B_state | html %]" /> >+ <div class="required_label [% required.B_state | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_zipcode') %] > <li> >- [% IF mandatory.defined('B_zipcode') %] >- <label for="borrower_B_zipcode" class="required">ZIP/Postal code:</label> >- [% ELSE %] >- <label for="borrower_B_zipcode">ZIP/Postal code:</label> >- [% END %] >+ <label for="borrower_B_zipcode" class="[% required.B_zipcode | html %]">ZIP/Postal code:</label> > >- <input type="text" id="borrower_B_zipcode" name="borrower_B_zipcode" value="[% borrower.B_zipcode | html %]" /> >- [% IF mandatory.defined('B_zipcode') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_zipcode" name="borrower_B_zipcode" value="[% borrower.B_zipcode | html %]" class="[% required.B_zipcode | html %]" /> >+ <div class="required_label [% required.B_zipcode | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_country') %] > <li> >- [% IF mandatory.defined('B_country') %] >- <label for="borrower_B_country" class="required">Country:</label> >- [% ELSE %] >- <label for="borrower_B_country">Country:</label> >- [% END %] >+ <label for="borrower_B_country" class="[% required.B_country | html %]">Country:</label> > >- <input type="text" id="borrower_B_country" name="borrower_B_country" value="[% borrower.B_country | html %]" /> >- [% IF mandatory.defined('B_country') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_country" name="borrower_B_country" value="[% borrower.B_country | html %]" class="[% required.B_country | html %]" /> >+ <div class="required_label [% required.B_country | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_phone') %] > <li> >- [% IF mandatory.defined('B_phone') %] >- <label for="borrower_B_phone" class="required">Phone:</label> >- [% ELSE %] >- <label for="borrower_B_phone">Phone:</label> >- [% END %] >+ <label for="borrower_B_phone" class="[% required.B_phone | html %]">Phone:</label> > >- <input type="text" id="borrower_B_phone" name="borrower_B_phone" value="[% borrower.B_phone | html %]" /> >- [% IF mandatory.defined('B_phone') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_phone" name="borrower_B_phone" value="[% borrower.B_phone | html %]" class="[% required.B_phone | html %]" /> >+ <div class="required_label [% required.B_phone | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('B_email') %] > <li> >- [% IF mandatory.defined('B_email') %] >- <label for="borrower_B_email" class="required">Email:</label> >- [% ELSE %] >- <label for="borrower_B_email">Email:</label> >- [% END %] >+ <label for="borrower_B_email" class="[% required.B_email | html %]">Email:</label> > >- <input type="text" id="borrower_B_email" name="borrower_B_email" value="[% borrower.B_email | html %]" /> >- [% IF mandatory.defined('B_email') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_B_email" name="borrower_B_email" value="[% borrower.B_email | html %]" class="[% required.B_email | html %]" /> >+ <div class="required_label [% required.B_email | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('contactnote') %] > <li> >- [% IF mandatory.defined('contactnote') %] >- <label for="borrower_contactnote" class="required">Contact note:</label> >- [% ELSE %] >- <label for="borrower_contactnote">Contact note:</label> >- [% END %] >+ <label for="borrower_contactnote" class="[% required.contactnote | html %]">Contact note:</label> > >- <textarea id="borrower_contactnote" name="borrower_contactnote" cols="30" rows="2">[% borrower.contactnote | html %]</textarea> >- [% IF mandatory.defined('contactnote') %]<span class="required">Required</span>[% END %] >+ <textarea id="borrower_contactnote" name="borrower_contactnote" cols="30" rows="2" class="[% required.contactnote | html %]">[% borrower.contactnote | html %]</textarea> >+ <div class="required_label [% required.contactnote | html %]">Required</div> > </li> > [% END %] > >@@ -778,118 +665,82 @@ > <ol> > [% UNLESS hidden.defined('altcontactsurname') %] > <li> >- [% IF mandatory.defined('altcontactsurname') %] >- <label for="borrower_altcontactsurname" class="required">Surname:</label> >- [% ELSE %] >- <label for="borrower_altcontactsurname">Surname:</label> >- [% END %] >+ <label for="borrower_altcontactsurname" class="[% required.altcontactsurname | html %]">Surname:</label> > >- <input type="text" id="borrower_altcontactsurname" name="borrower_altcontactsurname" value="[% borrower.altcontactsurname | html %]" /> >- [% IF mandatory.defined('altcontactsurname') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactsurname" name="borrower_altcontactsurname" value="[% borrower.altcontactsurname | html %]" class="[% required.altcontactsurname | html %]" /> >+ <div class="required_label [% required.altcontactsurname | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactfirstname') %] > <li> >- [% IF mandatory.defined('altcontactfirstname') %] >- <label for="borrower_altcontactfirstname" class="required">First name:</label> >- [% ELSE %] >- <label for="borrower_altcontactfirstname">First name:</label> >- [% END %] >+ <label for="borrower_altcontactfirstname" class="[% required.altcontactfirstname | html %]">First name:</label> > >- <input type="text" id="borrower_altcontactfirstname" name="borrower_altcontactfirstname" value="[% borrower.altcontactfirstname | html %]" /> >- [% IF mandatory.defined('altcontactfirstname') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactfirstname" name="borrower_altcontactfirstname" value="[% borrower.altcontactfirstname | html %]" class="[% required.altcontactfirstname | html %]" /> >+ <div class="required_label [% required.altcontactfirstname | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactaddress1') %] > <li> >- [% IF mandatory.defined('altcontactaddress1') %] >- <label for="borrower_altcontactaddress1" class="required">Address:</label> >- [% ELSE %] >- <label for="borrower_altcontactaddress1">Address:</label> >- [% END %] >+ <label for="borrower_altcontactaddress1" class="[% required.altcontactaddress1 | html %]">Address:</label> > >- <input type="text" id="borrower_altcontactaddress1" name="borrower_altcontactaddress1" value="[% borrower.altcontactaddress1 | html %]" /> >- [% IF mandatory.defined('altcontactaddress1') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactaddress1" name="borrower_altcontactaddress1" value="[% borrower.altcontactaddress1 | html %]" class="[% required.altcontactaddress1 | html %]" /> >+ <div class="required_label [% required.altcontactaddress1 | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactaddress2') %] > <li> >- [% IF mandatory.defined('altcontactaddress2') %] >- <label for="borrower_altcontactaddress2" class="required">Address 2:</label> >- [% ELSE %] >- <label for="borrower_altcontactaddress2">Address 2:</label> >- [% END %] >+ <label for="borrower_altcontactaddress2" class="[% required.altcontactaddress2 | html %]">Address 2:</label> > >- <input type="text" id="borrower_altcontactaddress2" name="borrower_altcontactaddress2" value="[% borrower.altcontactaddress2 | html %]" /> >- [% IF mandatory.defined('altcontactaddress2') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactaddress2" name="borrower_altcontactaddress2" value="[% borrower.altcontactaddress2 | html %]" class="[% required.altcontactaddress2 | html %]" /> >+ <div class="required_label [% required.altcontactaddress2 | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactaddress3') %] > <li> >- [% IF mandatory.defined('altcontactaddress3') %] >- <label for="borrower_altcontactaddress3" class="required">City:</label> >- [% ELSE %] >- <label for="borrower_altcontactaddress3">City:</label> >- [% END %] >+ <label for="borrower_altcontactaddress3" class="[% required.altcontactaddress3 | html %]">City:</label> > >- <input type="text" id="borrower_altcontactaddress3" name="borrower_altcontactaddress3" value="[% borrower.altcontactaddress3 | html %]" /> >- [% IF mandatory.defined('altcontactaddress3') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactaddress3" name="borrower_altcontactaddress3" value="[% borrower.altcontactaddress3 | html %]" class="[% required.altcontactaddress3 | html %]" /> >+ <div class="required_label [% required.altcontactaddress3 | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactstate') %] > <li> >- [% IF mandatory.defined('altcontactstate') %] >- <label for="borrower_altcontactstate" class="required">State:</label> >- [% ELSE %] >- <label for="borrower_altcontactstate">State:</label> >- [% END %] >+ <label for="borrower_altcontactstate" class="[% required.altcontactstate | html %]">State:</label> > >- <input type="text" id="borrower_altcontactstate" name="borrower_altcontactstate" value="[% borrower.altcontactstate | html %]" /> >- [% IF mandatory.defined('altcontactstate') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactstate" name="borrower_altcontactstate" value="[% borrower.altcontactstate | html %]" class="[% required.altcontactstate | html %]" /> >+ <div class="required_label [% required.altcontactstate | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactzipcode') %] > <li> >- [% IF mandatory.defined('altcontactzipcode') %] >- <label for="borrower_altcontactzipcode" class="required">ZIP/Postal code:</label> >- [% ELSE %] >- <label for="borrower_altcontactzipcode">ZIP/Postal code:</label> >- [% END %] >+ <label for="borrower_altcontactzipcode" class="[% required.altcontactzipcode | html %]">ZIP/Postal code:</label> > >- <input type="text" id="borrower_altcontactzipcode" name="borrower_altcontactzipcode" value="[% borrower.altcontactzipcode | html %]" /> >- [% IF mandatory.defined('altcontactzipcode') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactzipcode" name="borrower_altcontactzipcode" value="[% borrower.altcontactzipcode | html %]" class="[% required.altcontactzipcode | html %]" /> >+ <div class="required_label [% required.altcontactzipcode | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactcountry') %] > <li> >- [% IF mandatory.defined('altcontactcountry') %] >- <label for="borrower_altcontactcountry" class="required">Country:</label> >- [% ELSE %] >- <label for="borrower_altcontactcountry">Country:</label> >- [% END %] >+ <label for="borrower_altcontactcountry" class="[% required.altcontactcountry | html %]">Country:</label> > >- <input type="text" id="borrower_altcontactcountry" name="borrower_altcontactcountry" value="[% borrower.altcontactcountry | html %]" /> >- [% IF mandatory.defined('altcontactcountry') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactcountry" name="borrower_altcontactcountry" value="[% borrower.altcontactcountry | html %]" class="[% required.altcontactcountry | html %]" /> >+ <div class="required_label [% required.altcontactcountry | html %]">Required</div> > </li> > [% END %] > > [% UNLESS hidden.defined('altcontactphone') %] > <li> >- [% IF mandatory.defined('altcontactphone') %] >- <label for="borrower_altcontactphone" class="required">Phone:</label> >- [% ELSE %] >- <label for="borrower_altcontactphone">Phone:</label> >- [% END %] >+ <label for="borrower_altcontactphone" class="[% required.altcontactphone | html %]">Phone:</label> > >- <input type="text" id="borrower_altcontactphone" name="borrower_altcontactphone" value="[% borrower.altcontactphone | html %]" /> >- [% IF mandatory.defined('altcontactphone') %]<span class="required">Required</span>[% END %] >+ <input type="text" id="borrower_altcontactphone" name="borrower_altcontactphone" value="[% borrower.altcontactphone | html %]" class="[% required.altcontactphone | html %]" /> >+ <div class="required_label [% required.altcontactphone | html %]">Required</div> > </li> > [% END %] > </ol> >@@ -918,27 +769,16 @@ > [% END %] > </div> > >- [% IF mandatory.defined('password') %] >- <ol> >- <li><label for="borrower_password" class="required">Password</label> >- <input type="password" name="borrower_password" id="password" /> >- <span class="required">Required</span> >- </li> >- <li><label for="borrower_password2" class="required">Confirm password</label> >- <input type="password" name="borrower_password2" id="password2" /> >- <span class="required">Required</span> >- </li> >- </ol> >- [% ELSE %] >- <ol> >- <li><label for="borrower_password">Password</label> >- <input type="password" name="borrower_password" id="password" /> >- </li> >- <li><label for="borrower_password2">Confirm password</label> >- <input type="password" name="borrower_password2" id="password2" /> >- </li> >- </ol> >- [% END %] >+ <ol> >+ <li><label for="borrower_password" class="[% required.password | html %]">Password</label> >+ <input type="password" name="borrower_password" id="password" class="[% required.password | html %]" /> >+ <div class="required_label [% required.password | html %]">Required</div> >+ </li> >+ <li><label for="borrower_password2" class="[% required.password | html %]">Confirm password</label> >+ <input type="password" name="borrower_password2" id="password2" /> >+ <div class="required_label [% required.password | html %]">Required</div> >+ </li> >+ </ol> > </fieldset> > </div> <!-- /.col --> > </div> <!-- /.row --> >@@ -987,7 +827,7 @@ > <textarea rows="2" cols="30" id="[% form_id | html %]" name="patron_attribute_value">[% pa_value | html %]</textarea> > [% END %] > [% IF pa.type.mandatory %] >- <span class="required">Required</span> >+ <div class="required">Required</div> > [% END %] > <a href="#" class="clear-attribute">Clear</a> > [% IF ( pa.type.repeatable ) %] >@@ -1017,7 +857,7 @@ > <legend>GDPR consent</legend> > <ol> > <li> >- <label></label><span><input type="checkbox" name="borrower_gdpr_proc_consent" value="agreed"> I agree with your processing of my personal data as outlined in the <a target="_blank" href="[% Koha.Preference('PrivacyPolicyURL') | url %]">privacy policy</a>. <span class="required">Required</span></span> >+ <label></label><span><input type="checkbox" name="borrower_gdpr_proc_consent" value="agreed"> I agree with your processing of my personal data as outlined in the <a target="_blank" href="[% Koha.Preference('PrivacyPolicyURL') | url %]">privacy policy</a>. <div class="required">Required</div></span> > </li> > </ol> > </fieldset> >@@ -1036,6 +876,7 @@ > <label for="captcha" class="required">Verification:</label> > > <input type="text" name="captcha" id="captcha" /> >+ <div class="required_label required">Required</div> > <input type="hidden" name="captcha_digest" value="[% captcha_digest | html %]" /> > > <span class="hint">Please type the following characters into the preceding box: <strong>[% captcha | html %]</strong></span> >@@ -1075,6 +916,7 @@ > > [% INCLUDE 'opac-bottom.inc' %] > [% BLOCK jsinclude %] >+ [% INCLUDE 'validator-strings.inc' %] > [% Asset.js("lib/jquery/plugins/jquery.validate.min.js") | $raw %] > [% INCLUDE 'calendar.inc' %] > >@@ -1105,16 +947,10 @@ > email: true > }, > borrower_password: { >- [% IF mandatory.defined('password') %] >- required: true, >- [% END %] > password_strong: true, > password_no_spaces: true > }, > borrower_password2: { >- [% IF mandatory.defined('password') %] >- required: true, >- [% END %] > password_match: true > }, > captcha: { >@@ -1129,18 +965,13 @@ > form.beenSubmitted = true; > form.submit(); > } >- }, >- errorPlacement: function(error, element) { >- offset = element.offset(); >- error.insertAfter(element) >- error.addClass('error'); // add a class to the wrapper >- error.css('position', 'absolute'); >- error.css('left', offset.left + element.outerWidth() + 10); >- error.css('top', offset.top); >- error.css('width', 'auto'); > } > }); > >+ $("input.required,select.required,textarea.required").rules("add", { >+ required: true >+ }); >+ > [% IF patron.guarantor_relationships && !Koha.Preference('OPACPrivacy') %] > > [% IF Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %] >@@ -1254,7 +1085,7 @@ > $('select#borrower_categorycode').change(setPwdMessage); > }); > [% END %] >- //]]> >+ > </script> > [% PROCESS 'password_check.inc' new_password => 'borrower_password', category_selector => '#borrower_categorycode', RequireStrongPassword => patron ? patron.category.effective_require_strong_password : defaultCategory.effective_require_strong_password, minPasswordLength => patron ? patron.category.effective_min_password_length : defaultCategory.effective_min_password_length %] > >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 27668
:
116689
|
117716
| 117799