Bug 9374: (follow-up) add FIXME suggesting that use of a regexp is not the long-term...
[koha.git] / members / member-password.pl
index 1d3a539..ac25da5 100755 (executable)
@@ -5,14 +5,18 @@
 #converted to using templates 3/16/03 by mwhansen@hmc.edu
 
 use strict;
+use warnings;
+
 use C4::Auth;
+use Koha::AuthUtils;
 use C4::Output;
-use C4::Interface::CGI::Output;
-use C4::Search;
 use C4::Context;
-use C4::Circulation::Circ2;
+use C4::Members;
+use C4::Branch;
+use C4::Circulation;
 use CGI;
-use HTML::Template;
+use C4::Members::Attributes qw(GetBorrowerAttributes);
+
 use Digest::MD5 qw(md5_base64);
 
 my $input = new CGI;
@@ -20,7 +24,7 @@ my $input = new CGI;
 my $theme = $input->param('theme') || "default";
                        # only used if allowthemeoverride is set
 
-my ($template, $loggedinuser, $cookie)
+my ($template, $loggedinuser, $cookie, $staffflags)
     = get_template_and_user({template_name => "members/member-password.tmpl",
                             query => $input,
                             type => "intranet",
@@ -31,66 +35,103 @@ my ($template, $loggedinuser, $cookie)
 
 my $flagsrequired;
 $flagsrequired->{borrowers}=1;
-my ($loggedinuser, $cookie, $sessionID) = checkauth($input, 0, $flagsrequired);
+
+#my ($loggedinuser, $cookie, $sessionID) = checkauth($input, 0, $flagsrequired, 'intranet');
 
 my $member=$input->param('member');
-my %env;
-$env{'nottodayissues'}=1;
-my %member2;
-$member2{'borrowernumber'}=$member;
-my $issues=currentissues(\%env,\%member2);
-my $i=0;
-foreach (sort keys %$issues) {
-    $i++;
+my $cardnumber = $input->param('cardnumber');
+my $destination = $input->param('destination');
+my @errors;
+my ($bor)=GetMember('borrowernumber' => $member);
+if(( $member ne $loggedinuser ) && ($bor->{'category_type'} eq 'S' ) ) {
+       push(@errors,'NOPERMISSION') unless($staffflags->{'superlibrarian'} || $staffflags->{'staffaccess'} );
+       # need superlibrarian for koha-conf.xml fakeuser.
 }
-
-my ($bor,$flags)=getpatroninformation(\%env, $member,'');
 my $newpassword = $input->param('newpassword');
+my $newpassword2 = $input->param('newpassword2');
+
+push(@errors,'NOMATCH') if ( ( $newpassword && $newpassword2 ) && ($newpassword ne $newpassword2) );
 
-if ( $newpassword ) {
-    my $digest=md5_base64($input->param('newpassword'));
+my $minpw = C4::Context->preference('minPasswordLength');
+push(@errors,'SHORTPASSWORD') if( $newpassword && $minpw && (length($newpassword) < $minpw ) );
+
+if ( $newpassword  && !scalar(@errors) ) {
+    my $digest=Koha::AuthUtils::hash_password($input->param('newpassword'));
     my $uid = $input->param('newuserid');
     my $dbh=C4::Context->dbh;
-
-       #Make sure the userid chosen is unique and not theirs if non-empty. If it is not,
-       #Then we need to tell the user and have them create a new one.
-       my $sth2=$dbh->prepare("select * from borrowers where userid=? and borrowernumber != ?");
-       $sth2->execute($uid,$member);
-
-       if ( ($uid ne '') && ($sth2->fetchrow) ) {
-               #The userid exists so we should display a warning.
-               my $warn = 1;
-        $template->param( warn => $warn,
-                       othernames => $bor->{'othernames'},
-                        surname     => $bor->{'surname'},
-                        firstname   => $bor->{'firstname'},
-                        userid      => $bor->{'userid'},
-                        defaultnewpassword => $newpassword );
-    } else {
-               #Everything is good so we can update the information.
-               my $sth=$dbh->prepare("update borrowers set userid=?, password=? where borrowernumber=?");
-       $sth->execute($uid, $digest, $member);
+    if (changepassword($uid,$member,$digest)) {
                $template->param(newpassword => $newpassword);
-       }
-
+               if ($destination eq 'circ') {
+                   print $input->redirect("/cgi-bin/koha/circ/circulation.pl?findborrower=$cardnumber");               
+               } else {
+                   print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$member");
+               }
+    } else {
+                       push(@errors,'BADUSERID');
+    }
 } else {
     my $userid = $bor->{'userid'};
 
     my $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
-    my $length=int(rand(2))+4;
+    my $length=int(rand(2))+C4::Context->preference("minPasswordLength");
     my $defaultnewpassword='';
     for (my $i=0; $i<$length; $i++) {
        $defaultnewpassword.=substr($chars, int(rand(length($chars))),1);
     }
-       $template->param(       othernames => $bor->{'othernames'},
-                       surname     => $bor->{'surname'},
-                       firstname   => $bor->{'firstname'},
-                       userid      => $bor->{'userid'},
-                       defaultnewpassword => $defaultnewpassword );
-
 
+       $template->param( defaultnewpassword => $defaultnewpassword );
 }
+    if ( $bor->{'category_type'} eq 'C') {
+        my  ( $catcodes, $labels ) =  GetborCatFromCatType( 'A', 'WHERE category_type = ?' );
+        my $cnt = scalar(@$catcodes);
+        $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1;
+        $template->param( 'catcode' =>    $catcodes->[0])  if $cnt == 1;
+    }
+       
+$template->param( adultborrower => 1 ) if ( $bor->{'category_type'} eq 'A' );
+my ($picture, $dberror) = GetPatronImage($bor->{'borrowernumber'});
+$template->param( picture => 1 ) if $picture;
+
+if (C4::Context->preference('ExtendedPatronAttributes')) {
+    my $attributes = GetBorrowerAttributes($bor->{'borrowernumber'});
+    $template->param(
+        ExtendedPatronAttributes => 1,
+        extendedattributes => $attributes
+    );
+}
+
+    $template->param( othernames => $bor->{'othernames'},
+           surname     => $bor->{'surname'},
+           firstname   => $bor->{'firstname'},
+           borrowernumber => $bor->{'borrowernumber'},
+           cardnumber => $bor->{'cardnumber'},
+           categorycode => $bor->{'categorycode'},
+           category_type => $bor->{'category_type'},
+           categoryname => $bor->{'description'},
+           address => $bor->{'address'},
+           address2 => $bor->{'address2'},
+           city => $bor->{'city'},
+           state => $bor->{'state'},
+           zipcode => $bor->{'zipcode'},
+           country => $bor->{'country'},
+           phone => $bor->{'phone'},
+           email => $bor->{'email'},
+           branchcode => $bor->{'branchcode'},
+           branchname => GetBranchName($bor->{'branchcode'}),
+           userid      => $bor->{'userid'},
+           destination => $destination,
+               is_child        => ($bor->{'category_type'} eq 'C'),
+               activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
+        minPasswordLength => $minpw,
+        RoutingSerials => C4::Context->preference('RoutingSerials'),
+       );
+
+if( scalar(@errors )){
+       $template->param( errormsg => 1 );
+       foreach my $error (@errors) {
+        $template->param($error) || $template->param( $error => 1);
+       }
 
-$template->param( member => $member );
+}
 
 output_html_with_http_headers $input, $cookie, $template->output;