Browse Source

Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber

Test Plan:
1) Apply this patch
2) Run updatedatabase.pl
3) Enable patronimages
4) Verify patron images are still displaying correctly
5) Test deleting a patron image
6) Test adding a patron image from moremember.pl
7) Test adding a patron image from tools/picture-upload.pl

Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
new/bootstrap-opac
Kyle Hall 11 years ago
committed by Galen Charlton
parent
commit
09b8ce2a5f
  1. 26
      C4/Members.pm
  2. 2
      circ/circulation.pl
  3. 6
      installer/data/mysql/kohastructure.sql
  4. 45
      installer/data/mysql/updatedatabase.pl
  5. 2
      koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc
  6. 2
      koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.tt
  7. 2
      members/boraccount.pl
  8. 2
      members/deletemem.pl
  9. 2
      members/files.pl
  10. 2
      members/mancredit.pl
  11. 2
      members/maninvoice.pl
  12. 2
      members/member-flags.pl
  13. 2
      members/member-password.pl
  14. 2
      members/moremember.pl
  15. 2
      members/notices.pl
  16. 18
      members/patronimage.pl
  17. 2
      members/pay.pl
  18. 2
      members/paycollect.pl
  19. 2
      members/printfeercpt.pl
  20. 2
      members/printinvoice.pl
  21. 2
      members/readingrec.pl
  22. 2
      members/routing-lists.pl
  23. 2
      members/statistics.pl
  24. 2
      opac/opac-memberentry.pl
  25. 3
      opac/opac-patron-image.pl
  26. 2
      opac/sco/sco-main.pl
  27. 4
      opac/sco/sco-patron-image.pl
  28. 2
      patroncards/create-pdf.pl
  29. 2
      tools/picture-upload.pl
  30. 2
      tools/viewlog.pl

26
C4/Members.pm

