Closed ghost closed 12 years ago
Wie lässt sich das reproduzieren?
--- Originally created on September 4th, 2010, at 12:25am
[[WikiIncompleteDe|Unvollständiges Ticket]]
--- Originally created on September 5th, 2010, at 07:33pm
Gut, war wohl noch nicht eindeutig, hier noch mal vollständig:
+Gewünschtes Ziel:+ Eine Erweiterung soll per getImage-Hook die vollständige Kontrolle des resize zu übernehmen.
+Vorbedingung für das Beispiel:+
+Ablauf+ Beim Upload der Grafik wird aufgrund der Größenüberschreitung aus der DC_Folder::move Funktion heraus die Controller::resizeImage aufgerufen. Diese ruft seinerseits die Controller::getImage mit definiertem Parameter $target auf. Aufgrund des erfolgreichen Uploads, des benötigten resize und der fehlenden cache Datei wird jetzt ab Zeile 787 der Hook behandelt. Dieser kann aufgrund der übergebenen Parameter zwar das resize durchführen, weiß aber nicht, dass die Quelldatei (definiert durch $target) überschrieben werden soll. Somit liefert der Hook einen String zurück, der auf die neue (kleinere) cache-Datei verweist.
Dadurch wird in Zeile 796 dieser String zurück gegeben und die Controller::getImage beendet.
Die Quelldatei bleibt unverändert, das gewünschte überschreiben wie ab Zeile 959 definiert wird trotz des gesetzten $target nie erfolgen.
Um auch das Überschreiben der Quelldatei zu ermöglichen, muss entweder der Hook um das $target erweitert werden, was allerdings für bestehende Erweiterungen ein Problem werden könnte, oder das überschreiben des Originals erfolgt in der Controller::getImage.
Das Beispiel oben ist ein Vorschlag für letztere Variante und verträgt sich auch mit bestehenden Erweiterungen.
--- Originally created by N.Parker on September 6th, 2010, at 09:05am
Änderungsvorschlag nochmal als Diff-Datei.
--- Originally created by N.Parker on September 13th, 2010, at 10:20am
Freundlich gemeinte Nachfrage: Ist meine Problembeschreibung jetzt nachvollziehbar, oder fehlt noch was?
Ich frage nur, weil in "[[WikiIncompleteDe|Unvollständiges Ticket]]" steht: Bleibt das Ticket unvollständig, wird es nach einer bestimmten Frist automatisch geschlossen.
--- Originally created by N.Parker on September 26th, 2010, at 11:12am
Warum auch immer, im ersten diff war die Zeile 795 nicht entfernt
So bringt das diff nichts. Neue diff sollt das jetzt richtig dar.
--- Originally created by N.Parker on December 6th, 2010, at 12:03pm
Ich habe jedoch noch immer keine Ahnung, wie ich das auf meinem System reproduzieren kann. Ist Deine Callback-Funktion irgendwo verfügbar?
--- Originally created on February 7th, 2011, at 02:45pm
Hm, ich konnte das soeben auch in Revision 594 noch nachstellen. Hier noch mal eine längere Erklärung, die das unterschiedliche Verhalten mit und ohne Hook-Funktion aufzeigen soll.
h2. Vorbedingung:
Voreingestellt ist eine maximale Bildgröße von 200 x 150 px $GLOBALS['TL_CONFIG']['imageWidth'] = 200; $GLOBALS['TL_CONFIG']['imageHeight'] = 150;
Eine Grafik mit Namen BigPicture.jpg in der Größe 1024 * 768 px soll in das Verzeichnis tl_files hoch geladen werden.
h2. Ohne Hook Funktion
Wenn kein getImageHook definiert ist, dann wird nach dem Upload der Grafik folgendes ausgeführt: Die Controller::getImage wird mit folgenden Parametern aufgerufen:
Bis Zeile 784 wird geprüft ob ein resize erfolgen soll. In Zeile 787 wird erkannt dass kein getImageHook definiert ist. In den Zeilen 802 – 956 erfolgt das resize In Zeile 959 wird erkannt, dass ein $target gesetzt ist. und anschließend die Datei "tl_files/BigPicture.JPG" durch die „kleinere“ Datei ersetzt.
h2. Mit Hook Funktion
Ist ein getImageHook definiert, wird stattdessen folgendes ausgeführt: Die Controller::getImage wird ebenfalls mit folgenden Parametern aufgerufen:
Bis Zeile 784 wird geprüft ob ein resize erfolgen soll. In Zeile 787 wird erkannt dass ein getImageHook definiert ist und dieser Ausgeführt. Die beigefügte getImageHook Funktion macht nichts anderes als das Original, speichert die „kleinere“ Datei jedoch im Verzeichnis „system/html2/“ statt in „system/html/“.
Da die getImageHook einen gültigen Dateipfad zurück liefert, wird die Controller::getImage in Zeile 796 beendet.
Die Original-Datei "tl_files/BigPicture.JPG" liegt noch immer in der Größe 1024 * 768 px im Ordner.
Die getImageHook Funktion kann das Ersetzen der Original-Datei nicht übernehmen, da sie den Parameter $target der Controller::getImage nicht erhält (von irgendwelchen Spielchen mit Debug-Funktionen mal abgesehen, die hierfür jedoch nicht genutzt werden sollten). Deshalb sind in der beigefügten getImageHook-Funktion die Zeilen 169-175 auskommentiert.
Wird in der Controller::getImage vor dem Return in Zeile 796 geprüft, ob ein Ersetzen der Original-Datei gewünscht ist ($target != null) kann auch die Orignal-Datei ersetzt werden. Der 2. Patch fügt dieses Verhalten ein. Diese Variante bedeutet keine Veränderung an der Schnittstelle für den getImage Hook.
Das Problem liegt nicht in der Änderung der Größe einer Grafik oder im Cachen, sondern nur im Ersetzen der neu hoch geladenen Datei im tl_files-Ordner durch eine größenkorrigierte Version.
--- Originally created by N.Parker on February 9th, 2011, at 08:40pm
Reicht die Beschreibung, oder soll ich hier noch etwas ergänzen?
--- Originally created by N.Parker on March 25th, 2011, at 02:14pm
Behoben in ca683f201ec71084a894e38e2f6992a9.
--- Originally created on June 23rd, 2011, at 12:34pm
--- Originally completed on June 23rd, 2011, at 12:34pm
Wenn ein getImage Hook genutzt wird und z.B. Controller::resizeImage die Controller::getImage mit gesetztem target aufruft, dann erhält die Hook-Funktion keine Information über das Target. Somit funktioniert die Controller::resizeImage nicht mehr korrekt.
Basierend auf 62874796cc6487c2c92f835c03ca0972 der controller.php kann die Zeile 796 durch folgendes ersetzt werden:
Download the attachments
--- Originally created by N.Parker on August 25th, 2010, at 03:30pm (ID 2470)