[web] Bug in der zOOm Gallery
10. August 2008 von Jürgen
Auf der Page vom Team Bushido nutze ich die zOOm Media Gallery als Komponente in Joomla für unsere Fotoalben. Schon desöfteren ist mir dort aufgefallen, das wenn ich neue Bilder in ein Album lade, diese immer durcheinandergewürfelt werden. An diesem Wochenende habe ich ein neues Album erstellt und dort Bilder von mehreren verschiedenen Kameras eingefügt, die chronologisch richtig dargestellt werden sollten. Hierfür bietet die zOOm Gallery die Möglichkeit die Medien nach Datum zu sortieren.
Leider machte es auf den ersten Blick den Anschein als würde diese Funktion nicht wirken. Ich fand schließlich heraus das die Medien in der Datenbank Tabelle immer das aktuelle Datum hatten, also entweder das Datum des Uploads, oder das der letzten Änderung am Datensatz.
Nach einem Codereview stellte ich fest das die zOOm Gallery wenn die Konfig “Lese EXIF Daten” aktiviert ist, beim upload der Bilder eine fallbackfähige Kaskade durchläuft um der Datei ein EXIF Datum zu entlocken, schlagen alle diese Methoden fehl, wird das File Creation Date herangezogen.
Jedoch wird das so mühevoll ausgelesene Datum zum einen nicht auf das image.class Objekt geschrieben, noch in der save() Methode des image.class Objekts berücksichtigt. Um das zu korrigieren sind folgende Änderungen an den entsprechenden files notwendig.
/components/com_zoom/lib/toolbox.class.php
//replace all of the 3 occurencies of "$1-$2-$3" by "$1-$2-$3$4"
} else {
// Couldn't find an EXIF date in the image
// Set default date as creation date of file
$new_ps_file_info['date'] = date ("Y-m-d", filectime( $file ));
}
$imgobj->_date = $new_ps_file_info['date']; //alj@10AUG2008: +++
}
/components/com_zoom/lib/image.class.php
function save() {
global $database;
$uid = $this->currUID;
$database->setQuery("INSERT INTO #__zoomfiles
imgfilename, imgname, imgkeywords,
imgdescr,imgdate,catid,uid,imgmembers)"
. " VALUES "
/* --- */// . "('".zoom::escapeString($this->_filename)."',
/* --- */// '".zoom::escapeString($this->_name)."',
/* --- */// '".zoom::escapeString($this->_keywords)."',
/* --- */// '".zoom::escapeString($this->_descr)."',
/* --- */// NOW(),
/* --- */// '".zoom::escapeString($this->_catid)."',
/* --- */// '".$this->_uid."', '1')");
/* +++ */ . "('".zoom::escapeString($this->_filename)."',
/* +++ */ '".zoom::escapeString($this->_name)."',
/* +++ */ '".zoom::escapeString($this->_keywords)."',
/* +++ */ '".zoom::escapeString($this->_descr)."',
/* +++ */ '".zoom::escapeString($this->_date)."',
/* +++ */ '".zoom::escapeString($this->_catid)."',
/* +++ */ '".$this->_uid."', '1')");
if ($database->query()) {
return true;
} else {
return false;
}
}
Nachdem die Bilder jetzt den richtigen Timestamp haben, habe ich die Laufgeschwindigkeit der Diashow noch etwas erhöht, da die eingestellten 8 Sek. für meinen Geschmack etwas zu viel sind. Hierzu muss folgendes geändert werden:
/components/com_zoom/lib/zoom.class.php
// Set slideShowSpeed (milliseconds)
var slideShowSpeed = 3000;
