From ae927390ffabdc26d66b254a17abbe81e6683279 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 22 Feb 2018 12:28:02 -0300 Subject: [PATCH] Bug 20287: Move AddMember to Koha::Patron->store Signed-off-by: Josef Moravec Signed-off-by: Tomas Cohen Arazi Signed-off-by: Martin Renvoize Signed-off-by: Nick Clemens --- C4/Members.pm | 93 ------------------------------------------------ Koha/Patron.pm | 96 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 93 insertions(+), 96 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 18f8f67b87..cacccc781c 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -78,7 +78,6 @@ BEGIN { #Insert data push @EXPORT, qw( - &AddMember &AddMember_Auto &AddMember_Opac ); @@ -375,98 +374,6 @@ sub ModMember { return $execute_success; } -=head2 AddMember - - $borrowernumber = &AddMember(%borrower); - -insert new borrower into table - -(%borrower keys are database columns. Database columns could be -different in different versions. Please look into database for correct -column names.) - -Returns the borrowernumber upon success - -Returns as undef upon any db error without further processing - -=cut - -#' -sub AddMember { - my (%data) = @_; - my $dbh = C4::Context->dbh; - my $schema = Koha::Database->new()->schema; - - my $category = Koha::Patron::Categories->find( $data{categorycode} ); - unless ($category) { - Koha::Exceptions::Object::FKConstraint->throw( - broken_fk => 'categorycode', - value => $data{categorycode}, - ); - } - - my $p = Koha::Patron->new( { userid => $data{userid}, firstname => $data{firstname}, surname => $data{surname} } ); - # generate a proper login if none provided - $data{'userid'} = $p->generate_userid - if ( $data{'userid'} eq '' || ! $p->has_valid_userid ); - - # add expiration date if it isn't already there - $data{dateexpiry} ||= $category->get_expiry_date; - - # add enrollment date if it isn't already there - unless ( $data{'dateenrolled'} ) { - $data{'dateenrolled'} = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } ); - } - - $data{'privacy'} = - $category->default_privacy() eq 'default' ? 1 - : $category->default_privacy() eq 'never' ? 2 - : $category->default_privacy() eq 'forever' ? 0 - : undef; - - $data{'privacy_guarantor_checkouts'} = 0 unless defined( $data{'privacy_guarantor_checkouts'} ); - - # Make a copy of the plain text password for later use - my $plain_text_password = $data{'password'}; - - # create a disabled account if no password provided - $data{'password'} = ($data{'password'})? hash_password($data{'password'}) : '!'; - - # we don't want invalid dates in the db (mysql has a bad habit of inserting 0000-00-00 - $data{'dateofbirth'} = undef if ( not $data{'dateofbirth'} ); - $data{'debarred'} = undef if ( not $data{'debarred'} ); - $data{'sms_provider_id'} = undef if ( not $data{'sms_provider_id'} ); - $data{'guarantorid'} = undef if ( not $data{'guarantorid'} ); - - # get only the columns of Borrower - # FIXME Do we really need this check? - my @columns = $schema->source('Borrower')->columns; - my $new_member = { map { join(' ',@columns) =~ /$_/ ? ( $_ => $data{$_} ) : () } keys(%data) } ; - - delete $new_member->{borrowernumber}; - - my $patron = Koha::Patron->new( $new_member )->store; - $data{borrowernumber} = $patron->borrowernumber; - - # If NorwegianPatronDBEnable is enabled, we set syncstatus to something that a - # cronjob will use for syncing with NL - if ( exists $data{'borrowernumber'} && C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) { - Koha::Database->new->schema->resultset('BorrowerSync')->create({ - 'borrowernumber' => $data{'borrowernumber'}, - 'synctype' => 'norwegianpatrondb', - 'sync' => 1, - 'syncstatus' => 'new', - 'hashed_pin' => Koha::NorwegianPatronDB::NLEncryptPIN( $plain_text_password ), - }); - } - - logaction("MEMBERS", "CREATE", $data{'borrowernumber'}, "") if C4::Context->preference("BorrowersLog"); - - $patron->add_enrolment_fee_if_needed; - - return $data{borrowernumber}; -} - =head2 GetAllIssues $issues = &GetAllIssues($borrowernumber, $sortkey, $limit); diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 6396b50f27..3d2456cc9e 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -22,6 +22,7 @@ use Modern::Perl; use Carp; use List::MoreUtils qw( uniq ); +use Module::Load::Conditional qw( can_load ); use Text::Unaccent qw( unac_string ); use C4::Context; @@ -41,6 +42,10 @@ use Koha::Club::Enrollments; use Koha::Account; use Koha::Subscription::Routinglists; +if ( ! can_load( modules => { 'Koha::NorwegianPatronDB' => undef } ) ) { + warn "Unable to load Koha::NorwegianPatronDB"; +} + use base qw(Koha::Object); our $RESULTSET_PATRON_ID_MAPPING = { @@ -110,7 +115,7 @@ sub trim_whitespaces { my( $self ) = @_; my $schema = Koha::Database->new->schema; - my @columns = $schema->source('Borrowers')->columns; + my @columns = $schema->source($self->_type)->columns; for my $column( @columns ) { my $value = $self->$column; @@ -123,7 +128,7 @@ sub trim_whitespaces { } sub store { - my( $self ) = @_; + my ($self) = @_; $self->_result->result_source->schema->txn_do( sub { @@ -138,10 +143,95 @@ sub store { # We are in a transaction but the table is not locked $self->fixup_cardnumber; } + unless ( $self->in_storage ) { #AddMember + + unless( $self->category->in_storage ) { + Koha::Exceptions::Object::FKConstraint->throw( + broken_fk => 'categorycode', + value => $self->categorycode, + ); + } + + $self->trim_whitespaces; + + # Generate a valid userid/login if needed + $self->userid($self->generate_userid) + if not $self->userid or not $self->has_valid_userid; + + # Add expiration date if it isn't already there + unless ( $self->dateexpiry ) { + $self->dateexpiry( $self->category->get_expiry_date ); + } + + # Add enrollment date if it isn't already there + unless ( $self->dateenrolled ) { + $self->dateenrolled(dt_from_string); + } + + # Set the privacy depending on the patron's category + my $default_privacy = $self->category->default_privacy || q{}; + $default_privacy = + $default_privacy eq 'default' ? 1 + : $default_privacy eq 'never' ? 2 + : $default_privacy eq 'forever' ? 0 + : undef; + $self->privacy($default_privacy); + + unless ( defined $self->privacy_guarantor_checkouts ) { + $self->privacy_guarantor_checkouts(0); + } + + # Make a copy of the plain text password for later use + my $plain_text_password = $self->password; + + # Create a disabled account if no password provided + $self->password( $self->password + ? Koha::AuthUtils::hash_password( $self->password ) + : '!' ); + + # We don't want invalid dates in the db (mysql has a bad habit of inserting 0000-00-00) + $self->dateofbirth(undef) unless $self->dateofbirth; + $self->debarred(undef) unless $self->debarred; + + # Set default values if not set + $self->sms_provider_id(undef) unless $self->sms_provider_id; + $self->guarantorid(undef) unless $self->guarantorid; + + $self->borrowernumber(undef); + + $self = $self->SUPER::store; + + # If NorwegianPatronDBEnable is enabled, we set syncstatus to something that a + # cronjob will use for syncing with NL + if ( C4::Context->preference('NorwegianPatronDBEnable') + && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) + { + Koha::Database->new->schema->resultset('BorrowerSync') + ->create( + { + 'borrowernumber' => $self->borrowernumber, + 'synctype' => 'norwegianpatrondb', + 'sync' => 1, + 'syncstatus' => 'new', + 'hashed_pin' => + Koha::NorwegianPatronDB::NLEncryptPIN( + $plain_text_password), + } + ); + } + + $self->add_enrolment_fee_if_needed; + + logaction( "MEMBERS", "CREATE", $self->borrowernumber, "" ) + if C4::Context->preference("BorrowersLog"); + } + else { #ModMember + $self = $self->SUPER::store; + } - $self->SUPER::store; } ); + return $self; } =head3 delete -- 2.39.5