Bug 18298: minPaswordLength should not be < 3
[koha.git] / koha-tmpl / opac-tmpl / bootstrap / en / modules / opac-memberentry.tt
1 [% USE AuthorisedValues %]
2 [% USE Categories %]
3 [% USE Koha %]
4 [% USE Branches %]
5 [% USE KohaDates %]
6 [% USE Math %]
7 [% SET userupdateview = 1 %]
8
9 [% INCLUDE 'doc-head-open.inc' %]
10     <title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog &rsaquo; [% IF action == 'edit' %]Update your personal details[% ELSE %]Register a new account[% END %]</title>
11 [% INCLUDE 'doc-head-close.inc' %]
12 [% BLOCK cssinclude %][% END %]
13 </head>
14
15 [% IF action == 'edit' %]
16 [% INCLUDE 'bodytag.inc' bodyid='opac-patron-update' %]
17 [% ELSE %]
18 <body id="opac-patron-registration" class="opac">
19 [% END %]
20 [% INCLUDE 'masthead.inc' %]
21
22 <div class="main">
23     <ul class="breadcrumb">
24         <li><a href="/cgi-bin/koha/opac-main.pl">Home</a> <span class="divider">&rsaquo;</span></li>
25         [% IF action == 'edit' %]
26             <li><a href="/cgi-bin/koha/opac-user.pl">[% borrower.firstname %] [% borrower.surname %]</a> <span class="divider">&rsaquo;</span></li>
27             <li><a href="#">Your personal details</a></li>
28         [% ELSE %]
29             <li><a href="#">Register a new account</a></li>
30         [% END %]
31     </ul>
32
33     <div class="container-fluid">
34         <div class="row-fluid">
35             <div class="span2">
36                 <div id="navigation">
37                     [% INCLUDE 'navigation.inc' IsPatronPage=1 %]
38                 </div>
39             </div>
40             <div class="span10">
41                 [% IF action == 'edit' %]
42                     <div id="update-account">
43                 [% ELSE %]
44                     <div id="add-account">
45                 [% END %]
46
47                 [% IF action == 'edit' %]
48                     [% UNLESS OPACPatronDetails %]
49                         <div class="alert alert-info">To make changes to your record please contact the library.</div>
50                     [% END %]
51                     [% IF nochanges %]
52                         <div class="alert alert-error">No changes were made.</div>
53                     [% END %]
54                 [% END %]
55
56                 [% IF empty_mandatory_fields %]
57                     <div class="alert">You have not filled out all required fields. Please fill in all missing fields and resubmit.</div>
58                 [% END %]
59
60                 [% IF invalid_form_fields %]
61                     <div class="alert alert-error"><strong>The following fields contain invalid information:</strong>
62                         <ul>
63                             [% FOREACH field IN invalid_form_fields %]
64                                 [% IF field == "email" %]<li>Contact information: <a href="#borrower_email">primary email address</a></li>[% END %]
65                                 [% IF field == "emailpro" %]<li>Contact information: <a href="#borrower_emailpro">secondary email address</a></li>[% END %]
66                                 [% IF field == "B_email" %]<li>Alternate address information: <a href="#borrower_B_email">email address</a></li>[% END %]
67                                 [% IF field == "password_match" %]<li>Passwords do not match! <a href="#password">password</a></li>[% END %]
68                                 [% IF field == "password_invalid" %]<li>Password does not meet minimum requirements! <a href="#password">password</a></li>[% END %]
69                                 [% IF field == "password_spaces" %]<li>Password contains leading and/or trailing spaces! <a href="#password">password</a></li>[% END %]
70                                 [% IF field == "duplicate_email" %]
71                                     <li>This email address already exists in our database.</li>
72                                 [% END %]
73                             [% END %]
74                         </ul>
75                         <span>Please correct and resubmit.</span>
76                     </div>
77                 [% END %]
78
79                 [% IF cardnumber_wrong_length || cardnumber_already_exists %]
80                     <div class="alert alert-error">
81                         [% IF cardnumber_wrong_length %]
82                         <a href="#borrower_cardnumber"><strong>The entered card number is the wrong length.</strong></a>
83                         [% ELSIF cardnumber_already_exists %]
84                         <a href="#borrower_cardnumber"><strong>The entered card number is already in use.</strong></a>
85                         [% END %]
86                         <span>Please correct and resubmit.</span>
87                     </div>
88                 [% END %]
89
90                 [% IF failed_captcha %]
91                     <div class="alert">You typed in the wrong characters in the box before submitting. Please try again.</div>
92                 [% END %]
93
94                 [% IF borrower.guarantorid && !Koha.Preference('OPACPrivacy') && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
95                     <fieldset class="rows" id="memberentry_privacy">
96                         <legend id="privacy_legend">Privacy</legend>
97                         <ol>
98                             <li>
99                                 <label>Allow your guarantor to view your current checkouts?</label>
100                                 <select id="privacy_guarantor_checkouts">
101                                     <option value="0">No</option>
102                                     [% IF borrower.privacy_guarantor_checkouts %]
103                                         <option value="1" selected="selected">Yes</option>
104                                     [% ELSE %]
105                                         <option value="1">Yes</option>
106                                     [% END %]
107                                 </select>
108                                 <span class="hint">
109                                     <a id="update_privacy_guarantor_checkouts" href="#" class="btn">Update</a>
110                                     <span id="update_privacy_guarantor_checkouts_message" class="alert" style="display:none"></span>
111                                 </span>
112                                 <span class="hint">
113                                     Your guarantor is <i>[% guarantor.firstname %] [% guarantor.surname %]</i>
114                                 </span>
115                             </li>
116                         </ol>
117                     </fieldset>
118                 [% END %]
119                 [% IF ( extended_unique_id_failed_code ) %]
120                     <div class="alert" id="extended_unique_id_failed"><a href="#patron-attr-start-[% extended_unique_id_failed_code %]">[% extended_unique_id_failed_description _ ': ' %]</a> Value is already in use ([% extended_unique_id_failed_value %])</div>
121                 [% END %]
122
123                 <form method="post" action="/cgi-bin/koha/opac-memberentry.pl" id="memberentry-form">
124
125                 [%# Following on one line for translatability %]
126                 [% UNLESS ( hidden.defined('cardnumber') || ( !borrower && Koha.Preference('autoMemberNum') ) ) && hidden.defined('dateexpiry') && hidden.defined('branchcode') && hidden.defined('categorycode') %]
127                     <fieldset class="rows" id="memberentry_library">
128
129                         <legend id="library_legend">Library</legend>
130                             <ol>
131                                 [% UNLESS hidden.defined('cardnumber') || ( !borrower && Koha.Preference('autoMemberNum') ) %]
132                                 <li>
133                                     [% IF mandatory.defined('cardnumber') %]
134                                         <label for="borrower_cardnumber" class="required">Library card number:</label>
135                                     [% ELSE %]
136                                         <label for="borrower_cardnumber">Library card number:</label>
137                                     [% END %]
138                                     [% IF borrower && !(cardnumber_wrong_length || cardnumber_already_exists) %]
139                                         [% borrower.cardnumber %]
140                                     [% ELSE %]
141                                         [% IF minlength_cardnumber == maxlength_cardnumber %]
142                                             <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber %]" minlength="[% minlength_cardnumber %]" maxlength="[% maxlength_cardnumber %]" />
143                                             [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %]
144                                             <div class="hint">Card number must be exactly [% minlength_cardnumber %] characters.</div>
145                                         [% ELSIF minlength_cardnumber && maxlength_cardnumber %]
146                                             <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber %]" minlength="[% minlength_cardnumber %]" maxlength="[% maxlength_cardnumber %]" />
147                                             [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %]
148                                             <div class="hint">Card number must be between [% minlength_cardnumber %] and [% maxlength_cardnumber %] characters.</div>
149                                         [% ELSIF maxlength_cardnumber %]
150                                             <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber %]" maxlength="[% maxlength_cardnumber %]" />
151                                             [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %]
152                                             <div class="hint">Card number can be up to [% maxlength_cardnumber %] characters.</div>
153                                         [% ELSE %]
154                                             <input type="text" id="borrower_cardnumber" name="borrower_cardnumber" size="20" value="[% borrower.cardnumber %]" />
155                                             [% IF ( mandatory.defined('cardnumber') ) %]<span class="required">Required</span>[% END %]
156                                             <div class="hint">There is no minimum or maximum character length.</div>
157                                         [% END %]
158                                     [% END %]
159                                 </li>
160                                 [% END %]
161
162                                 [% UNLESS hidden.defined('dateexpiry') %]
163                                 <li>
164                                     <label>Expiration date:</label>
165                                     [% borrower.dateexpiry | $KohaDates  %]
166                                 </li>
167                                 [% END %]
168
169                                 [% UNLESS hidden.defined('branchcode') %]
170                                     <li>
171                                         [% IF mandatory.defined('branchcode') %]
172                                             <label for="borrower_branchcode" class="required">Home library:</label>
173                                         [% ELSE %]
174                                             <label for="borrower_branchcode">Home library:</label>
175                                         [% END %]
176
177                                         <select id="borrower_branchcode" name="borrower_branchcode">
178                                             [% FOREACH l IN libraries %]
179                                                 [% IF l.branchcode == borrower.branchcode %]
180                                                     <option value="[% l.branchcode | html %]" selected="selected">[% l.branchname %]</option>
181                                                 [% ELSE %]
182                                                     <option value="[% l.branchcode | html %]">[% l.branchname %]</option>
183                                                 [% END %]
184                                             [% END %]
185                                         </select>
186                                     </li>
187                                 [% END %]
188
189                                 [% UNLESS hidden.defined('categorycode') %]
190                                     <li>
191                                         <label for="borrower_categorycode">
192                                         Category:</label>
193
194                                         [% IF borrower %]
195                                             [% Categories.GetName( borrower.categorycode ) %]
196                                             <input type="hidden" name="borrower_categorycode" value="[% borrower.categorycode %]" />
197                                         [% ELSE %]
198                                             <select id="borrower_categorycode" name="borrower_categorycode">
199                                                 [% FOREACH c IN Categories.all() %]
200                                                     [% IF c.categorycode == Koha.Preference('PatronSelfRegistrationDefaultCategory') %]
201                                                         <option value="[% c.categorycode %]" selected="selected">[% c.description %]</option>
202                                                     [% ELSE %]
203                                                         <option value="[% c.categorycode %]">[% c.description %]</option>
204                                                     [% END %]
205                                                 [% END %]
206                                             </select>
207                                         [% END %]
208                                     </li>
209                                 [% END %]
210                             </ol>
211                         </fieldset>
212                 [% END # / defined 'branchcode' %]
213
214                 [%# Following on one line for translatability %]
215                 [% UNLESS hidden.defined('title') && hidden.defined('surname') && hidden.defined('firstname') && hidden.defined('dateofbirth') && hidden.defined('initials') && hidden.defined('othernames') && hidden.defined('sex') %]
216                     <div class="row-fluid">
217                         [% IF ( display_patron_image ) %]
218                             <div class="span8">
219                         [% ELSE %]
220                             <div class="span12">
221                         [% END %]
222                             <fieldset class="rows" id="memberentry_identity">
223                                 <legend id="identity_legend">Identity</legend>
224
225                                 <ol>
226                                     [% UNLESS hidden.defined('title') || !Koha.Preference('BorrowersTitles') %]
227                                         <li>
228                                             [% IF mandatory.defined('title') %]
229                                                 <label for="borrower_title" class="required">Salutation:</label>
230                                             [% ELSE %]
231                                                 <label for="borrower_title">Salutation:</label>
232                                             [% END %]
233
234                                             <select id="borrower_title" name="borrower_title">
235                                                 <option value=""></option>
236                                                 [% FOREACH mt IN Koha.Preference('BorrowersTitles').split('\|') %]
237                                                     [% IF mt == borrower.title %]
238                                                         <option value="[% mt %]" selected="selected">[% mt %]</option>
239                                                     [% ELSE %]
240                                                         <option value="[% mt %]">[% mt %]</option>
241                                                     [% END %]
242                                                 [% END %]
243                                             </select>
244                                         </li>
245                                     [% END %]
246
247                                     [% UNLESS hidden.defined('surname') %]
248                                         <li>
249                                             [% IF mandatory.defined('surname') %]
250                                                 <label for="borrower_surname" class="required">Surname:</label>
251                                             [% ELSE %]
252                                                 <label for="borrower_surname">Surname:</label>
253                                             [% END %]
254
255                                             <input type="text" id="borrower_surname" name="borrower_surname" value="[% borrower.surname %]" />
256                                             [% IF mandatory.defined('surname') %]<span class="required">Required</span>[% END %]
257                                         </li>
258                                     [% END %]
259
260                                     [% UNLESS hidden.defined('firstname') %]
261                                         <li>
262                                             [% IF mandatory.defined('firstname') %]
263                                                 <label for="borrower_firstname" class="required">First name:</label>
264                                             [% ELSE %]
265                                                 <label for="borrower_firstname">First name:</label>
266                                             [% END %]
267
268                                             <input type="text" id="borrower_firstname" name="borrower_firstname" value="[% borrower.firstname %]" />
269                                             [% IF mandatory.defined('firstname') %]<span class="required">Required</span>[% END %]
270                                         </li>
271                                     [% END %]
272
273                                     [% UNLESS hidden.defined('dateofbirth') %]
274                                         <li>
275                                             [% IF mandatory.defined('dateofbirth') %]
276                                                 <label for="borrower_dateofbirth" class="required">Date of birth:</label>
277                                             [% ELSE %]
278                                                 <label for="borrower_dateofbirth">Date of birth:</label>
279                                             [% END %]
280
281                                             <input type="text" id="borrower_dateofbirth" name="borrower_dateofbirth" value="[% borrower.dateofbirth | $KohaDates %]" size="10" />
282
283                                             [% UNLESS action == 'edit' && !OPACPatronDetails %]
284                                                 [% UNLESS ( mandatory.defined('dateofbirth') ) %]
285                                                     <a href="#" style="font-size:85%;text-decoration:none;" class="cleardate">Clear date</a>
286                                                 [% END %]
287                                             [% END %]
288
289                                             [% IF mandatory.defined('dateofbirth') %]<span class="required">Required</span>[% END %]
290                                         </li>
291                                     [% END %]
292
293                                     [% UNLESS hidden.defined('initials') %]
294                                         <li>
295                                             [% IF mandatory.defined('initials') %]
296                                                 <label for="borrower_initials" class="required">Initials:</label>
297                                             [% ELSE %]
298                                                 <label for="borrower_initials">Initials:</label>
299                                             [% END %]
300
301                                             <input type="text" id="borrower_initials" name="borrower_initials" value="[% borrower.initials %]" />
302                                             [% IF mandatory.defined('initials') %]<span class="required">Required</span>[% END %]
303                                         </li>
304                                     [% END %]
305
306                                     [% UNLESS hidden.defined('othernames') %]
307                                         <li>
308                                             [% IF mandatory.defined('othernames') %]
309                                                 <label for="borrower_othernames" class="required">Other names:</label>
310                                             [% ELSE %]
311                                                 <label for="borrower_othernames">Other names:</label>
312                                             [% END %]
313
314                                             <input type="text" id="borrower_othernames" name="borrower_othernames" value="[% borrower.othernames %]" />
315                                             [% IF mandatory.defined('othernames') %]<span class="required">Required</span>[% END %]
316                                         </li>
317                                     [% END %]
318
319                                     [% UNLESS hidden.defined('sex') %]
320                                         <li class="lradio">
321                                             <label for="sex-female" class="radio inline">Female:</label>
322                                             [% IF borrower.sex == 'F' %]
323                                                 <input type="radio" name="borrower_sex" id="sex-female" value="F" checked="checked" />
324                                             [% ELSE %]
325                                                 <input type="radio" name="borrower_sex" id="sex-female" value="F" />
326                                             [% END %]
327
328                                             <label for="sex-male" class="radio inline">Male:</label>
329                                             [% IF borrower.sex == 'M' %]
330                                                 <input type="radio" name="borrower_sex" id="sex-male" value="M" checked="checked" />
331                                             [% ELSE %]
332                                                 <input type="radio" name="borrower_sex" id="sex-male" value="M" />
333                                             [% END %]
334
335                                             <label for="sex-none" class="radio inline">None specified: </label>
336                                             [% IF borrower.sex == '' %]
337                                                 <input type="radio" name="borrower_sex" id="sex-none" value="" checked="checked" />
338                                             [% ELSE %]
339                                                 <input type="radio" name="borrower_sex" id="sex-none" value="" />
340                                             [% END %]
341
342                                             [% IF mandatory.defined('sex') %]<span class="required">Required</span>[% END %]
343                                         </li>
344                                     [% END %]
345                                 </ol>
346                             </fieldset>
347                            </div>
348                         [% IF ( display_patron_image ) %]
349                             <div class="span4">
350                                 <p class="patronimage">
351                                    <img src="/cgi-bin/koha/opac-patron-image.pl" alt="" />
352                                 </p>
353                             </div>
354                         [% END %]
355                     </div>
356                 [% END # /UNLESS fields hidden %]
357
358                 [%# Following on one line for translatability %]
359                 [% UNLESS hidden.defined('streetnumber') && hidden.defined('address') && hidden.defined('address2') && hidden.defined('city') && hidden.defined('state') && hidden.defined('zipcode') && hidden.defined('country') %]
360                     <fieldset class="rows" id="memberentry_mainaddress">
361                         <legend id="mainaddress_legend">Main address</legend>
362
363                         <ol>
364                             [% UNLESS hidden.defined('streetnumber') %]
365                                 <li>
366                                     [% IF mandatory.defined('streetnumber') %]
367                                         <label for="borrower_streetnumber" class="required">Street number:</label>
368                                     [% ELSE %]
369                                         <label for="borrower_streetnumber">Street number:</label>
370                                     [% END %]
371
372                                     <input type="text" id="borrower_streetnumber" name="borrower_streetnumber" value="[% borrower.streetnumber %]" />
373                                     [% IF mandatory.defined('streetnumber') %]<span class="required">Required</span>[% END %]
374                                 </li>
375                             [% END %]
376
377                             [% UNLESS hidden.defined('address') %]
378                                 <li>
379                                     [% IF mandatory.defined('address') %]
380                                         <label for="borrower_address" class="required">Address:</label>
381                                     [% ELSE %]
382                                         <label for="borrower_address">Address:</label>
383                                     [% END %]
384
385                                     <input type="text" id="borrower_address" name="borrower_address" value="[% borrower.address %]" />
386                                     [% IF mandatory.defined('address') %]<span class="required">Required</span>[% END %]
387                                 </li>
388                             [% END %]
389
390                             [% UNLESS hidden.defined('address2') %]
391                                 <li>
392                                     [% IF mandatory.defined('address2') %]
393                                         <label for="borrower_address2" class="required">Address 2:</label>
394                                     [% ELSE %]
395                                         <label for="borrower_address2">Address 2:</label>
396                                     [% END %]
397
398                                     <input type="text" id="borrower_address2" name="borrower_address2" value="[% borrower.address2 %]" />
399                                     [% IF mandatory.defined('address2') %]<span class="required">Required</span>[% END %]
400                                 </li>
401                             [% END %]
402
403                             [% UNLESS hidden.defined('city') %]
404                                 <li>
405                                     [% IF mandatory.defined('city') %]
406                                         <label for="borrower_city" class="required">City:</label>
407                                     [% ELSE %]
408                                         <label for="borrower_city">City:</label>
409                                     [% END %]
410
411                                     <input type="text" id="borrower_city" name="borrower_city" value="[% borrower.city %]" />
412                                     [% IF mandatory.defined('city') %]<span class="required">Required</span>[% END %]
413                                 </li>
414                             [% END %]
415
416                             [% UNLESS hidden.defined('state') %]
417                                 <li>
418                                     [% IF mandatory.defined('state') %]
419                                         <label for="borrower_state" class="required">State:</label>
420                                     [% ELSE %]
421                                         <label for="borrower_state">State:</label>
422                                     [% END %]
423
424                                     <input type="text" id="borrower_state" name="borrower_state" value="[% borrower.state %]" />
425                                     [% IF mandatory.defined('state') %]<span class="required">Required</span>[% END %]
426                                 </li>
427                             [% END %]
428
429                             [% UNLESS hidden.defined('zipcode') %]
430                                 <li>
431                                     [% IF mandatory.defined('zipcode') %]
432                                         <label for="borrower_zipcode" class="required">ZIP/Postal code:</label>
433                                     [% ELSE %]
434                                         <label for="borrower_zipcode">ZIP/Postal code:</label>
435                                     [% END %]
436
437                                     <input type="text" id="borrower_zipcode" name="borrower_zipcode" value="[% borrower.zipcode %]" />
438                                     [% IF mandatory.defined('zipcode') %]<span class="required">Required</span>[% END %]
439                                 </li>
440                             [% END %]
441
442                             [% UNLESS hidden.defined('country') %]
443                                 <li>
444                                     [% IF mandatory.defined('country') %]
445                                         <label for="borrower_country" class="required">Country:</label>
446                                     [% ELSE %]
447                                         <label for="borrower_country">Country:</label>
448                                     [% END %]
449
450                                     <input type="text" id="borrower_country" name="borrower_country" value="[% borrower.country %]" />
451                                     [% IF mandatory.defined('country') %]<span class="required">Required</span>[% END %]
452                                 </li>
453                             [% END %]
454
455                         </ol>
456                     </fieldset>
457                 [% END %]
458
459                 [%# Following on one line for translatability %]
460                 [% UNLESS hidden.defined('phone') && hidden.defined('phonepro') && hidden.defined('mobile') && hidden.defined('email') && hidden.defined('emailpro') && hidden.defined('fax') %]
461                     <fieldset class="rows" id="memberentry_contact">
462                         <legend id="contact_legend">Contact information</legend>
463
464                         <ol>
465                             [% UNLESS hidden.defined('phone') %]
466                                 <li>
467                                     [% IF mandatory.defined('phone') %]
468                                         <label for="borrower_phone" class="required">Primary phone:</label>
469                                     [% ELSE %]
470                                         <label for="borrower_phone">Primary phone:</label>
471                                     [% END %]
472
473                                     <input type="text" id="borrower_phone" name="borrower_phone" value="[% borrower.phone %]" />
474                                     [% IF mandatory.defined('phone') %]<span class="required">Required</span>[% END %]
475                                 </li>
476                             [% END %]
477
478                             [% UNLESS hidden.defined('phonepro') %]
479                                 <li>
480                                     [% IF mandatory.defined('phonepro') %]
481                                         <label for="borrower_phonepro" class="required">Secondary phone:</label>
482                                     [% ELSE %]
483                                         <label for="borrower_phonepro">Secondary phone:</label>
484                                     [% END %]
485
486                                     <input type="text" id="borrower_phonepro" name="borrower_phonepro" value="[% borrower.phonepro %]" />
487                                     [% IF mandatory.defined('phonepro') %]<span class="required">Required</span>[% END %]
488                                 </li>
489                             [% END %]
490
491                             [% UNLESS hidden.defined('mobile') %]
492                                 <li>
493                                     [% IF mandatory.defined('mobile') %]
494                                         <label for="borrower_mobile" class="required">Other phone:</label>
495                                     [% ELSE %]
496                                         <label for="borrower_mobile">Other phone:</label>
497                                     [% END %]
498
499                                     <input type="text" id="borrower_mobile" name="borrower_mobile" value="[% borrower.mobile %]" />
500                                     [% IF mandatory.defined('mobile') %]<span class="required">Required</span>[% END %]
501                                 </li>
502                             [% END %]
503
504                             [% UNLESS hidden.defined('email') %]
505                                 <li>
506                                     [% IF mandatory.defined('email') %]
507                                         <label for="borrower_email" class="required">Primary email:</label>
508                                     [% ELSE %]
509                                         <label for="borrower_email">Primary email:</label>
510                                     [% END %]
511
512                                     <input type="text" id="borrower_email" name="borrower_email" value="[% borrower.email %]" />
513                                     [% IF mandatory.defined('email') %]<span class="required">Required</span>[% END %]
514                                 </li>
515                             [% END %]
516
517                             [% UNLESS hidden.defined('emailpro') %]
518                                 <li>
519                                     [% IF mandatory.defined('emailpro') %]
520                                         <label for="borrower_emailpro" class="required">Secondary email:</label>
521                                     [% ELSE %]
522                                         <label for="borrower_emailpro">Secondary email:</label>
523                                     [% END %]
524
525                                     <input type="text" id="borrower_emailpro" name="borrower_emailpro" value="[% borrower.emailpro %]" />
526                                     [% IF mandatory.defined('emailpro') %]<span class="required">Required</span>[% END %]
527                                 </li>
528                             [% END %]
529
530                             [% UNLESS hidden.defined('fax') %]
531                                 <li>
532                                     [% IF mandatory.defined('fax') %]
533                                         <label for="borrower_fax" class="required">Fax:</label>
534                                     [% ELSE %]
535                                         <label for="borrower_fax">Fax:</label>
536                                     [% END %]
537
538                                     <input type="text" id="borrower_fax" name="borrower_fax" value="[% borrower.fax %]" />
539                                     [% IF mandatory.defined('fax') %]<span class="required">Required</span>[% END %]
540                                 </li>
541                             [% END %]
542                         </ol>
543                     </fieldset>
544                 [% END %]
545
546                 [%# Following on one line for translatability %]
547                 [% UNLESS hidden.defined('B_address') && hidden.defined('B_address2') && hidden.defined('B_city') && hidden.defined('B_state') && hidden.defined('B_zipcode') && hidden.defined('B_country') && hidden.defined('B_phone') && hidden.defined('B_email') && hidden.defined('contactnote') %]
548                     <fieldset class="rows" id="memberentry_alternateaddress">
549                         <legend id="alternateaddress_legend">Alternate address</legend>
550
551                         <ol>
552                             [% UNLESS hidden.defined('B_address') %]
553                                 <li>
554                                     [% IF mandatory.defined('B_address') %]
555                                         <label for="borrower_B_address" class="required">Address:</label>
556                                     [% ELSE %]
557                                         <label for="borrower_B_address">Address:</label>
558                                     [% END %]
559
560                                     <input type="text" id="borrower_B_address" name="borrower_B_address" value="[% borrower.B_address %]" />
561                                     [% IF mandatory.defined('B_address') %]<span class="required">Required</span>[% END %]
562                                 </li>
563                             [% END %]
564
565                             [% UNLESS hidden.defined('B_address2') %]
566                                 <li>
567                                     [% IF mandatory.defined('B_address2') %]
568                                         <label for="borrower_B_address2" class="required">Address 2:</label>
569                                     [% ELSE %]
570                                         <label for="borrower_B_address2">Address 2:</label>
571                                     [% END %]
572
573                                     <input type="text" id="borrower_B_address2" name="borrower_B_address2" value="[% borrower.B_address2 %]" />
574                                     [% IF mandatory.defined('B_address2') %]<span class="required">Required</span>[% END %]
575                                 </li>
576                             [% END %]
577
578                             [% UNLESS hidden.defined('B_city') %]
579                                 <li>
580                                     [% IF mandatory.defined('B_city') %]
581                                         <label for="borrower_B_city" class="required">City:</label>
582                                     [% ELSE %]
583                                         <label for="borrower_B_city">City:</label>
584                                     [% END %]
585
586                                     <input type="text" id="borrower_B_city" name="borrower_B_city" value="[% borrower.B_city %]" />
587                                     [% IF mandatory.defined('B_city') %]<span class="required">Required</span>[% END %]
588                                 </li>
589                             [% END %]
590
591                             [% UNLESS hidden.defined('B_state') %]
592                                 <li>
593                                     [% IF mandatory.defined('B_state') %]
594                                         <label for="borrower_B_state" class="required">State:</label>
595                                     [% ELSE %]
596                                         <label for="borrower_B_state">State:</label>
597                                     [% END %]
598
599                                     <input type="text" id="borrower_B_state" name="borrower_B_state" value="[% borrower.B_state %]" />
600                                     [% IF mandatory.defined('B_state') %]<span class="required">Required</span>[% END %]
601                                 </li>
602                             [% END %]
603
604                             [% UNLESS hidden.defined('B_zipcode') %]
605                                 <li>
606                                     [% IF mandatory.defined('B_zipcode') %]
607                                         <label for="borrower_B_zipcode" class="required">ZIP/Postal code:</label>
608                                     [% ELSE %]
609                                         <label for="borrower_B_zipcode">ZIP/Postal code:</label>
610                                     [% END %]
611
612                                     <input type="text" id="borrower_B_zipcode" name="borrower_B_zipcode" value="[% borrower.B_zipcode %]" />
613                                     [% IF mandatory.defined('B_zipcode') %]<span class="required">Required</span>[% END %]
614                                 </li>
615                             [% END %]
616
617                             [% UNLESS hidden.defined('B_country') %]
618                                 <li>
619                                     [% IF mandatory.defined('B_country') %]
620                                         <label for="borrower_B_country" class="required">Country:</label>
621                                     [% ELSE %]
622                                         <label for="borrower_B_country">Country:</label>
623                                     [% END %]
624
625                                     <input type="text" id="borrower_B_country" name="borrower_B_country" value="[% borrower.B_country %]" />
626                                     [% IF mandatory.defined('B_country') %]<span class="required">Required</span>[% END %]
627                                 </li>
628                             [% END %]
629
630                             [% UNLESS hidden.defined('B_phone') %]
631                                 <li>
632                                     [% IF mandatory.defined('B_phone') %]
633                                         <label for="borrower_B_phone" class="required">Phone:</label>
634                                     [% ELSE %]
635                                         <label for="borrower_B_phone">Phone:</label>
636                                     [% END %]
637
638                                     <input type="text" id="borrower_B_phone" name="borrower_B_phone" value="[% borrower.B_phone %]" />
639                                     [% IF mandatory.defined('B_phone') %]<span class="required">Required</span>[% END %]
640                                 </li>
641                             [% END %]
642
643                             [% UNLESS hidden.defined('B_email') %]
644                                 <li>
645                                     [% IF mandatory.defined('B_email') %]
646                                         <label for="borrower_B_email" class="required">Email:</label>
647                                     [% ELSE %]
648                                         <label for="borrower_B_email">Email:</label>
649                                     [% END %]
650
651                                     <input type="text" id="borrower_B_email" name="borrower_B_email" value="[% borrower.B_email %]" />
652                                     [% IF mandatory.defined('B_email') %]<span class="required">Required</span>[% END %]
653                                 </li>
654                             [% END %]
655
656                             [% UNLESS hidden.defined('contactnote') %]
657                                 <li>
658                                     [% IF mandatory.defined('contactnote') %]
659                                         <label for="borrower_contactnote" class="required">Contact note:</label>
660                                     [% ELSE %]
661                                         <label for="borrower_contactnote">Contact note:</label>
662                                     [% END %]
663
664                                     <textarea id="borrower_contactnote" name="borrower_contactnote" cols="30" rows="2">[% borrower.contactnote %]</textarea>
665                                     [% IF mandatory.defined('contactnote') %]<span class="required">Required</span>[% END %]
666                                 </li>
667                             [% END %]
668
669                         </ol>
670                     </fieldset>
671                 [% END %]
672
673                 [%# Following on one line for translatability %]
674                 [% UNLESS hidden.defined('altcontactsurname') && hidden.defined('altcontactfirstname') && hidden.defined('altcontactaddress1') && hidden.defined('altcontactaddress2') && hidden.defined('altcontactaddress3') && hidden.defined('altcontactstate') && hidden.defined('altcontactzipcode') && hidden.defined('altcontactcountry') && hidden.defined('altcontactphone') %]
675                     <fieldset class="rows" id="memberentry_alternatecontact">
676                         <legend id="alternatecontact_legend">Alternate contact</legend>
677
678                         <ol>
679                             [% UNLESS hidden.defined('altcontactsurname') %]
680                                 <li>
681                                     [% IF mandatory.defined('altcontactsurname') %]
682                                         <label for="borrower_altcontactsurname" class="required">Surname:</label>
683                                     [% ELSE %]
684                                         <label for="borrower_altcontactsurname">Surname:</label>
685                                     [% END %]
686
687                                     <input type="text" id="borrower_altcontactsurname" name="borrower_altcontactsurname" value="[% borrower.altcontactsurname %]" />
688                                     [% IF mandatory.defined('altcontactsurname') %]<span class="required">Required</span>[% END %]
689                                 </li>
690                             [% END %]
691
692                             [% UNLESS hidden.defined('altcontactfirstname') %]
693                                 <li>
694                                     [% IF mandatory.defined('altcontactfirstname') %]
695                                         <label for="borrower_altcontactfirstname" class="required">First name:</label>
696                                     [% ELSE %]
697                                         <label for="borrower_altcontactfirstname">First name:</label>
698                                     [% END %]
699
700                                     <input type="text" id="borrower_altcontactfirstname" name="borrower_altcontactfirstname" value="[% borrower.altcontactfirstname %]" />
701                                     [% IF mandatory.defined('altcontactfirstname') %]<span class="required">Required</span>[% END %]
702                                 </li>
703                             [% END %]
704
705                             [% UNLESS hidden.defined('altcontactaddress1') %]
706                                 <li>
707                                     [% IF mandatory.defined('altcontactaddress1') %]
708                                         <label for="borrower_altcontactaddress1" class="required">Address:</label>
709                                     [% ELSE %]
710                                         <label for="borrower_altcontactaddress1">Address:</label>
711                                     [% END %]
712
713                                     <input type="text" id="borrower_altcontactaddress1" name="borrower_altcontactaddress1" value="[% borrower.altcontactaddress1 %]" />
714                                     [% IF mandatory.defined('altcontactaddress1') %]<span class="required">Required</span>[% END %]
715                                 </li>
716                             [% END %]
717
718                             [% UNLESS hidden.defined('altcontactaddress2') %]
719                                 <li>
720                                     [% IF mandatory.defined('altcontactaddress2') %]
721                                         <label for="borrower_altcontactaddress2" class="required">Address 2:</label>
722                                     [% ELSE %]
723                                         <label for="borrower_altcontactaddress2">Address 2:</label>
724                                     [% END %]
725
726                                     <input type="text" id="borrower_altcontactaddress2" name="borrower_altcontactaddress2" value="[% borrower.altcontactaddress2 %]" />
727                                     [% IF mandatory.defined('altcontactaddress2') %]<span class="required">Required</span>[% END %]
728                                 </li>
729                             [% END %]
730
731                             [% UNLESS hidden.defined('altcontactaddress3') %]
732                                 <li>
733                                     [% IF mandatory.defined('altcontactaddress3') %]
734                                         <label for="borrower_altcontactaddress3" class="required">City:</label>
735                                     [% ELSE %]
736                                         <label for="borrower_altcontactaddress3">City:</label>
737                                     [% END %]
738
739                                     <input type="text" id="borrower_altcontactaddress3" name="borrower_altcontactaddress3" value="[% borrower.altcontactaddress3 %]" />
740                                     [% IF mandatory.defined('altcontactaddress3') %]<span class="required">Required</span>[% END %]
741                                 </li>
742                             [% END %]
743
744                             [% UNLESS hidden.defined('altcontactstate') %]
745                                 <li>
746                                     [% IF mandatory.defined('altcontactstate') %]
747                                         <label for="borrower_altcontactstate" class="required">State:</label>
748                                     [% ELSE %]
749                                         <label for="borrower_altcontactstate">State:</label>
750                                     [% END %]
751
752                                     <input type="text" id="borrower_altcontactstate" name="borrower_altcontactstate" value="[% borrower.altcontactstate %]" />
753                                     [% IF mandatory.defined('altcontactstate') %]<span class="required">Required</span>[% END %]
754                                 </li>
755                             [% END %]
756
757                             [% UNLESS hidden.defined('altcontactzipcode') %]
758                                 <li>
759                                     [% IF mandatory.defined('altcontactzipcode') %]
760                                         <label for="borrower_altcontactzipcode" class="required">ZIP/Postal code:</label>
761                                     [% ELSE %]
762                                         <label for="borrower_altcontactzipcode">ZIP/Postal code:</label>
763                                     [% END %]
764
765                                     <input type="text" id="borrower_altcontactzipcode" name="borrower_altcontactzipcode" value="[% borrower.altcontactzipcode %]" />
766                                     [% IF mandatory.defined('altcontactzipcode') %]<span class="required">Required</span>[% END %]
767                                 </li>
768                             [% END %]
769
770                             [% UNLESS hidden.defined('altcontactcountry') %]
771                                 <li>
772                                     [% IF mandatory.defined('altcontactcountry') %]
773                                         <label for="borrower_altcontactcountry" class="required">Country:</label>
774                                     [% ELSE %]
775                                         <label for="borrower_altcontactcountry">Country:</label>
776                                     [% END %]
777
778                                     <input type="text" id="borrower_altcontactcountry" name="borrower_altcontactcountry" value="[% borrower.altcontactcountry %]" />
779                                     [% IF mandatory.defined('altcontactcountry') %]<span class="required">Required</span>[% END %]
780                                 </li>
781                             [% END %]
782
783                             [% UNLESS hidden.defined('altcontactphone') %]
784                                 <li>
785                                     [% IF mandatory.defined('altcontactphone') %]
786                                         <label for="borrower_altcontactphone" class="required">Phone:</label>
787                                     [% ELSE %]
788                                         <label for="borrower_altcontactphone">Phone:</label>
789                                     [% END %]
790
791                                     <input type="text" id="borrower_altcontactphone" name="borrower_altcontactphone" value="[% borrower.altcontactphone %]" />
792                                     [% IF mandatory.defined('altcontactphone') %]<span class="required">Required</span>[% END %]
793                                 </li>
794                             [% END %]
795                         </ol>
796                     </fieldset>
797                 [% END %]
798
799                 [% UNLESS action == 'edit' || hidden.defined('password') %]
800                     <fieldset class="rows" id="memberentry_password">
801                         <legend id="contact_legend">Password</legend>
802                         <div class="alert alert-info">
803                             <p>Your password must be at least [% Koha.Preference('minPasswordLength') %] characters long.</p>
804                             [% UNLESS mandatory.defined('password') %]
805                                 <div>If you do not enter a password a system generated password will be created.</div>
806                             [% END %]
807                         </div>
808
809                         [% IF mandatory.defined('password') %]
810                             <ol>
811                                 <li><label for="borrower_password" class="required">Password</label>
812                                     <input type="password" name="borrower_password" id="password" />
813                                     <span class="required">Required</span>
814                                 </li>
815                                 <li><label for="borrower_password2" class="required">Confirm password</label>
816                                     <input type="password" name="borrower_password2" id="password2" />
817                                     <span class="required">Required</span>
818                                 </li>
819                             </ol>
820                         [% ELSE %]
821                             <ol>
822                                 <li><label for="borrower_password">Password</label>
823                                     <input type="password" name="borrower_password" id="password" />
824                                 </li>
825                                 <li><label for="borrower_password2">Confirm password</label>
826                                     <input type="password" name="borrower_password2" id="password2" />
827                                 </li>
828                             </ol>
829                         [% END %]
830                     </fieldset>
831                [% END %]
832
833                 [% IF ( Koha.Preference('ExtendedPatronAttributes') && patron_attribute_classes.size && !Koha.Preference('PatronSelfRegistrationVerifyByEmail') ) %]
834                     [% FOREACH pa_class IN patron_attribute_classes %]
835                         [% IF pa_class.class %]
836                             <fieldset id="aai_[% pa_loo.class %]" class="rows patron-attributes">
837                             <legend>[% pa_class.lib %]</legend>
838                         [% ELSE %]
839                             <fieldset class="rows patron-attributes">
840                             <legend>Additional information</legend>
841                         [% END %]
842                         <ol class="attributes_table">
843                             [% FOREACH pa IN pa_class.items %]
844                                 [% FOREACH pa_value IN pa.values %]
845                                     [% IF loop.first %]<a name="patron-attr-start-[% pa.type.code %]"></a>[% END %]
846                                     [% form_id = 'patron-attr-' _ Math.int( Math.rand(1000000) ) %]
847                                     <li data-category_code="[% pa.type.category_code %]">
848                                         <label for="[% form_id %]">[% pa.type.description %]: </label>
849                                         [% IF pa.type.opac_editable %]
850                                             <input type="hidden" name="patron_attribute_code" value="[% pa.type.code |html %]" />
851                                             [% IF ( pa.type.authorised_value_category ) %]
852                                                 <select id="[% form_id %]" name="patron_attribute_value">
853                                                     <option value=""></option>
854                                                     [% FOREACH auth_val IN AuthorisedValues.Get( pa.type.authorised_value_category, 1 ) %]
855                                                         [% IF ( auth_val.authorised_value == pa_value ) %]
856                                                             <option value="[% auth_val.authorised_value %]" selected="selected">
857                                                                 [% auth_val.lib %]
858                                                             </option>
859                                                         [% ELSE %]
860                                                             <option value="[% auth_val.authorised_value %]" >
861                                                                 [% auth_val.lib %]
862                                                             </option>
863                                                         [% END %]
864                                                     [% END %]
865                                                 </select>
866                                             [% ELSE %]
867                                                 <textarea rows="2" cols="30" id="[% form_id %]" name="patron_attribute_value">[% pa_value %]</textarea>
868                                             [% END %]
869                                             <a href="#" class="clear-attribute">Clear</a>
870                                             [% IF ( pa.type.repeatable ) %]
871                                             <a href="#" class="clone-attribute">New</a>
872                                             [% END %]
873                                         [% ELSE %]
874                                             [% IF ( pa.type.authorised_value_category ) %]
875                                                 [% AuthorisedValues.GetByCode( pa.type.authorised_value_category, pa_value, 1 ) | html_line_break %]
876                                             [% ELSE %]
877                                                 [% pa_value | html_line_break %]
878                                             [% END %]
879                                         [% END %]
880                                     </li>
881                                 [% END %]
882                             [% END %]
883                         </ol>
884                         </fieldset>
885                     [% END %]
886                 [% END %]
887
888                 [% UNLESS action == 'edit' %]
889                     <fieldset class="rows" id="memberentry_captcha">
890                         <ol>
891
892                             <li>
893                                 <label for="captcha" class="required">Verification:</label>
894
895                                 <input type="text" name="captcha" id="captcha" />
896                                 <input type="hidden" name="captcha_digest" value="[% captcha_digest %]" />
897
898                                 <span class="hint">Please type the following characters into the preceding box: <strong>[% captcha %]</strong></span>
899                             </li>
900                         </ol>
901                     </fieldset>
902                 [% END %]
903
904                 [% IF action == 'edit' %]
905                     [% IF OPACPatronDetails %]
906                         <fieldset class="action">
907                             <input type="hidden" name="action" value="update" />
908                             <input type="hidden" name="csrf_token" value="[% csrf_token %]" />
909                             <input type="submit" class="btn" value="Submit update request" />
910                         </fieldset>
911                     [% END %]
912                 [% ELSE %]
913                     <fieldset class="action">
914                         <input type="hidden" name="action" value="create" />
915                         <input type="submit" class="btn" value="Submit" />
916                     </fieldset>
917                 [% END %]
918
919                 </form>
920
921                     </div><!--/div id="update-account" -->
922                 </div>
923             </div>
924         </div>
925     </div>
926
927 [% INCLUDE 'opac-bottom.inc' %]
928 [% BLOCK jsinclude %]
929     <script type="text/javascript" src="[% interface %]/[% theme %]/lib/jquery/plugins/jquery.validate.min.js"></script>
930     [% PROCESS 'password_check.inc' %]
931     [% PROCESS 'add_password_check' new_password => 'borrower_password' %]
932     <script type="text/javascript">
933         //<![CDATA[
934         $(document).ready(function() {
935             [% IF action == 'edit' && !OPACPatronDetails %]
936                 $("#memberentry-form :input").attr('readonly', true);
937                 $("#borrower_branchcode").attr('disabled',true);
938                 $("#borrower_title").attr('disabled',true);
939                 $('#memberentry-form :radio').attr('disabled',true);
940                 $('span.required').remove();
941                 $('label.required').removeClass('required');
942             [% END %]
943
944             $("#memberentry-form").validate({
945                 rules: {
946                     borrower_email: {
947                         email: true
948                     },
949                     borrower_emailpro: {
950                         email: true
951                     },
952                     borrower_B_email: {
953                         email: true
954                     },
955                     borrower_password: {
956                         [% IF mandatory.defined('password') %]
957                         required: true,
958                         [% END %]
959                         password_strong: true,
960                         password_no_spaces: true
961                     },
962                     borrower_password2: {
963                         [% IF mandatory.defined('password') %]
964                         required: true,
965                         [% END %]
966                         password_match: true
967                     },
968                     captcha: {
969                         required: true,
970                     }
971                 },
972                 submitHandler: function(form) {
973                     if (form.beenSubmitted) {
974                         return false;
975                     }
976                     else {
977                         form.beenSubmitted = true;
978                         form.submit();
979                     }
980                 },
981                 errorPlacement: function(error, element) {
982                     offset = element.offset();
983                     error.insertAfter(element)
984                     error.addClass('error');  // add a class to the wrapper
985                     error.css('position', 'absolute');
986                     error.css('left', offset.left + element.outerWidth() + 10);
987                     error.css('top', offset.top);
988                     error.css('width', 'auto');
989                 }
990             });
991
992             [% IF borrower.guarantorid && !Koha.Preference('OPACPrivacy') && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
993                 $('#update_privacy_guarantor_checkouts').click( function() {
994                     $.post( "/cgi-bin/koha/svc/patron/show_checkouts_to_relatives", { privacy_guarantor_checkouts: $('#privacy_guarantor_checkouts').val() }, null, 'json')
995                      .done(function( data ) {
996                          var message;
997                          if ( data.success ) {
998                              message = _("Your setting has been updated!");
999                          } else {
1000                              message = _("Unable to update your setting!");
1001                          }
1002
1003                          $('#update_privacy_guarantor_checkouts_message').fadeIn("slow").text( message ).delay( 5000 ).fadeOut("slow");
1004                      });
1005                 });
1006             [% END %]
1007
1008             $(".patron-attributes").on( 'click', '.clear-attribute', function() {
1009                 $(this).parent()
1010                     .find('textarea').attr('value', '').end()
1011                     .find('select').attr('value', '').end();
1012
1013                 return false;
1014             } );
1015
1016             $(".patron-attributes").on( 'click', '.clone-attribute', function() {
1017                 var clone = $(this).parent().clone().insertAfter( $(this).parent() );
1018
1019                 var newId = 50 + parseInt(Math.random() * 100000);
1020                 $('input[type!="hidden"],select,textarea', clone).attr('id', 'patron-attr-' + newId).attr('value', '');
1021                 $("label", clone).attr('for', 'patron-attr-' + newId).attr('value', '');
1022
1023                 return false;
1024             } );
1025         });
1026
1027     $(".cleardate").on("click", function(){
1028         $('#borrower_dateofbirth').val('');
1029         return false;
1030     });
1031     //]]>
1032     </script>
1033 [% INCLUDE 'calendar.inc' %]
1034 [% END %]