6 [% INCLUDE 'doc-head-open.inc' %]
7 <title>Koha › Patrons › [% IF ( newpassword ) %]Password updated [% ELSE %]Update password for [% patron.surname | html %], [% patron.firstname | html %][% END %]</title>
8 [% INCLUDE 'doc-head-close.inc' %]
11 <body id="pat_member-password" class="pat">
12 [% INCLUDE 'header.inc' %]
13 [% INCLUDE 'patron-search.inc' %]
15 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a> › <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a> › [% IF ( newpassword ) %]Password Updated[% ELSE %]Change username and/or password[% END %]</div>
17 <div id="doc3" class="yui-t2">
22 [% INCLUDE 'members-toolbar.inc' %]
24 [% IF ( newpassword ) %]
25 <h1>Password Updated</h1>
29 <form method="post" id="changepasswordf" action="/cgi-bin/koha/members/member-password.pl">
30 <input type="hidden" name="destination" value="[% destination | html %]" />
31 <input type="hidden" name="cardnumber" value="[% patron.cardnumber | html %]" />
32 <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
34 <div class="dialog alert">
35 <h4>The following errors have occurred:</h4>
37 [% IF ( BADUSERID ) %]
38 <li>You have entered a username that already exists. Please choose another one.</li>
40 [% IF ( ERROR_password_too_short ) %]
41 <li id="ERROR_short_password">Password must be at least [% Koha.Preference('minPasswordLength') | html %] characters long.</li>
43 [% IF ( ERROR_password_too_weak ) %]
44 <li id="ERROR_weak_password">Password must contain at least one digit, one lowercase and one uppercase.</li>
46 [% IF ( ERROR_password_has_whitespaces ) %]
47 <li id="ERROR_weak_password">Password must not contain leading or trailing whitespaces.</li>
49 [% IF ( NOPERMISSION ) %]
50 <li>You do not have permission to edit this patron's login information.</li>
53 <li><strong>The passwords entered do not match</strong>. Please re-enter the new password.</li>
60 <fieldset class="brief"><legend>Change username and/or password for [% patron.firstname | html %] [% patron.surname | html %]</legend>
62 <li><label for="newuserid">New username:</label>
63 <input type="hidden" name="member" value="[% patron.borrowernumber | html %]" /><input type="text" id="newuserid" name="newuserid" size="20" value="[% patron.userid | html %]" /></li>
64 [% SET password_pattern = ".{" _ Koha.Preference('minPasswordLength') _ ",}" %]
65 [% IF Koha.Preference('RequireStrongPassword') %]
66 [% SET password_pattern = '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{' _ Koha.Preference('minPasswordLength') _ ',}' %]
69 <label for="newpassword">New password:</label>
70 <div class="hint">Koha cannot display existing passwords. Leave the field blank to leave password unchanged.</div>
71 <input name="newpassword" id="newpassword" type="password" size="20" />
74 <label for="newpassword2">Confirm new password:</label>
75 <input name="newpassword2" id="newpassword2" type="password" size="20" />
79 <fieldset class="action">
80 <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
81 <input type="submit" value="Save" />
82 <a class="cancel" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>
88 <div class="loading hide"><strong>Processing...</strong><img src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="" /></div>
90 [% INCLUDE 'circ-menu.inc' %]
94 [% MACRO jsinclude BLOCK %]
95 [% INCLUDE 'str/members-menu.inc' %]
96 [% Asset.js("js/members-menu.js") | $raw %]
97 <script type="text/JavaScript">
99 function generate_password() {
100 // Always generate a strong password
101 var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
102 var length = [% Koha.Preference('minPasswordLength') | html %];
103 if ( length < 8 ) length = 8;
105 for ( var i = 0 ; i < length ; i++){
106 password += chars.charAt(Math.floor(Math.random()*chars.length));
110 $(document).ready(function() {
111 $("body").on('click', "#fillrandom",function(e) {
114 var pattern_regex = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{[% Koha.Preference('minPasswordLength') | html %],}/;
115 while ( ! pattern_regex.test( password ) ) {
116 password = generate_password();
118 $("#newpassword").val(password);
119 $("#newpassword").attr('type', 'text');
120 $("#newpassword2").val(password);
121 $("#newpassword2").attr('type', 'text');
123 $("div.hint").eq(0).after(" <div class=\"hint\"><a href=\"#\" id=\"fillrandom\">"+_("Click to fill with a randomly generated suggestion. ")+"<strong>"+_("Passwords will be displayed as text")+"</strong>.</a></div>");
125 $(document).ajaxStart(function () {
126 $("input[name^=newpassword]").hide();
127 $("label[for=newpassword2]").hide();
128 $(".hint:last").after($(".loading").show());
130 $(document).ajaxStop(function () {
131 $("input[name^=newpassword]").show();
132 $("label[for=newpassword2]").show();
133 $(".loading").hide();
134 $("label.error").hide();
137 $("#newpassword").addClass('focus');
140 $("#changepasswordf").validate({
143 password_strong: true,
144 password_no_spaces: true
153 [% PROCESS 'password_check.inc' %]
154 [% PROCESS 'add_password_check' new_password => 'newpassword' %]
157 [% INCLUDE 'intranet-bottom.inc' %]