Jonathan Druart
ea5e9f25e9
There was a mismatch between "value" and "attribute". Before this patchset, "value" was sometimes used, but then it comes "attribute" to match the DB column's name. We must keep both here, when an upgrade is done we could have "value" that is still in the borrower_modifications.extended_attributes JSON Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
164 lines
4.6 KiB
Perl
164 lines
4.6 KiB
Perl
package Koha::Patron::Modifications;
|
|
|
|
# Copyright 2012 ByWater Solutions
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
=head1 NAME
|
|
|
|
Koha::Patron::Modifications
|
|
|
|
=cut
|
|
|
|
use Modern::Perl;
|
|
|
|
use C4::Context;
|
|
|
|
use Koha::Patron::Attribute;
|
|
use Koha::Patron::Modification;
|
|
|
|
use JSON;
|
|
use List::Util qw /any none/;
|
|
|
|
use base qw(Koha::Objects);
|
|
|
|
=head2 pending_count
|
|
|
|
$count = Koha::Patron::Modifications->pending_count();
|
|
|
|
Returns the number of pending modifications for existing patrons.
|
|
|
|
=cut
|
|
|
|
sub pending_count {
|
|
my ( $self, $branchcode ) = @_;
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
my $query = "
|
|
SELECT COUNT(*) AS count
|
|
FROM borrower_modifications, borrowers
|
|
WHERE borrower_modifications.borrowernumber > 0
|
|
AND borrower_modifications.borrowernumber = borrowers.borrowernumber
|
|
";
|
|
|
|
my $userenv = C4::Context->userenv;
|
|
my @branchcodes;
|
|
if ( $userenv and $userenv->{number} ) {
|
|
my $logged_in_user = Koha::Patrons->find( $userenv->{number} );
|
|
if ($branchcode) {
|
|
return 0 unless $logged_in_user->can_see_patrons_from($branchcode);
|
|
@branchcodes = ( $branchcode );
|
|
}
|
|
else {
|
|
@branchcodes = $logged_in_user->libraries_where_can_see_patrons;
|
|
}
|
|
}
|
|
my @sql_params;
|
|
if ( @branchcodes ) {
|
|
$query .= ' AND borrowers.branchcode IN ( ' . join( ',', ('?') x @branchcodes ) . ' )';
|
|
push( @sql_params, @branchcodes );
|
|
}
|
|
|
|
my ( $count ) = $dbh->selectrow_array( $query, undef, @sql_params );
|
|
return $count;
|
|
}
|
|
|
|
=head2 pending
|
|
|
|
$arrayref = Koha::Patron::Modifications->pending();
|
|
|
|
Returns an arrayref of hashrefs for all pending modifications for existing patrons.
|
|
|
|
=cut
|
|
|
|
sub pending {
|
|
my ( $self, $branchcode ) = @_;
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
my $query = "
|
|
SELECT borrower_modifications.*
|
|
FROM borrower_modifications, borrowers
|
|
WHERE borrower_modifications.borrowernumber > 0
|
|
AND borrower_modifications.borrowernumber = borrowers.borrowernumber
|
|
";
|
|
|
|
my $userenv = C4::Context->userenv;
|
|
my @branchcodes;
|
|
if ( $userenv ) {
|
|
my $logged_in_user = Koha::Patrons->find( $userenv->{number} );
|
|
if ($branchcode) {
|
|
return 0 unless $logged_in_user->can_see_patrons_from($branchcode);
|
|
@branchcodes = ( $branchcode );
|
|
}
|
|
else {
|
|
@branchcodes = $logged_in_user->libraries_where_can_see_patrons;
|
|
}
|
|
}
|
|
my @sql_params;
|
|
if ( @branchcodes ) {
|
|
$query .= ' AND borrowers.branchcode IN ( ' . join( ',', ('?') x @branchcodes ) . ' )';
|
|
push( @sql_params, @branchcodes );
|
|
}
|
|
$query .= " ORDER BY borrowers.surname, borrowers.firstname";
|
|
my $sth = $dbh->prepare($query);
|
|
$sth->execute(@sql_params);
|
|
|
|
my @m;
|
|
while ( my $row = $sth->fetchrow_hashref() ) {
|
|
my @changed_keys = split /,/, $row->{changed_fields};
|
|
foreach my $key ( keys %$row ) {
|
|
if ($key eq 'changed_fields') {
|
|
delete $row->{$key};
|
|
next;
|
|
}
|
|
if ( defined $row->{$key} && $key eq 'extended_attributes' ) {
|
|
my $attributes = from_json( $row->{$key} );
|
|
my @pending_attributes;
|
|
foreach my $attr ( @{$attributes} ) {
|
|
push @pending_attributes,
|
|
Koha::Patron::Attribute->new(
|
|
{ borrowernumber => $row->{borrowernumber},
|
|
code => $attr->{code},
|
|
attribute => exists $attr->{attribute} ? $attr->{attribute} : $attr->{value},
|
|
}
|
|
);
|
|
}
|
|
|
|
$row->{$key} = \@pending_attributes;
|
|
}
|
|
if (none { $_ eq $key } @changed_keys) {
|
|
delete $row->{$key} unless defined $row->{$key};
|
|
}
|
|
}
|
|
|
|
push( @m, $row );
|
|
}
|
|
|
|
return \@m;
|
|
}
|
|
|
|
sub _type {
|
|
return 'BorrowerModification';
|
|
}
|
|
|
|
=head3 object_class
|
|
|
|
=cut
|
|
|
|
sub object_class {
|
|
return 'Koha::Patron::Modification';
|
|
}
|
|
|
|
1;
|