&GetSortDetails
&GetTitles
&GetPatronImage
+ &PutPatronImage
&GetMemberAccountRecords
&GetBorNotifyAcctRecord
=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)
) 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`
--
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)
<!-- 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 -->
use C4::Context;
use C4::Auth;
use C4::Output;
+use C4::Members;
my $DEBUG = ($ENV{DEBUG}) ? 1 : 0;
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 ) {
$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;