X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FMembers%2FAttributes.pm;h=e175915149628f2eb0bad691f8513a3e1c1b05f7;hb=2d3bb6e1d4fb6f3d270cf2c5aa467bedaa9d3e34;hp=1db94247c019c2c158dc8c759dcb237d11a392f5;hpb=1e98195b1014f9b0680be9d6ea9e8e8132821158;p=koha_fer diff --git a/C4/Members/Attributes.pm b/C4/Members/Attributes.pm index 1db94247c0..e175915149 100644 --- a/C4/Members/Attributes.pm +++ b/C4/Members/Attributes.pm @@ -29,11 +29,12 @@ our ($csv, $AttributeTypes); BEGIN { # set the version for version checking - $VERSION = 3.01; + $VERSION = 3.07.00.049; @ISA = qw(Exporter); - @EXPORT_OK = qw(GetBorrowerAttributes CheckUniqueness SetBorrowerAttributes + @EXPORT_OK = qw(GetBorrowerAttributes GetBorrowerAttributeValue CheckUniqueness SetBorrowerAttributes + DeleteBorrowerAttribute UpdateBorrowerAttribute extended_attributes_code_value_arrayref extended_attributes_merge - SearchIdMatchingAttribute); + SearchIdMatchingAttribute); %EXPORT_TAGS = ( all => \@EXPORT_OK ); } @@ -72,7 +73,7 @@ sub GetBorrowerAttributes { my $opac_only = @_ ? shift : 0; my $dbh = C4::Context->dbh(); - my $query = "SELECT code, description, attribute, lib, password + my $query = "SELECT code, description, attribute, lib, password, display_checkout, category_code, class FROM borrower_attributes JOIN borrower_attribute_types USING (code) LEFT JOIN authorised_values ON (category = authorised_value_category AND attribute = authorised_value) @@ -86,33 +87,77 @@ sub GetBorrowerAttributes { push @results, { code => $row->{'code'}, description => $row->{'description'}, - value => $row->{'attribute'}, - value_description => $row->{'lib'}, + value => $row->{'attribute'}, + value_description => $row->{'lib'}, password => $row->{'password'}, + display_checkout => $row->{'display_checkout'}, + category_code => $row->{'category_code'}, + class => $row->{'class'}, } } return \@results; } +=head2 GetAttributes + + my $attributes = C4::Members::Attributes::GetAttributes([$opac_only]); + +Retrieve an arrayref of extended attribute codes + +=cut + +sub GetAttributes { + my ($opac_only) = @_; + + my $dbh = C4::Context->dbh(); + my $query = "SELECT code FROM borrower_attribute_types"; + $query .= "\nWHERE opac_display = 1" if $opac_only; + $query .= "\nORDER BY code"; + return $dbh->selectcol_arrayref($query); +} + +=head2 GetBorrowerAttributeValue + + my $value = C4::Members::Attributes::GetBorrowerAttributeValue($borrowernumber, $attribute_code); + +Retrieve the value of an extended attribute C<$attribute_code> associated with the +patron specified by C<$borrowernumber>. + +=cut + +sub GetBorrowerAttributeValue { + my $borrowernumber = shift; + my $code = shift; + + my $dbh = C4::Context->dbh(); + my $query = "SELECT attribute + FROM borrower_attributes + WHERE borrowernumber = ? + AND code = ?"; + my $value = $dbh->selectrow_array($query, undef, $borrowernumber, $code); + return $value; +} + =head2 SearchIdMatchingAttribute - my $matching_records = C4::Members::Attributes::SearchIdMatchingAttribute($filter); + my $matching_borrowernumbers = C4::Members::Attributes::SearchIdMatchingAttribute($filter); =cut sub SearchIdMatchingAttribute{ my $filter = shift; - my $finalfilter=$filter->[0]; + $filter = [$filter] unless ref $filter; + my $dbh = C4::Context->dbh(); my $query = qq{ -SELECT borrowernumber +SELECT DISTINCT borrowernumber FROM borrower_attributes JOIN borrower_attribute_types USING (code) WHERE staff_searchable = 1 -AND attribute like ?}; +AND (} . join (" OR ", map "attribute like ?", @$filter) .qq{)}; my $sth = $dbh->prepare_cached($query); - $sth->execute("%$finalfilter%"); - return $sth->fetchall_arrayref; + $sth->execute(map "%$_%", @$filter); + return [map $_->[0], @{ $sth->fetchall_arrayref }]; } =head2 CheckUniqueness @@ -181,9 +226,58 @@ sub SetBorrowerAttributes { foreach my $attr (@$attr_list) { $attr->{password} = undef unless exists $attr->{password}; $sth->execute($borrowernumber, $attr->{code}, $attr->{value}, $attr->{password}); + if ($sth->err) { + warn sprintf('Database returned the following error: %s', $sth->errstr); + return; # bail immediately on errors + } } + return 1; # borower attributes successfully set } +=head2 DeleteBorrowerAttribute + + DeleteBorrowerAttribute($borrowernumber, $attribute); + +Delete a borrower attribute for the patron identified by C<$borrowernumber> and the attribute code of C<$attribute> + +=cut +sub DeleteBorrowerAttribute { + my ( $borrowernumber, $attribute ) = @_; + + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare(qq{ + DELETE FROM borrower_attributes + WHERE borrowernumber = ? + AND code = ? + } ); + $sth->execute( $borrowernumber, $attribute->{code} ); +} + +=head2 UpdateBorrowerAttribute + + UpdateBorrowerAttribute($borrowernumber, $attribute ); + +Update a borrower attribute C<$attribute> for the patron identified by C<$borrowernumber>, + +=cut +sub UpdateBorrowerAttribute { + my ( $borrowernumber, $attribute ) = @_; + + DeleteBorrowerAttribute $borrowernumber, $attribute; + + my $dbh = C4::Context->dbh; + my $query = "INSERT INTO borrower_attributes SET attribute = ?, code = ?, borrowernumber = ?"; + my @params = ( $attribute->{attribute}, $attribute->{code}, $borrowernumber ); + if ( defined $attribute->{password} ) { + $query .= ", password = ?"; + push @params, $attribute->{password}; + } + my $sth = $dbh->prepare( $query ); + + $sth->execute( @params ); +} + + =head2 extended_attributes_code_value_arrayref my $patron_attributes = "homeroom:1150605,grade:01,extradata:foobar";