@@ -, +, @@
cardnumber
---
C4/Members.pm | 26 ++++++------
circ/circulation.pl | 2 +-
installer/data/mysql/kohastructure.sql | 6 +--
installer/data/mysql/updatedatabase.pl | 46 ++++++++++++++++++++++
.../intranet-tmpl/prog/en/includes/circ-menu.inc | 2 +-
.../intranet-tmpl/prog/en/includes/circ-menu.tt | 2 +-
members/boraccount.pl | 2 +-
members/deletemem.pl | 2 +-
members/files.pl | 2 +-
members/mancredit.pl | 2 +-
members/maninvoice.pl | 2 +-
members/member-flags.pl | 2 +-
members/member-password.pl | 2 +-
members/moremember.pl | 2 +-
members/notices.pl | 2 +-
members/patronimage.pl | 18 ++++-----
members/pay.pl | 2 +-
members/paycollect.pl | 2 +-
members/printfeercpt.pl | 2 +-
members/printinvoice.pl | 2 +-
members/readingrec.pl | 2 +-
members/routing-lists.pl | 2 +-
members/statistics.pl | 2 +-
opac/opac-memberentry.pl | 2 +-
opac/opac-patron-image.pl | 3 +-
opac/sco/sco-main.pl | 2 +-
opac/sco/sco-patron-image.pl | 4 +-
patroncards/create-pdf.pl | 2 +-
tools/picture-upload.pl | 2 +-
tools/viewlog.pl | 2 +-
30 files changed, 98 insertions(+), 53 deletions(-)
--- a/C4/Members.pm
+++ a/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;
--- a/circ/circulation.pl
+++ a/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
--- a/installer/data/mysql/kohastructure.sql
+++ a/installer/data/mysql/kohastructure.sql
@@ -1662,11 +1662,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`
--- a/installer/data/mysql/updatedatabase.pl
+++ a/installer/data/mysql/updatedatabase.pl
@@ -7169,6 +7169,52 @@ 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
=head2 TableExists($table)
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc
@@ -7,7 +7,7 @@
[% IF ( patronimages ) %]
[% IF ( picture ) %]
-
+
[% ELSE %]
[% END %]
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.tt
@@ -9,7 +9,7 @@ in the global namespace %]
[% IF ( patronimages ) %]
[% IF borrower.has_picture %]
-
+
[% ELSE %]
[% END %]
--- a/members/boraccount.pl
+++ a/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')) {
--- a/members/deletemem.pl
+++ a/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,
--- a/members/files.pl
+++ a/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(
--- a/members/mancredit.pl
+++ a/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')) {
--- a/members/maninvoice.pl
+++ a/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')) {
--- a/members/member-flags.pl
+++ a/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')) {
--- a/members/member-password.pl
+++ a/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')) {
--- a/members/moremember.pl
+++ a/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'};
--- a/members/notices.pl
+++ a/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
--- a/members/patronimage.pl
+++ a/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
-
=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;
}
--- a/members/pay.pl
+++ a/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;
}
--- a/members/paycollect.pl
+++ a/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;
}
--- a/members/printfeercpt.pl
+++ a/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(
--- a/members/printinvoice.pl
+++ a/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(
--- a/members/readingrec.pl
+++ a/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')) {
--- a/members/routing-lists.pl
+++ a/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;
--- a/members/statistics.pl
+++ a/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(
--- a/opac/opac-memberentry.pl
+++ a/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
--- a/opac/opac-patron-image.pl
+++ a/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');
--- a/opac/sco/sco-main.pl
+++ a/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,
--- a/opac/sco/sco-patron-image.pl
+++ a/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');
--- a/patroncards/create-pdf.pl
+++ a/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;
}
--- a/tools/picture-upload.pl
+++ a/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;
}
--- a/tools/viewlog.pl
+++ a/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,
--