First installment on moving patronimages into the database.

Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Chris Nighswonger 2008-02-23 06:28:01 -05:00 committed by Joshua Ferraro
parent 9d7a6c4c40
commit 1c1cb10e5e
5 changed files with 86 additions and 19 deletions

View file

@ -58,6 +58,7 @@ BEGIN {
&GetSortDetails
&GetTitles
&GetPatronImage
&PutPatronImage
&GetMemberAccountRecords
&GetBorNotifyAcctRecord
@ -1699,23 +1700,45 @@ sub GetTitles {
=head2 GetPatronImage
$patronimage = &GetPatronImage('cardnumber');
my ($imagedata, $dberror) = GetPatronImage($cardnumber);
Returns the path/filename.jpg 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 cardnumber.
=cut
sub GetPatronImage {
my $cardnumber = shift;
warn "Cardnumber passed to GetPatronImage is $cardnumber" if $debug;
my $htdocs = C4::Context->config('intrahtdocs');
my $picture = "patronimages/" . $cardnumber . ".jpg";
if ( -e "$htdocs/$picture" ) {
return ( "/intranet-tmpl/$picture" ); # FIXME: This is a real hack and should be handled better, but I'm in a hurry... -fbcit
}
else {
return ();
}
my ($cardnumber) = @_;
warn "Cardnumber passed to GetPatronImage is $cardnumber"; # if $debug;
my $dbh = C4::Context->dbh;
my $query = "SELECT mimetype, imagefile FROM patronimage WHERE cardnumber = ?;";
my $sth = $dbh->prepare($query);
$sth->execute($cardnumber);
my $imagedata = $sth->fetchrow_hashref;
my $dberror = $sth->errstr;
warn "Database error!" if $sth->errstr;
$sth->finish;
return $imagedata, $dberror;
}
=head2 PutPatronImage
PutPatronImage($cardnumber, $mimetype, $imgfile);
Stores patron binary image data and mimetype in database.
=cut
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 cardnumber = ?;";
my $sth = $dbh->prepare($query);
$sth->execute($cardnumber,$mimetype,$imgfile,$cardnumber);
warn "Error returned inserting $cardnumber.$mimetype." if $sth->errstr;
my $dberror = $sth->errstr;
$sth->finish;
return $dberror;
}
=head2 GetRoadTypeDetails (OUEST-PROVENCE)

View file

@ -1389,6 +1389,19 @@ CREATE TABLE `overduerules` (
PRIMARY KEY (`branchcode`,`categorycode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `patronimage`
--
DROP TABLE IF EXISTS `patronimage`;
CREATE TABLE `patronimage` (
`cardnumber` varchar(16) NOT NULL,
`mimetype` varchar(15) NOT NULL,
`imagefile` mediumblob NOT NULL,
PRIMARY KEY (`cardnumber`),
CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `printers`
--

View file

@ -1037,6 +1037,19 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion ($DBversion);
}
$DBversion = "3.00.00.057";
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
$dbh->do("CREATE TABLE `patronimage` (
`cardnumber` varchar(16) NOT NULL,
`mimetype` varchar(15) NOT NULL,
`imagefile` mediumblob NOT NULL,
PRIMARY KEY (`cardnumber`),
CONSTRAINT `patronimage_fk1` FOREIGN KEY (`cardnumber`) REFERENCES `borrowers` (`cardnumber`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
print "Upgrade to $DBversion done ( Added patronimage table. )\n";
SetVersion ($DBversion);
}
=item DropAllForeignKeys($table)

View file

@ -1,7 +1,7 @@
<!-- TMPL_IF NAME="borrowernumber" -->
<div class="patroninfo"><h5><!-- TMPL_VAR name="firstname" --> <!-- TMPL_VAR name="surname" --> (<!-- TMPL_VAR NAME="cardnumber" -->)</h5>
<ul>
<!-- TMPL_IF NAME="picture" --><li><img src="<!-- TMPL_VAR NAME="picture" -->" alt="<!-- TMPL_VAR name="firstname" --> <!-- TMPL_VAR name="surname" --> (<!-- TMPL_VAR NAME="cardnumber" -->)" border="0" style="margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC;" width="100" /></li><!-- /TMPL_IF -->
<li><img src="patronimage.pl?crdnum=<!-- TMPL_VAR NAME="cardnumber" -->" alt="<!-- TMPL_VAR name="firstname" --> <!-- TMPL_VAR name="surname" --> (<!-- TMPL_VAR NAME="cardnumber" -->)" border="0" style="margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC;" width="100" /></li>
<li><!-- TMPL_IF NAME="address"-->
<!-- TMPL_VAR NAME="address" -->
<!-- TMPL_ELSE -->

View file

@ -6,6 +6,7 @@ use CGI;
use C4::Context;
use C4::Auth;
use C4::Output;
use C4::Members;
my $DEBUG = ($ENV{DEBUG}) ? 1 : 0;
@ -91,6 +92,13 @@ sub handle_dir {
my ( %count );
my $file;
$count{filenames} = ();
my $mimemap = {
"gif" => "image/gif",
"jpg" => "image/jpeg",
"jpeg" => "image/jpeg",
"png" => "image/png"
};
opendir my $dirhandle, $dir;
while ( my $filename = readdir $dirhandle ) {
@ -113,12 +121,22 @@ sub handle_dir {
$filename =~ s/[\"\r\n\s]//g;
warn "Cardnumber: $cardnumber Filename: $filename" if $DEBUG;
if ($cardnumber && $filename) {
warn "Source: $dir/$filename Target: $destdir/$cardnumber.jpg" if $DEBUG;
my $result = move ( "$dir/$filename", "$destdir/$cardnumber.jpg" );
if ( $result ) {
$count{count}++;
push @{ $count{filenames} }, { source => $filename, dest => $cardnumber .".jpg" };
}
warn "Source: $dir/$filename" if $DEBUG;
open (IMG, "$dir/$filename") or warn "Could not open $dir/$filename";
#binmode (IMG); # Not sure if we need this or not -fbcit
my $imgfile;
while (<IMG>) {
$imgfile .= $_;
}
my $mimetype = $mimemap->{lc ($1)} if $filename =~ m/\.([^.]+)$/i;
warn "$filename is mimetype \"$mimetype\"" if $DEBUG;
my $dberror = PutPatronImage($cardnumber,$mimetype, $imgfile) if $mimetype;
# warn "Database says: $dberror" if $dberror;
close (IMG);
unless ( $dberror || !$mimetype ) {
$count{count}++;
push @{ $count{filenames} }, { source => $filename, dest => $cardnumber };
}
}
}
$count{source} = $dir;