Patch to Exif.php to reformat dates from image EXIF values

"Heath S. Hendrickson" <[email protected]>
Newsgroups gmane.comp.horde.ansel
Message-ID <[email protected]>
Attached are patches to lib/Exif.php and search.php that will take the 
EXIF date and convert it to a timestamp before storing it in the datatree.

I also patched templates/search/search.html to make the table heading 
for description consistent with what it's called elsewhere in Ansel, 
caption.

I'll see if I can get something done with the search form to handle the 
dates specially... I'm probably going to start by splitting the 
date-based attributes out into their own form (on the same page) to 
avoid any user confusion.

h

-- 
ansel mailing list - Join the hunt: http://horde.org/bounties/#ansel
Frequently Asked Questions: http://horde.org/faq/
To unsubscribe, mail: [email protected]
search.html.patch_changeHeading (text/plain, 644 B)
Index: templates/search/search.html
===================================================================
RCS file: /usr/local/horde/cvs/ansel/templates/search/search.html,v
retrieving revision 1.1
diff -u -r1.1 search.html
--- templates/search/search.html	18 May 2004 15:25:29 -0000	1.1
+++ templates/search/search.html	20 May 2004 01:46:22 -0000
@@ -6,7 +6,7 @@
  <tr>
   <td class="control"><b><gettext>Image</gettext></b></td>
   <td class="control"><b><gettext>Gallery</gettext></b></td>
-  <td class="control"><b><gettext>Description</gettext></b></td>
+  <td class="control"><b><gettext>Caption</gettext></b></td>
  </tr>
 
 <loop:images>
search.php.patch_fixFields (text/plain, 2 KB)
Index: search.php
===================================================================
RCS file: /usr/local/horde/cvs/ansel/search.php,v
retrieving revision 1.5
diff -u -r1.5 search.php
--- search.php	18 May 2004 15:25:28 -0000	1.5
+++ search.php	20 May 2004 01:46:33 -0000
@@ -31,11 +31,18 @@
         $fields = Ansel_ImageData::getFields();
 
         // Now add on any others that we may want.
-        $fields = array_merge($fields, array('description' => _("Description"),
-                                             'date-uploaded' => _("Date Uploaded"),
-                                             'filename' => _("Filename"),
-                                             'gallery' => _("Gallery Name")));
-        asort($fields);
+        $fields += array('description' => array( 'description' => _("Description"), 'type' => 'text'),
+                         'date-uploaded' => array( 'description' => _("Date Uploaded"), 'type' => 'date'),
+                         'filename' => array( 'description' => _("Filename"), 'type' => 'text'),
+                         'gallery' => array( 'description' => _("Gallery Name"), 'type' => 'text'));
+
+        // reformat the array so that the Form Renderer likes it
+        $searchFields = array();
+        foreach( $fields as $field => $data) {
+            $searchFields += array( $field => $data['description'] );
+        }
+ 
+        asort($searchFields);
 
         $ops = array('=' => _("Is"),
                      '!=' => _("Is Not"),
@@ -44,7 +51,7 @@
                      'LIKE' => _("Contains"),
                      'NOT LIKE' => _("Does Not Contain"));
 
-        $this->addVariable(_("Field"), 'field', 'enum', false, false, null, array($fields));
+        $this->addVariable(_("Field"), 'field', 'enum', false, false, null, array($searchFields));
         $this->addVariable(_("Operator"), 'op', 'enum', false, false, null, array($ops));
         $this->addVariable(_("Value"), 'value', 'text', false, false, null);
     }
Exif.php.patch_dateFixes (text/plain, 7 KB)
Index: lib/Exif.php
===================================================================
RCS file: /usr/local/horde/cvs/ansel/lib/Exif.php,v
retrieving revision 1.15
diff -u -r1.15 Exif.php
--- lib/Exif.php	15 May 2004 23:57:29 -0000	1.15
+++ lib/Exif.php	19 May 2004 20:41:34 -0000
@@ -19,7 +19,7 @@
         $fields = Ansel_ImageData::getFields();
         $output = array();
 