@ -1921,19 +1921,19 @@ sub GetTitles {
=head2 GetPatronImage
my ($imagedata, $dberror) = GetPatronImage($cardnumber);
my ($imagedata, $dberror) = GetPatronImage($borrowernumber);
Returns the mimetype and binary image data of the image for the patron with the supplied cardnumber.
Returns the mimetype and binary image data of the image for the patron with the supplied borrowernumber.
=cut
sub GetPatronImage {
my ($cardnumber) = @_;
warn "Cardnumber passed to GetPatronImage is $cardnumber" if $debug;
my ($borrowernumber) = @_;
warn "Borrowernumber passed to GetPatronImage is $borrowernumber" if $debug;
my $dbh = C4::Context->dbh;
my $query = 'SELECT mimetype, imagefile FROM patronimage WHERE cardnumber = ?';
my $query = 'SELECT mimetype, imagefile FROM patronimage WHERE borrowernumber = ?';
my $sth = $dbh->prepare($query);
$sth->execute($cardnumber);
$sth->execute($borrowernumber);
my $imagedata = $sth->fetchrow_hashref;
warn "Database error!" if $sth->errstr;
return $imagedata, $sth->errstr;
@ -1952,7 +1952,7 @@ sub PutPatronImage {
my ($cardnumber, $mimetype, $imgfile) = @_;
warn "Parameters passed in: Cardnumber=$cardnumber, Mimetype=$mimetype, " . ($imgfile ? "Imagefile" : "No Imagefile") if $debug;
my $dbh = C4::Context->dbh;
my $query = "INSERT INTO patronimage (cardnumber, mimetype, imagefile) VALUES (?,?,?) ON DUPLICATE KEY UPDATE imagefile = ?;";
my $query = "INSERT INTO patronimage (borrowernumber, mimetype, imagefile) VALUES ( ( SELECT borrowernumber from borrowers WHERE cardnumber = ? ),?,?) ON DUPLICATE KEY UPDATE imagefile = ?;";
my $sth = $dbh->prepare($query);
$sth->execute($cardnumber,$mimetype,$imgfile,$imgfile);
warn "Error returned inserting $cardnumber.$mimetype." if $sth->errstr;
@ -1961,19 +1961,19 @@ sub PutPatronImage {
=head2 RmPatronImage
my ($dberror) = RmPatronImage($cardnumber);
my ($dberror) = RmPatronImage($borrowernumber);
Removes the image for the patron with the supplied cardnumber.
Removes the image for the patron with the supplied borrowernumber.
=cut
sub RmPatronImage {
my ($cardnumber) = @_;
warn "Cardnumber passed to GetPatronImage is $cardnumber" if $debug;
my ($borrowernumber) = @_;
warn "Borrowernumber passed to GetPatronImage is $borrowernumber" if $debug;
my $dbh = C4::Context->dbh;
my $query = "DELETE FROM patronimage WHERE cardnumber = ?;";
my $query = "DELETE FROM patronimage WHERE borrowernumber = ?;";
my $sth = $dbh->prepare($query);
$sth->execute($cardnumber);
$sth->execute($borrowernumber);
my $dberror = $sth->errstr;
warn "Database error!" if $sth->errstr;
return $dberror;

2
circ/circulation.pl

@ -765,7 +765,7 @@ if ($stickyduedate) {
$session->param( 'stickyduedate', $duedatespec );
}
my ($picture, $dberror) = GetPatronImage($borrower->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
# get authorised values with type of BOR_NOTES

6
installer/data/mysql/kohastructure.sql

@ -1665,11 +1665,11 @@ CREATE TABLE `patroncards` (
DROP TABLE IF EXISTS `patronimage`;
CREATE TABLE `patronimage` ( -- information related to patron images
`cardnumber` varchar(16) NOT NULL, -- the cardnumber of the patron this image is attached to (borrowers.cardnumber)
`borrowernumber` int(11) NOT NULL, -- the borrowernumber of the patron this image is attached to (borrowers.borrowernumber)
`mimetype` varchar(15) NOT NULL, -- the format of the image (png, jpg, etc)
`imagefile` mediumblob NOT NULL, -- the image
PRIMARY KEY (`cardnumber`),
CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
PRIMARY KEY (`borrowernumber`),
CONSTRAINT `patronimage_fk1` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Table structure for table `pending_offline_operations`

45
installer/data/mysql/updatedatabase.pl

@ -7216,6 +7216,51 @@ if ( CheckVersion($DBversion) ) {
SetVersion($DBversion);
}
$DBversion = "3.13.00.XXX";
if ( CheckVersion($DBversion) ) {
$dbh->do(qq{
DELETE FROM patronimage WHERE NOT EXISTS (SELECT * FROM borrowers WHERE borrowers.cardnumber = patronimage.cardnumber)
});
$dbh->do(qq{
ALTER TABLE patronimage ADD borrowernumber INT( 11 ) NULL FIRST
});
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
eval {
$dbh->do(qq{
UPDATE patronimage LEFT JOIN borrowers USING ( cardnumber ) SET patronimage.borrowernumber = borrowers.borrowernumber
});
$dbh->commit();
};
if ($@) {
print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber) failed! Transaction aborted because $@\n";
eval { $dbh->rollback };
}
else {
$dbh->do(qq{
ALTER TABLE patronimage DROP FOREIGN KEY patronimage_fk1
});
$dbh->do(qq{
ALTER TABLE patronimage DROP PRIMARY KEY, ADD PRIMARY KEY( borrowernumber )
});
$dbh->do(qq{
ALTER TABLE patronimage DROP cardnumber
});
$dbh->do(qq{
ALTER TABLE patronimage ADD FOREIGN KEY ( borrowernumber ) REFERENCES borrowers ( borrowernumber ) ON DELETE CASCADE ON UPDATE CASCADE
});
print "Upgrade to $DBversion done (Bug 10636 - patronimage should have borrowernumber as PK, not cardnumber)\n";
SetVersion($DBversion);
}
$dbh->{AutoCommit} = 1;
$dbh->{RaiseError} = 0;
}
=head1 FUNCTIONS

2
koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc

@ -7,7 +7,7 @@
<ul class="patronbriefinfo">
[% IF ( patronimages ) %]
[% IF ( picture ) %]
<li><img src="/cgi-bin/koha/members/patronimage.pl?crdnum=[% cardnumber | uri %]" id="patronimage" alt="[% firstname %] [% surname %] ([% cardnumber %])" border="0" style="max-width : 140px; margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC; width:auto !important; width:130px;" /></li>
<li><img src="/cgi-bin/koha/members/patronimage.pl?borrowernumber=[% borrowernumber | uri %]" id="patronimage" alt="[% firstname %] [% surname %] ([% cardnumber %])" border="0" style="max-width : 140px; margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC; width:auto !important; width:130px;" /></li>
[% ELSE %]
<li id="patronbasics"><img src="[% interface %]/[% theme %]/img/patron-blank.png" alt="[% firstname %] [% surname %] ([% cardnumber %])" border="0" style="margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC;" /></li>
[% END %]

2
koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.tt

@ -9,7 +9,7 @@ in the global namespace %]
<ul class="patronbriefinfo">
[% IF ( patronimages ) %]
[% IF borrower.has_picture %]
<li><img src="/cgi-bin/koha/members/patronimage.pl?crdnum=[% borrower.cardnumber %]" id="patronimage" alt="[% borrower.firstname %] [% borrower.surname %] ([% borrower.cardnumber %])" border="0" style="max-width : 140px; margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC; width:auto !important; width:130px;" /></li>
<li><img src="/cgi-bin/koha/members/patronimage.pl?borrowernumber=[% borrower.borrowernumber %]" id="patronimage" alt="[% borrower.firstname %] [% borrower.surname %] ([% borrower.cardnumber %])" border="0" style="max-width : 140px; margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC; width:auto !important; width:130px;" /></li>
[% ELSE %]
<li id="patronbasics"><img src="[% interface %]/[% theme %]/img/patron-blank.png" alt="[% borrower.firstname %] [% borrower.surname %] ([% borrower.cardnumber %])" border="0" style="margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC;" /></li>
[% END %]

2
members/boraccount.pl

@ -92,7 +92,7 @@ foreach my $accountline ( @{$accts}) {
$template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' );
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
if (C4::Context->preference('ExtendedPatronAttributes')) {

2
members/deletemem.pl

@ -83,7 +83,7 @@ my $data=$sth->fetchrow_hashref;
if ($countissues > 0 or $flags->{'CHARGES'} or $data->{'borrowernumber'}){
# print $input->header;
my ($picture, $dberror) = GetPatronImage($bor->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($bor->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
$template->param(borrowernumber => $member,

2
members/files.pl

@ -115,7 +115,7 @@ else {
);
}
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
$template->param(

2
members/mancredit.pl

@ -77,7 +77,7 @@ if ($add){
}
$template->param( adultborrower => 1 ) if ( $data->{category_type} eq 'A' );
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
if (C4::Context->preference('ExtendedPatronAttributes')) {

2
members/maninvoice.pl

@ -105,7 +105,7 @@ if ($add){
}
$template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' );
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
if (C4::Context->preference('ExtendedPatronAttributes')) {

2
members/member-flags.pl

@ -160,7 +160,7 @@ if ($input->param('newflags')) {
}
$template->param( adultborrower => 1 ) if ( $bor->{'category_type'} eq 'A' );
my ($picture, $dberror) = GetPatronImage($bor->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($bor->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
if (C4::Context->preference('ExtendedPatronAttributes')) {

2
members/member-password.pl

@ -89,7 +89,7 @@ if ( $newpassword && !scalar(@errors) ) {
}
$template->param( adultborrower => 1 ) if ( $bor->{'category_type'} eq 'A' );
my ($picture, $dberror) = GetPatronImage($bor->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($bor->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
if (C4::Context->preference('ExtendedPatronAttributes')) {

2
members/moremember.pl

@ -356,7 +356,7 @@ if($userenv->{flags} % 2 == 1){
# check to see if patron's image exists in the database
# basically this gives us a template var to condition the display of
# patronimage related interface on
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
my $branch=C4::Context->userenv->{'branch'};

2
members/notices.pl

@ -47,7 +47,7 @@ my ($template, $loggedinuser, $cookie)
});
$template->param( $borrower );
my ($picture, $dberror) = GetPatronImage($borrower->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
# Getting the messages

18
members/patronimage.pl

@ -31,7 +31,7 @@ $|=1;
my $DEBUG = 0;
my $data = new CGI;
my $cardnumber;
my $borrowernumber;
=head1 NAME
@ -39,24 +39,24 @@ patronimage.pl - Script for retrieving and formatting Koha patron images for dis
=head1 SYNOPSIS
<img src="patronimage.pl?crdnum= />
<img src="patronimage.pl?borrowernumber= />
=head1 DESCRIPTION
This script, when called from within HTML and passed a valid patron cardnumber, will retrieve the image data associated with that cardnumber if one exists, format it in proper HTML format and pass it back to be displayed.
This script, when called from within HTML and passed a valid patron borrowernumber, will retrieve the image data associated with that borrowernumber if one exists, format it in proper HTML format and pass it back to be displayed.
=cut
if ($data->param('crdnum')) {
$cardnumber = $data->param('crdnum');
if ($data->param('borrowernumber')) {
$borrowernumber = $data->param('borrowernumber');
} else {
$cardnumber = shift;
$borrowernumber = shift;
}
warn "Cardnumber passed in: $cardnumber" if $DEBUG;
warn "Borrowernumber passed in: $borrowernumber" if $DEBUG;
my ($imagedata, $dberror) = GetPatronImage($cardnumber);
my ($imagedata, $dberror) = GetPatronImage($borrowernumber);
if ($dberror) {
warn "Database Error!";
@ -70,7 +70,7 @@ if ($imagedata) {
print $data->header (-type => $imagedata->{'mimetype'}, -'Cache-Control' => 'no-store', -Content_Length => length ($imagedata->{'imagefile'})), $imagedata->{'imagefile'};
exit;
} else {
warn "No image exists for $cardnumber";
warn "No image exists for $borrowernumber";
exit;
}

2
members/pay.pl

@ -220,7 +220,7 @@ sub borrower_add_additional_fields {
} elsif ( $b_ref->{category_type} eq 'A' ) {
$b_ref->{adultborrower} = 1;
}
my ( $picture, $dberror ) = GetPatronImage( $b_ref->{cardnumber} );
my ( $picture, $dberror ) = GetPatronImage( $b_ref->{borrowernumber} );
if ($picture) {
$b_ref->{has_picture} = 1;
}

2
members/paycollect.pl

@ -169,7 +169,7 @@ sub borrower_add_additional_fields {
} elsif ( $b_ref->{category_type} eq 'A' ) {
$b_ref->{adultborrower} = 1;
}
my ( $picture, $dberror ) = GetPatronImage( $b_ref->{cardnumber} );
my ( $picture, $dberror ) = GetPatronImage( $b_ref->{borrowernumber} );
if ($picture) {
$b_ref->{has_picture} = 1;
}

2
members/printfeercpt.pl

@ -113,7 +113,7 @@ for (my $i=0;$i<$numaccts;$i++){
$template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' );
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
$template->param(

2
members/printinvoice.pl

@ -112,7 +112,7 @@ for ( my $i = 0 ; $i < $numaccts ; $i++ ) {
$template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' );
my ( $picture, $dberror ) = GetPatronImage( $data->{'cardnumber'} );
my ( $picture, $dberror ) = GetPatronImage( $data->{'borrowernumber'} );
$template->param( picture => 1 ) if $picture;
$template->param(

2
members/readingrec.pl

@ -103,7 +103,7 @@ if (! $limit){
}
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
if (C4::Context->preference('ExtendedPatronAttributes')) {

2
members/routing-lists.pl

@ -128,7 +128,7 @@ $template->param(
RoutingSerials => C4::Context->preference('RoutingSerials'),
);
my ($picture, $dberror) = GetPatronImage($borrower->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
output_html_with_http_headers $query, $cookie, $template->output;

2
members/statistics.pl

@ -91,7 +91,7 @@ if (C4::Context->preference('ExtendedPatronAttributes')) {
);
}
my ($picture, $dberror) = GetPatronImage($borrower->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
$template->param(

2
opac/opac-memberentry.pl

@ -200,7 +200,7 @@ elsif ( $action eq 'edit' ) { #Display logged in borrower's data
borrower => $borrower, );
if (C4::Context->preference('OPACpatronimages')) {
my ($image, $dberror) = GetPatronImage($borrower->{cardnumber});
my ($image, $dberror) = GetPatronImage($borrower->{borrowernumber});
if ($image) {
$template->param(
display_patron_image => 1

3
opac/opac-patron-image.pl

@ -37,9 +37,8 @@ my %cookies = fetch CGI::Cookie;
my $sessid = $cookies{'CGISESSID'}->value;
my ($auth_status, $auth_sessid) = check_cookie_auth($sessid, $needed_flags);
my $borrowernumber = C4::Context->userenv->{'number'};
my $cardnumber = C4::Context->userenv->{'cardnumber'};
my ($imagedata, $dberror) = GetPatronImage($cardnumber);
my ($imagedata, $dberror) = GetPatronImage($borrowernumber);
if ($dberror) {
print $query->header(status => '500 internal error');

2
opac/sco/sco-main.pl

@ -248,7 +248,7 @@ if ($borrower->{cardnumber}) {
);
if (C4::Context->preference('ShowPatronImageInWebBasedSelfCheck')) {
my ($image, $dberror) = GetPatronImage($borrower->{cardnumber});
my ($image, $dberror) = GetPatronImage($borrower->{borrowernumber});
if ($image) {
$template->param(
display_patron_image => 1,

4
opac/sco/sco-patron-image.pl

@ -33,9 +33,9 @@ unless (C4::Context->preference('ShowPatronImageInWebBasedSelfCheck')) {
exit;
}
my ($cardnumber) = C4::Service->require_params('cardnumber');
my ($borrowernumber) = C4::Service->require_params('borrowernumber');
my ($imagedata, $dberror) = GetPatronImage($cardnumber);
my ($imagedata, $dberror) = GetPatronImage($borrowernumber);
if ($dberror) {
print $query->header(status => '500 internal error');

2
patroncards/create-pdf.pl

@ -145,7 +145,7 @@ foreach my $item (@{$items}) {
next PROCESS_IMAGES;
}
elsif ($images->{$_}->{'data_source'}->[0]->{'image_source'} eq 'patronimages') {
($image_data, $error) = GetPatronImage($card_number);
($image_data, $error) = GetPatronImage($borrower_number);
warn sprintf('No image exists for borrower number %s.', $borrower_number) if !$image_data;
next PROCESS_IMAGES if !$image_data;
}

2
tools/picture-upload.pl

@ -146,7 +146,7 @@ if ( ($op eq 'Upload') && $uploadfile ) { # Case is important in these ope
$template->param(cardnumber => $cardnumber);
$template->param(filetype => $filetype);
} elsif ( $op eq 'Delete' ) {
my $dberror = RmPatronImage($cardnumber);
my $dberror = RmPatronImage($borrowernumber);
$debug and warn "Patron image deleted for $cardnumber";
warn "Database returned $dberror" if $dberror;
}

2
tools/viewlog.pl

@ -72,7 +72,7 @@ if ($src eq 'circ') { # if we were called from circulation, use the circulatio
use C4::Members;
my $borrowernumber = $object;
my $data = GetMember('borrowernumber'=>$borrowernumber);
my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'});
my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'});
$template->param( picture => 1 ) if $picture;
$template->param( menu => 1,

Loading…
Cancel
Save