Bug 18298: Add server-side checks and refactor stuffs
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / members / member-password.tt
1 [% USE Koha %]
2 [% USE Branches %]
3 [% INCLUDE 'doc-head-open.inc' %]
4 <title>Koha &rsaquo; Patrons &rsaquo; [% IF ( newpassword ) %]Password updated [% ELSE %]Update password for [% surname %], [% firstname %][% END %]</title>
5 [% INCLUDE 'doc-head-close.inc' %]
6 <script type="text/JavaScript">
7 //<![CDATA[
8
9     function generate_password() {
10         // Always generate a strong password
11         var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
12         var length = [% minPasswordLength %];
13         if ( length < 8 ) length = 8;
14         var password='';
15         for ( var i = 0 ; i < length ; i++){
16             password += chars.charAt(Math.floor(Math.random()*chars.length));
17         }
18         return password;
19     }
20     $(document).ready(function() {
21         $("body").on('click', "#fillrandom",function(e) {
22             e.preventDefault();
23             var password = '';
24             var pattern_regex = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{[% minPasswordLength %],}/;
25             while ( ! pattern_regex.test( password ) ) {
26                 password = generate_password();
27             }
28             $("#newpassword").val(password);
29             $("#newpassword").attr('type', 'text');
30             $("#newpassword2").val(password);
31             $("#newpassword2").attr('type', 'text');
32         });
33         $("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>");
34
35         $(document).ajaxStart(function () {
36             $("input[name^=newpassword]").hide();
37             $("label[for=newpassword2]").hide();
38             $(".hint:last").after($(".loading").show());
39         });
40         $(document).ajaxStop(function () {
41             $("input[name^=newpassword]").show();
42             $("label[for=newpassword2]").show();
43             $(".loading").hide();
44             $("label.error").hide();
45         });
46         [% IF NOMATCH %]
47             $("#newpassword").addClass('focus');
48         [% END %]
49
50         $("#changepasswordf").validate({
51             rules: {
52                 newpassword: {
53                     required: true,
54                     password_strong: true,
55                     password_no_spaces: true
56                 },
57                 newpassword2: {
58                     required: true,
59                     password_match: true
60                 }
61             }
62         });
63     });
64 //]]>
65 </script>
66 </head>
67 <body id="pat_member-password" class="pat">
68 [% INCLUDE 'header.inc' %]
69 [% INCLUDE 'patron-search.inc' %]
70
71 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>  &rsaquo; <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% firstname %] [% surname %]</a> &rsaquo; [% IF ( newpassword ) %]Password Updated[% ELSE %]Change username and/or password[% END %]</div>
72
73 <div id="doc3" class="yui-t2">
74
75    <div id="bd">
76         <div id="yui-main">
77         <div class="yui-b">
78 [% INCLUDE 'members-toolbar.inc' %]
79
80 [% IF ( newpassword ) %]
81 <h1>Password Updated</h1>
82
83 [% ELSE %]
84
85 <form method="post" id="changepasswordf" action="/cgi-bin/koha/members/member-password.pl">
86 <input type="hidden" name="destination" value="[% destination %]" />
87 <input type="hidden" name="cardnumber" value="[% cardnumber %]" />
88 <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% borrowernumber %]" />
89         [% IF ( errormsg ) %]
90                 <div class="dialog alert">
91                 <h4>The following errors have occurred:</h4>
92                 <ul>
93                 [% IF ( BADUSERID ) %]
94         <li>You have entered a username that already exists. Please choose another one.</li>
95                 [% END %]
96         [% IF ( ERROR_password_too_short ) %]
97             <li id="ERROR_short_password">Password must be at least [% minPasswordLength %] characters long.</li>
98         [% END %]
99         [% IF ( ERROR_password_too_weak ) %]
100             <li id="ERROR_weak_password">Password must contain at least one digit, one lowercase and one uppercase.</li>
101         [% END %]
102         [% IF ( ERROR_password_has_whitespaces ) %]
103             <li id="ERROR_weak_password">Password must not contain leading or trailing whitespaces.</li>
104         [% END %]
105                 [% IF ( NOPERMISSION ) %]
106                 <li>You do not have permission to edit this patron's login information.</li>
107                 [% END %]
108                 [% IF ( NOMATCH ) %]
109                 <li><strong>The passwords entered do not match</strong>. Please re-enter the new password.</li>
110                 [% END %]
111                 </ul>
112                 </div>
113         [% END %]
114
115
116     <fieldset class="brief"><legend>Change username and/or password for [% firstname %] [% surname %]</legend>
117         <ol>
118     <li><label for="newuserid">New username:</label>
119         <input type="hidden" name="member" value="[% borrowernumber %]" /><input type="text" id="newuserid" name="newuserid" size="20" value="[% userid %]" /></li>
120     [% SET password_pattern = ".{" _ minPasswordLength _ ",}" %]
121     [% IF Koha.Preference('RequireStrongPassword') %]
122         [% SET password_pattern = '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{' _ minPasswordLength _ ',}' %]
123     [% END %]
124     <li>
125         <label for="newpassword">New password:</label>
126         <div class="hint">Koha cannot display existing passwords. Leave the field blank to leave password unchanged.</div>
127         <input name="newpassword"  id="newpassword" type="password" size="20" />
128     </li>
129     <li>
130         <label for="newpassword2">Confirm new password:</label>
131         <input name="newpassword2"  id="newpassword2" type="password" size="20" />
132     </li>
133         </ol>
134 </fieldset>
135     <fieldset class="action">
136         <input type="hidden" name="csrf_token" value="[% csrf_token %]" />
137         <input type="submit" value="Save" />
138         <a class="cancel" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">Cancel</a>
139     </fieldset>
140 </form>[% END %]
141
142 </div>
143 </div>
144 <div class="loading hide"><strong>Processing...</strong><img src="[% interface %]/[% theme %]/img/loading.gif" alt="" /></div>
145 <div class="yui-b">
146 [% INCLUDE 'circ-menu.inc' %]
147 </div>
148 </div>
149 [% INCLUDE 'intranet-bottom.inc' %]
150 [% PROCESS 'password_check.inc' %]
151 [% PROCESS 'add_password_check' new_password => 'newpassword' %]