-        foreach ($fields as $field => $description) {
+        foreach ($fields as $field => $data) {
             $value = $image->get($field);
             if ($value === null) {
                 // Skip fields that weren't set.
@@ -27,6 +27,7 @@
             }
 
             $value = Ansel_ImageData::getHumanReadable($field, $value);
+            $description = isset($data['description']) ? $data['description'] : $field;
             $output[] = '<td class="item"><b>' . $description . '</b>:</td><td class="item">' . htmlspecialchars($value) . '</td>';
         }
         return $output;
@@ -66,7 +67,7 @@
         // See if we got any attributes back.
         if (count($result)) {
             $fields = Ansel_ImageData::getFields();
-            foreach ($fields as $field => $desc) {
+            foreach ($fields as $field => $data) {
                 $value = isset($result[$field]) ? $result[$field] : '';
 
                 // Don't store empty fields.
@@ -74,6 +75,13 @@
                     continue;
                 }
 
+                // if the field is a date field, convert the value to a timestamp
+                if ($data['type'] == "date") {
+                    list($ymd, $hms) = split(" ", $value, 2);
+                    list($year, $month, $day) = split(":",$ymd, 3);
+                    $time = "$month/$day/$year $hms";
+                    $value = strtotime($time);
+                }
                 $image->set($field, $value);
             }
 
@@ -263,9 +271,19 @@
 
         case 'ColorSpace':
             switch ($data) {
-            case 1: return _("sRGB");
+            case 1: 
+                return _("sRGB");
+                break;
+            default:
+                return _("Uncalibrated");
             }
-            return _("Uncalibrated");
+            break;
+
+        case 'DateTime':
+        case 'DateTimeOriginal':
+        case 'DateTimeDigitized':
+            return date("m/d/Y h:i:s O", $data);
+            break;
 
         default:
             return $data;
@@ -281,35 +299,35 @@
      */
     function getFields()
     {
-        return array('Make' => _("Camera Make"),
-                     'Model' => _("Camera Model"),
-                     'ImageType' => _("Image Type"),
-                     'FileSize' => _("File Size"),
-                     'DateTime' => _("Date Image Modified"),
-                     'DateTimeOriginal' => _("Date Image Taken"),
-                     'DateTimeDigitized' => _("Date Image Digitized"),
-                     'ExifImageWidth' => _("Width"),
-                     'ExifImageLength' => _("Height"),
-                     'XResolution' => _("X Resolution"),
-                     'YResolution' => _("Y Resolution"),
-                     'ShutterSpeedValue' => _("Shutter Speed"),
-                     'ExposureTime' => _("Exposure"),
-                     'FocalLength' => _("Focal Length"),
-                     'FocalLengthIn35mmFilm' => _("Focal Length (35mm equiv)"),
-                     'ApertureValue' => _("Aperture"),
-                     'FNumber' => _("F-Number"),
-                     'ISOSpeedRatings' => _("ISO Setting"),
-                     'ExposureBiasValue' => _("Exposure Bias"),
-                     'ExposureMode' => _("Exposure Mode"),
-                     'MeteringMode' => _("Metering Mode"),
-                     'Flash' => _("Flash Setting"),
-                     'UserComment' => _("User Comment"),
-                     'ColorSpace' => _("Color Space"),
-                     'SensingMethod' => _("Sensing Method"),
-                     'WhiteBalance' => _("White Balance"),
-                     'Orientation' => _("Camera Orientation"),
-                     'Copyright' => _("Copyright"),
-                     'Artist' => _("Artist")
+        return array('Make' => array( 'description' => _("Camera Make"), 'type' => 'text'),
+                     'Model' => array( 'description' => _("Camera Model"), 'type' => 'text'),
+                     'ImageType' => array( 'description' => _("Image Type"), 'type' => 'text'),
+                     'FileSize' => array( 'description' => _("File Size"), 'type' => 'number'),
+                     'DateTime' => array( 'description' => _("Date Image Modified"), 'type' => 'date'),
+                     'DateTimeOriginal' => array( 'description' => _("Date Image Taken"), 'type' => 'date'),
+                     'DateTimeDigitized' => array( 'description' => _("Date Image Digitized"), 'type' => 'date'),
+                     'ExifImageWidth' => array( 'description' => _("Width"), 'type' => 'number'),
+                     'ExifImageLength' => array( 'description' => _("Height"), 'type' => 'number'),
+                     'XResolution' => array( 'description' => _("X Resolution"), 'type' => 'number'),
+                     'YResolution' => array( 'description' => _("Y Resolution"), 'type' => 'number'),
+                     'ShutterSpeedValue' => array( 'description' => _("Shutter Speed"), 'type' => 'number'),
+                     'ExposureTime' => array( 'description' => _("Exposure"), 'type' => 'number'),
+                     'FocalLength' => array( 'description' => _("Focal Length"), 'type' => 'number'),
+                     'FocalLengthIn35mmFilm' => array( 'description' => _("Focal Length (35mm equiv)"), 'type' => 'number'),
+                     'ApertureValue' => array( 'description' => _("Aperture"), 'type' => 'number'),
+                     'FNumber' => array( 'description' => _("F-Number"), 'type' => 'number'),
+                     'ISOSpeedRatings' => array( 'description' => _("ISO Setting"), 'type' => 'number'),
+                     'ExposureBiasValue' => array( 'description' => _("Exposure Bias"), 'type' => 'number'),
+                     'ExposureMode' => array( 'description' => _("Exposure Mode"), 'type' => 'number'),
+                     'MeteringMode' => array( 'description' => _("Metering Mode"), 'type' => 'number'),
+                     'Flash' => array( 'description' => _("Flash Setting"), 'type' => 'number'),
+                     'UserComment' => array( 'description' => _("User Comment"), 'type' => 'text'),
+                     'ColorSpace' => array( 'description' => _("Color Space"), 'type' => 'number'),
+                     'SensingMethod' => array( 'description' => _("Sensing Method"), 'type' => 'number'),
+                     'WhiteBalance' => array( 'description' => _("White Balance"), 'type' => 'number'),
+                     'Orientation' => array( 'description' => _("Camera Orientation"), 'type' => 'number'),
+                     'Copyright' => array( 'description' => _("Copyright"), 'type' => 'text'),
+                     'Artist' => array( 'description' => _("Artist"), 'type' => 'text')
         );
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.