First installment on moving patronimages into the database.
authorChris Nighswonger <cnighswonger@foundations.edu>
Sat, 23 Feb 2008 11:28:01 +0000 (06:28 -0500)
committerJoshua Ferraro <jmf@liblime.com>
Sat, 23 Feb 2008 16:55:37 +0000 (10:55 -0600)
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
C4/Members.pm
installer/data/mysql/kohastructure.sql
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc
tools/picture-upload.pl

index 96b47fe..6e81ea3 100644 (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)
index 0f66651..17d0c63 100644 (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`
 --
index 3b4f03f..7e0aa1a 100755 (executable)
@@ -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)
 
index dda89ba..d516fcc 100644 (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 -->
index b6fe189..78ca35f 100755 (executable)
@@ -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;