my $borrowernumber = $input->param('borrowernumber');
my $patron = Koha::Patrons->find($borrowernumber);
+if ( $borrowernumber and not $patron ) {
+ output_and_exit( $input, $cookie, $template, 'unknown_patron' );
+}
+
if ( C4::Context->preference('SMSSendDriver') eq 'Email' ) {
my @providers = Koha::SMS::Providers->search();
$template->param( sms_providers => \@providers );
my $expiration = $input->param('debarred_expiration');
$expiration =
$expiration
- ? output_pref(
- { 'dt' => dt_from_string($expiration), 'dateformat' => 'iso' } )
+ ? dt_from_string($expiration)->ymd
: undef;
AddDebarment(
$template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' );
$template->param( "checked" => 1 ) if ( defined($nodouble) && $nodouble eq 1 );
if ( $op eq 'modify' or $op eq 'save' or $op eq 'duplicate' ) {
- if ( $patron and $userenv and $userenv->{number} ) { # Allow DB user to create a superlibrarian patron
- my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in";
- output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
- }
+ my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in";
+ output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
$borrower_data = $patron->unblessed;
$borrower_data->{category_type} = $patron->category->category_type;
+} else {
+ $patron = Koha::Patron->new;
}
my $categorycode = $input->param('categorycode') || $borrower_data->{'categorycode'};
my $category_type = $input->param('category_type') || '';
}
}
-# remove keys from %newdata that ModMember() doesn't like
+# remove keys from %newdata that is not part of patron's attributes
{
my @keys_to_delete = (
qr/^BorrowerMandatoryField$/,
qr/^\d+$/,
qr/^\d+-DAYS/,
qr/^patron_attr_/,
+ qr/^csrf_token$/,
+ qr/^add_debarment$/, qr/^debarred_expiration$/, # We already dealt with debarments previously
+ qr/^housebound_chooser$/, qr/^housebound_deliverer$/,
+ qr/^select_city$/,
);
for my $regexp (@keys_to_delete) {
for (keys %newdata) {
# builds default userid
# userid input text may be empty or missing because of syspref BorrowerUnwantedField
-if ( ( defined $newdata{'userid'} && $newdata{'userid'} eq '' ) || $check_BorrowerUnwantedField =~ /userid/ ) {
- if ( ( defined $newdata{'firstname'} ) && ( defined $newdata{'surname'} ) ) {
+if ( ( defined $newdata{'userid'} && $newdata{'userid'} eq '' ) || $check_BorrowerUnwantedField =~ /userid/ && !defined $data{'userid'} ) {
+ if ( ( defined $newdata{'firstname'} || $category_type eq 'I' ) && ( defined $newdata{'surname'} ) ) {
# Full page edit, firstname and surname input zones are present
- $newdata{'userid'} = Generate_Userid( $borrowernumber, $newdata{'firstname'}, $newdata{'surname'} );
+ $patron->firstname($newdata{firstname});
+ $patron->surname($newdata{surname});
+ $patron->generate_userid;
+ $newdata{'userid'} = $patron->userid;
}
- elsif ( ( defined $data{'firstname'} ) && ( defined $data{'surname'} ) ) {
+ elsif ( ( defined $data{'firstname'} || $category_type eq 'I' ) && ( defined $data{'surname'} ) ) {
# Partial page edit (access through "Details"/"Library details" tab), firstname and surname input zones are not used
# Still, if the userid field is erased, we can create a new userid with available firstname and surname
- $newdata{'userid'} = Generate_Userid( $borrowernumber, $data{'firstname'}, $data{'surname'} );
+ # FIXME clean thiscode newdata vs data is very confusing
+ $patron->firstname($data{firstname});
+ $patron->surname($data{surname});
+ $patron->generate_userid;
+ $newdata{'userid'} = $patron->userid;
}
else {
$newdata{'userid'} = $data{'userid'};
# the edited values list when editing certain sub-forms. Get it straight
# from the DB if absent.
my $userid = $newdata{ userid } // $borrower_data->{ userid };
- unless (Check_Userid($userid,$borrowernumber)) {
+ my $p = $borrowernumber ? Koha::Patrons->find( $borrowernumber ) : Koha::Patron->new;
+ $p->userid( $userid );
+ unless ( $p->has_valid_userid ) {
push @errors, "ERROR_login_exist";
}
$debug and warn "$op dates: " . join "\t", map {"$_: $newdata{$_}"} qw(dateofbirth dateenrolled dateexpiry);
if ($op eq 'insert'){
# we know it's not a duplicate borrowernumber or there would already be an error
- $borrowernumber = &AddMember(%newdata);
- $newdata{'borrowernumber'} = $borrowernumber;
+ delete $newdata{password2};
+ my $patron = eval { Koha::Patron->new(\%newdata)->store };
+ if ( $@ ) {
+ # FIXME Urgent error handling here, we cannot fail without relevant feedback
+ # Lot of code will need to be removed from this script to handle exceptions raised by Koha::Patron->store
+ warn "Patron creation failed! - $@"; # Maybe we must die instead of just warn
+ } else {
+ $borrowernumber = $patron->borrowernumber;
+ }
# If 'AutoEmailOpacUser' syspref is on, email user their account details from the 'notice' that matches the user's branchcode.
if ( C4::Context->preference("AutoEmailOpacUser") == 1 && $newdata{'userid'} && $newdata{'password'}) {
delete $newdata{'password'};
delete $newdata{'userid'};
}
- &ModMember(%newdata) unless scalar(keys %newdata) <= 1; # bug 4508 - avoid crash if we're not
+
+ my $patron = Koha::Patrons->find( $borrowernumber );
+ $newdata{debarredcomment} = $newdata{debarred_comment};
+ delete $newdata{debarred_comment};
+ delete $newdata{password2};
+ $patron->set(\%newdata)->store if scalar(keys %newdata) > 1; # bug 4508 - avoid crash if we're not
# updating any columns in the borrowers table,
# which can happen if we're only editing the
# patron attributes or messaging preferences sections
+
+ $patron->update_password($newdata{userid}, $newdata{password});
+
if (C4::Context->preference('ExtendedPatronAttributes') and $input->param('setting_extended_patron_attributes')) {
C4::Members::Attributes::SetBorrowerAttributes($borrowernumber, $extended_patron_attributes);
}
%data=%newdata;
$template->param( updtype => ($op eq 'add' ?'I':'M')); # used to check for $op eq "insert"... but we just changed $op!
unless ($step){
- $template->param( step_1 => 1,step_2 => 1,step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1);
+ $template->param( step_1 => 1,step_2 => 1,step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1, step_7 => 1 );
}
}
if (C4::Context->preference("IndependentBranches")) {
}
}
if ($op eq 'add'){
- $template->param( updtype => 'I', step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1, step_6 => 1);
+ $template->param( updtype => 'I', step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1, step_6 => 1, step_7 => 1);
}
if ($op eq "modify") {
$template->param( updtype => 'M',modify => 1 );
- $template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1, step_6 => 1) unless $step;
+ $template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1, step_6 => 1, step_7 => 1) unless $step;
if ( $step == 4 ) {
$template->param( categorycode => $borrower_data->{'categorycode'} );
}
}
if ( $op eq "duplicate" ) {
$template->param( updtype => 'I' );
- $template->param( step_1 => 1, step_2 => 1, step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1 ) unless $step;
+ $template->param( step_1 => 1, step_2 => 1, step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1, step_7 => 1 ) unless $step;
$data{'cardnumber'} = "";
}
{ 'categorycode' => $patron_category->categorycode,
'categoryname' => $patron_category->description,
'categorycodeselected' =>
- ( ( defined( $borrower_data->{'categorycode'} ) && $patron_category->categorycode eq $borrower_data->{'categorycode'} ) || ( defined($categorycode) && $patron_category->categorycode eq $categorycode ) ),
+ ( defined($categorycode) && $patron_category->categorycode eq $categorycode ),
};
}
my %typehash;
$guarantorid = $borrower_data->{'guarantorid'} || $guarantorid;
my $guarantor = $guarantorid ? Koha::Patrons->find( $guarantorid ) : undef;
$template->param(
+ patron => $patron, # Used by address include templates now
nodouble => $nodouble,
borrowernumber => $borrowernumber, #register number
guarantor => $guarantor,