Upload Image Size Chain

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
Faar
Beiträge: 1496
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Upload Image Size Chain

Beitrag von Faar » Mi 17. Jul 2019, 13:41

Ich habe hier eine Chain, die Bilder vor dem Hochladen in die Dateiverwaltung automatisch skaliert.
Grund der Chain ist der, dass viele User eine Webseite keine Bildbearbeitung vor dem Hochladen machen, sondern Bilder direkt aus der hochauflösenden Kamera ins Web hochladen. Wenn das nicht wirklich nötig ist, weil das Bild so groß sein sollte, schmiert man ansonsten den Webspace zu und hat zudem auf der Webseite scheinbar kleine Bildchen, die aber lediglich klein dargestellt werden, in Wirklichkeit aber locker 24 oder 32 Megapixel groß sein können. Wer braucht ein 8000 x 4000 Pixel großes Bild in der Webseite? Vermutlich die wenigsten.
Darum diese Chain, die skaliert Bilder, wenn sie größer sind als der eingestellte Wert.
Die Chain wird über System-, Mandante- oder Usereinstellungen eingestellt.
Sofern es mit den Usereinstellungen klappt, kann man sogar je User die Chain verschieden einstellen.
Bei Bedarf auch auschalten, um mal ein großes Bild hochladen zu können.

Die Chain benützt Contenido Funktionen, könnte somit mit den neuesten Bilddatei-Formaten noch nicht klar kommen.
Es gibt natürliche Restriktionen durch den Server und die PHP Einstellungen, wie Upload-Max-Filesize oder erlaubte Dateiendungen.

Da ist der Download: https://dfabig.de/de/download/contenido ... chain.html

Mit 4.10 habe ich es noch nicht getestet.

Ok, als Nachtrag die Anleitung zum Installieren dazu:
https://docs.contenido.org/display/CONDEVE/Chain
Das wird vielleicht nicht gleich jeder verstehen, darum nochmal kurz:
1. Speicherort
Das Chain-Programm wird in /contenido/includes/chains/ abgelegt.
Speicherort.png
Speicherort für die Chain-Datei
Speicherort.png (8.01 KiB) 651 mal betrachtet
2. Die Chain in Contenido "bekannt" zu machen
Damit die Chain überhaupt von Contenido geladen wird, muss sie noch in eine Config-Datei eingetragen werden.
Die befindet sich üblicherweise in /data/production/ und nennt sich config.chains.load.php
config2.jpg
Eintrag in der Chain config-Datei
(131.72 KiB) Noch nie heruntergeladen
Hier gibt es 2 Einträge zu tätigen: 1. die Chain-Datei und 2. den Eintrag bei welchem Hook die Chain geladen werden soll.
In diesem Fall ist des die cec-Hook "Contenido.Upload.UploadPostprocess", die selbst schon erklärt, dass sie für die Upload-Nachbearbeitung greift. Diese ist bereits in Contenido eingebaut, sonst könnten wir sie nicht nutzen. Ja, und daran anschließend einen griffigen Namen für diese Chain. Das ist zugleich der Name der Funktion in der Chain. Das muss überein stimmen.

3. Konfiguration
Die Chain ist konfigurierbar, trotzdem eine Chain eigentlich kein Userinterface hat. Aber die System-, Mandanten- oder User-Einstellungen greifen.
Hier hilft das Bildchen zu den Einstellungen schneller als man es beschrieben hat.
Einstellungen.png
Mandanten-Einstellungen
(14.59 KiB) Noch nie heruntergeladen
In den Bildanhängen sieht man die Installation auch noch anschaulich.

Noch einen Nachtrag zum Nachtrag:
Wenn man ein Update macht und die config.chains.load.php dabei auch neu hoch lädt, ist die eigene Chain natürlich wieder raus.
Zuletzt geändert von Faar am Do 18. Jul 2019, 14:07, insgesamt 1-mal geändert.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

mattmarr
Beiträge: 327
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

Re: Upload Image Size Chain

Beitrag von mattmarr » Do 18. Jul 2019, 13:38

Hallo Faar!

danke für das super Script!!

Leider greift der Chain an einer Stelle nicht. Wenn man im Artikel ein Bild mit dem CMS_IMGEDITOR hoch lädt wird der Chain nicht ausgelöst.
So wie ich das sehe ist die Programmierung für das auslösen des Chain in der Datei "contenido/classes/content_types/class.content.type.imgeditor.php" > "function uplupload()" nicht eingebaut worden.



Gruß
Matthias

Faar
Beiträge: 1496
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Upload Image Size Chain

Beitrag von Faar » Do 18. Jul 2019, 14:05

Hallo Matthias,
tatsächlich ist die Chain nur für den Dateiverwaltungsbereich gedacht.
Und wie du festgestellt hast, andere Arten von Upload umgehen diesen Hook.

Es gibt da zwei Chains die mit dem Upload zu tun haben:
Contenido.Upload.UploadPreprocess
Contenido.Upload.UploadPostprocess
Ersteres greift im PHP-Prozess eines Fileuploads ein, bevor die Datei im Contenido Bereich gespeichert wird.
Meine Chain benützt den zweiten Hook, der danach wirksam wird.
Vielleicht würde der erste Hook bei sämtlichen Arten von Upload greifen?
Ich muss mir mal die erste Hook genauer anschauen, was sie macht und ob man da das Datei-Handling übernehmen muss wie bei einem Uploadmodul (hab ich auch noch irgendwo) ?
Vielleicht kann ich meine Chain darauf adaptieren falls der erste Hook alle Uploads betrifft.

