@@ -, +, @@ - Adds the option to map shibboleth attributes to koha user columns and allows mapping to auto create non-existant users --- C4/Auth_with_shibboleth.pm | 29 ++++++++++++++++++++++++----- C4/Members.pm | 15 +++++++++++++-- 2 files changed, 37 insertions(+), 7 deletions(-) --- a/C4/Auth_with_shibboleth.pm +++ a/C4/Auth_with_shibboleth.pm @@ -22,6 +22,8 @@ use Modern::Perl; use C4::Debug; use C4::Context; use Koha::Database; +use C4::Members qw( AddMember_Auto ); +use C4::Members::Messaging; use Carp; use CGI; @@ -102,11 +104,13 @@ sub checkpw_shib { return ( 1, $borrower->get_column('cardnumber'), $borrower->get_column('userid') ); } - # If we reach this point, the user is not a valid koha user - $debug - and warn - "User with $config->{matchpoint} of $match is not a valid Koha user"; - return 0; + if ( $config->{'autocreate'} ) { + return _autocreate( $dbh, $config, $match ); + } else { + # If we reach this point, the user is not a valid koha user + $debug and warn "User with $config->{matchpoint} of $match is not a valid Koha user"; + return 0; + } } sub _get_uri { @@ -146,6 +150,21 @@ sub _get_shib_config { } } +sub _autocreate { + my ( $dbh, $config, $match ) = @_; + + my %borrower = ( $config->{matchpoint} => $match ); + + while ( my ( $key, $entry ) = each %{$config->{'mapping'}} ) { + $borrower{$key} = ( $entry->{'is'} && $ENV{ $entry->{'is'} } ) || $entry->{'content'} || ''; + } + + %borrower = AddMember_Auto( %borrower ); + C4::Members::Messaging::SetMessagingPreferencesFromDefaults( { borrowernumber => $borrower{'borrowernumber'}, categorycode => $borrower{'categorycode'} } ); + + return ( 1, $borrower{'cardnumber'}, $borrower{'userid'} ); +} + 1; __END__ --- a/C4/Members.pm +++ a/C4/Members.pm @@ -126,6 +126,7 @@ BEGIN { #Insert data push @EXPORT, qw( &AddMember + &AddMember_Auto &AddMember_Opac &MoveMemberToDeleted &ExtendMemberSubscriptionTo @@ -2523,6 +2524,16 @@ sub GetBorrowersWithEmail { return @result; } +sub AddMember_Auto { + my ( %borrower ) = @_; + + $borrower{'cardnumber'} ||= fixup_cardnumber(); + + $borrower{'borrowernumber'} = AddMember(%borrower); + + return ( %borrower ); +} + sub AddMember_Opac { my ( %borrower ) = @_; @@ -2535,9 +2546,9 @@ sub AddMember_Opac { $borrower{'cardnumber'} = fixup_cardnumber(); - my $borrowernumber = AddMember(%borrower); + %borrower = AddMember_Auto(%borrower); - return ( $borrowernumber, $password ); + return ( $borrower{'borrowernumber'}, $borrower{'password'} ); } =head2 AddEnrolmentFeeIfNeeded --