use Koha::Patron::HouseboundRoles;
use Koha::Token;
use Email::Valid;
-use Module::Load;
-if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) {
- load Koha::NorwegianPatronDB, qw( NLGetSyncDataFromBorrowernumber );
-}
use Koha::SMS::Providers;
use vars qw($debug);
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 );
$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') || '';
unless ($category_type or !($categorycode)){
}
}
-# 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/ && !defined $data{'userid'} ) {
+ my $fake_patron = Koha::Patron->new;
+ $fake_patron->userid($patron->userid) if $patron; # editing
if ( ( defined $newdata{'firstname'} || $category_type eq 'I' ) && ( defined $newdata{'surname'} ) ) {
# Full page edit, firstname and surname input zones are present
- $patron->firstname($newdata{firstname});
- $patron->surname($newdata{surname});
- $newdata{'userid'} = $patron->generate_userid;
+ $fake_patron->firstname($newdata{firstname});
+ $fake_patron->surname($newdata{surname});
+ $fake_patron->generate_userid;
+ $newdata{'userid'} = $fake_patron->userid;
}
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
# FIXME clean thiscode newdata vs data is very confusing
- $patron->firstname($data{firstname});
- $patron->surname($data{surname});
- $newdata{'userid'} = $patron->generate_userid;
+ $fake_patron->firstname($data{firstname});
+ $fake_patron->surname($data{surname});
+ $fake_patron->generate_userid;
+ $newdata{'userid'} = $fake_patron->userid;
}
else {
$newdata{'userid'} = $data{'userid'};
$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'}) {
if (C4::Context->preference('EnhancedMessagingPreferences') and $input->param('setting_messaging_prefs')) {
C4::Form::MessagingPreferences::handle_form_action($input, { borrowernumber => $borrowernumber }, $template, 1, $newdata{'categorycode'});
}
- # Try to do the live sync with the Norwegian national patron database, if it is enabled
- if ( exists $data{'borrowernumber'} && C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) {
- NLSync({ 'borrowernumber' => $borrowernumber });
- }
# Create HouseboundRole if necessary.
# Borrower did not exist, so HouseboundRole *cannot* yet exist.
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'} );
}
- # Add sync data to the user data
- if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) {
- my $sync = NLGetSyncDataFromBorrowernumber( $borrowernumber );
- if ( $sync ) {
- $template->param(
- sync => $sync->sync,
- );
- }
- }
}
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'} = "";
}