Chains sind schon klasse, weil sie einfach vor sich hin werkeln und (meistens) tun was sie sollen.
Als eher Problem sehe ich, dass es keine Info gibt (z.B. im MyContenido Bereich), dass die Chain aktiv ist.
Ich habe auch erst jetzt beim Veröffentlichen gesehen, dass die Chain, die ja nun schon über 2 Jahre alt ist, in meiner 4.10 Testversion gar nicht mehr läuft, weil ich beim Update die config.chain.load.php überschrieben habe.
Irgendwo war doch noch beschrieben, wie man eigene Configs erstellt.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4051
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Upload Image Size Chain

Beitrag von Oldperl » Do 18. Jul 2019, 14:26

Servus,

eine Umsetzung als Plugin würde Sinn machen und die Installation auch für Laien vereinfachen.

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1496
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Upload Image Size Chain

Beitrag von Faar » Do 18. Jul 2019, 15:07

Oldperl hat geschrieben:
Do 18. Jul 2019, 14:26
eine Umsetzung als Plugin würde Sinn machen und die Installation auch für Laien vereinfachen.
Im Prinzip ja, aber für Laien zu installieren ist die Chain gar nicht gedacht, denn sie richtet sich eher "gegen" Laien :twisted:
Ein Contenido Webentwickler soll die Chain installieren, damit Laien in ihrer Uploadwut begrenzt werden.
"Laien", die sich das selbst installieren wollten, wären auch in der Lage, ihre Bilder vor dem Upload zu skalieren.
Die Chain wurde ja für einen praktischen Fall entwickelt.

Der klassische Anwendungsfall ist der des Admins, der aus naheliegenden Gründen verhindern muss, dass laienhafte User gigantische Bilder hochladen.
Zum einen verhindert auch die Max-UploadFileSize all zu große Bilder aber bei manchen ist das auf 100 MB hochgeschraubt, wegen gigantischer PDF oder Videos. Ein 100 MB JPEG wäre nicht gerade klein.
Die Chain kümmert sich nur um die gängigen Pixel-Bildformate, die Contenido verarbeiten kann.
Letzteres kann noch ein Problem darstellen, wenn neue Web-Bildformate hochgeladen werden sollen, die Contenido noch nicht beherrscht.
Davon unbetroffen sind Bildformate, die nichts mit Web zu tun haben, wie Indesign, Photoshop oder Corel.

Ein Problem der eigenen Chain ist noch, dass sie beim Updaten aus der config.chains.load.php rausgeworfen wird, weil diese config-Datei in dem Update-Packet mit drin ist. Man soll ja eigentlich alle config-Dateien zuerst sichern aber meistens tun das die wenigsten und praktisch sollte es eine Art config.chains.load.local.php geben. Vielleicht gibt es die auch und ich weiß es derzeit nur nicht :shock:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4051
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Upload Image Size Chain

Beitrag von Oldperl » So 21. Jul 2019, 12:26

Servus,
Faar hat geschrieben:
Do 18. Jul 2019, 15:07
Im Prinzip ja, aber für Laien zu installieren ist die Chain gar nicht gedacht, denn sie richtet sich eher "gegen" Laien :twisted:
Ein Contenido Webentwickler soll die Chain installieren, damit Laien in ihrer Uploadwut begrenzt werden.
"Laien", die sich das selbst installieren wollten, wären auch in der Lage, ihre Bilder vor dem Upload zu skalieren.
Die Chain wurde ja für einen praktischen Fall entwickelt.
Wie Du meinst, ich habe so etwas ähnliches als Plugin für meine ConLite umgesetzt. Es hilft meiner Meinung nach allen Admins, die eine Seite betreuen, ohne dabei die Update-Fähigkeit des Systems zu erschweren. Eventuell sollte man auch bei den Chains etwas in der Art etablieren, bzw. bei den Plugins noch Kategorien unterscheiden (System, Admin, User)

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das neue Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1496
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Upload Image Size Chain

Beitrag von Faar » Mo 22. Jul 2019, 11:10

Oldperl hat geschrieben:
So 21. Jul 2019, 12:26
Wie Du meinst, ich habe so etwas ähnliches als Plugin für meine ConLite umgesetzt.
Schön für dich, und wo ist Dein Plugin hier in der Liste zum downloaden?
Eventuell sollte man auch bei den Chains etwas in der Art etablieren, bzw. bei den Plugins noch Kategorien unterscheiden (System, Admin, User)
Die Anleitung in den Docs scheint falsch zu sein: https://docs.contenido.org/display/CONDEVE/Chain
Es bräuchte im Core-Code folgendes auch für die Mandanten:

Code: Alles auswählen

if (cFileHandler::exists($cfg'path''contenido_config' . 'config.chains.load.php')) {
include_once($cfg'path''contenido_config' . 'config.chains.load.php');
}
Und vielleicht auch nochmal für das System.
Zum einen sollen sicher nicht alle eigenen Chains auf allen Mandanten wirken, daher die Suche noch in jedem Mandanten nach Chains.
Aber systemweite Chains machen in einem Mandantenordner auch von der Semantik her weniger Sinn. Ich sehe da einen Denkkonflikt, wenn man auf das gesamte System wirkende Chains im Mandanten ablegt.
Daher nochmal eigene Chain-Config im System.

Natürlich könnte man sich auch bemühen und vor dem Update alle Config-Dateien sichern (was wir ja alle machen) und dann mit Programmen wie WinMerge die beiden Config-Dateien vergleichen, was unterschiedlich ist.
Ich sehe das halt als wenig elegant an.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten