Um Dateien in Brandbox hochzuladen, ohne den hochladenden Nutzern einen Zugang zu brandbox zu gestatten, ist es möglich Uploadformulare zu generieren, welche sich dynamisch erweitern lassen.
Erstellt man beispielsweise ein Uploadformular für Kategorien, so kann man über einen Link mit Verifizierungstoken auf dieses Formular zugreifen. Der Uploadprozess besteht aus drei Schritten:
- Upload der Dateien
- Befüllen der Felder pro Datei (sofern vorhanden) bzw. Hinzufügen oder Entfernen von Dateien
- Abschluss des Uploadvorgangs
Im Fall der Kategorie gibt es keine zusätzlichen Felder im zweiten Schritt. Das Verknüpfen der hochgeladenen Dateien zur vorausgewählten Kategorie findet im dritten Schritt codeseitig statt.
Um das Formular optisch und inhaltlich zu verändern werden Events angeboten. Auch die Verarbeitung der hochgeladenen Dateien ist über Events manipulierbar.
Es sollte eine öffentliche Rolle vorhanden sein, die es ermöglicht Dateien und Ordner anzulegen. Ist das nicht der Fall, wird der Uploadvorgang fehlschlagen.
Aufbau des Plugins
Die dynamischen Uploadformulare basieren auf der Entität dynamicUpload
. Diese Entität enthält sowohl Informationen, die für den Upload zwingend benötigt werden, als auch Informationen, die die Basisfunktionalität ergänzen.
Benötigte Parameter sind:
- Name
- IDs der Verifizierungstoken
Optionale Parameter sind:
- Ablaufdatum des Formulars
- ID des Dateinamenformats
- ID der temporären Rolle
Integrationsspezifische Informationen sind in eigenen Entitäten zu speichern (siehe dynamicUploadCategory
in "dam/category").
Die Events leiten von dtoEventAbstract
ab und verfügen alle über Referenzen zur jeweiligen dynamicUpload
-Entiät und zum entsprechenden verificationToken
. Über diese Kombination kann eine Integrationsstelle die jeweilige Entität finden.
Möchte man vermeiden, dass weitere Events ausgeführt werden, so kann man die Wert der Eigenschaft continue
auf false setzen.
Konfiguration
Die Uploadformulare besitzen eine Konfigurationstabelle (landingPage
). Das ist derzeit eine Panel-Tabelle. Das bedeutet, dass die Einstellungen für alle dynamischen Uploadformulare gelten.
Property | Bezeichnung | Beschreibung |
---|---|---|
backgroundImage | Hintergrundbild | Zeichenkette. Enthält den relativen Pfad zum gewünschten Hintergrundbild. |
logo | Logo | Zeichenkette. Enthält den relativen Pfad zum gewünschten Logo. |
containerOffset | Versatz des Containers | Ganzzahl. Enthält einen Wert von 1-12. Sinnvolle Werte liegen im Bereich von 1-6. Der Container wird um das n/12-fache vom linken Fensterrand nach Rechts versetzt. |
containerOffsetMobile | Versatz des Containers (Mobile Ansicht) | Ganzzahl. Enthält einen Wert von 1-12. Sinnvolle Werte liegen im Bereich von 1-6. Der Container wird um das n/12-fache vom linken Fensterrand nach Rechts versetzt. |
containerWidth | Breite des Containers | Ganzzahl. Enthält einen Wert von 1-12. Der Container füllt das n/12-fache der verfügbaren Breite. |
containerWidthMobile | Breite des Containers (Mobile Ansicht) | Ganzzahl. Enthält einen Wert von 1-12. Der Container füllt das n/12-fache der verfügbaren Breite. |
Verwendung
Allgemeines
Alle Events im mehrstufigen Uploadprozess implementieren das Interface dam/upload/lib/event/dynamicUploadEventInterface. Tatsächlich leiten die meisten Events von der Klasse dam/upload/lib/event/adapter/dynamicUploadEventAdapter ab, um nur Methoden zu implementieren, die tatsächlich genutzt werden sollen.
Es existiert ein default-Listener (dam/upload/lib/event/dynamicUploadDefaultEvent
), welcher ein bestimmtes Basisverhalten bereitstellt (Bereitstellen eines Logos, Umbenennen der Dateien etc.). Die Priorität beträgt 100 und somit ist es möglich dieses Verhalten zu umgehen.
Uploadprozess
Um ein dynamisches Uploadformular zu erstellen ist zunächst lediglich eine existierende dynamicUpload-Entität mit einem dazugehörigen Verifizierungstoken notwendig. Mit dem URL-Token des Verifizierungstoken muss nun die URL "yourhost.com/public?request=dam/upload.formUpload&vToken=urlToken
" aufgerufen werden. Um sich dich Entitäten erzeugen zu lassen kann die öffentliche Methode dam\upload\engine::createDynamicUpload
genutzt werden. Die benötigten Entitäten kann der Integrator auch selbst erzeugen (siehe dam/ui).
Der Upload Prozess besteht aus drei Schritten. Einstiegspunkte für diese Schritte sind öffentliche Methoden. Alle Schritte/öffentlichen Methoden erwarten die URL-Repräsentation eines Verifizierungstoken. Ist dieser nicht vorhanden, fehlerhaft oder abgelaufen, so wird eine generische Fehlermeldung ausgegeben.
Schritt 1 (dam/upload.formUpload):
Einstiegspunkt für den Uploadprozess ist dam/upload.formUpload
. Hier wird das Formular initial platziert. In diesem Schritt lässt sich der Header des Formulares über das Event onPopulateDynamicUploadHeader
anpassen. Das Event enthält ein Array aus headerElement-Objekten, die aus styleguide/brandbox
kommen. Entsprechend werden nur headerElement
-Objekte dargestellt.
Schritt 2 (dam/upload.formUploadEdit):
Wurden die Dateien erfolgreich hochgeladen, so werden deren IDs als contentIDs an dam/upload.formUploadEdit
weitergegeben. Jede hochgeladene Datei ist eine Reihe im Formular. Diese Reihen müssen das input/file
-Feld enthalten. Einer Reihe können über das Event onPopulateDynamicUploadForm
weitere Felder hinzugefügt werden. Das Event dam/upload/lib/event/dto/dtoOnPopulateDynamicUploadForm
enthält diese Reihen als Instanzen von dam/upload/lib/map/entityUploadFileRow
.
Diese Felder müssen einem bestimmten Namensmuster folgen. Das Präfix für den Parameternamen kann über die Methode getInputNamePrefix
der Klasse dam/upload/lib/map/entityUploadFileRow
bezogen werden.
Beispiel: Präfix: inputFileRow[0], Name des Inputs: categoryID. Resultat: inputFileRow[0]['categoryID'].
Schritt 3 (dam/upload.formUploadSubmit):
Einen Abschluss findet der Vorgang im Schritt dam/upload.formUploadSubmit
. Aus den erhaltenen HTTP-Parameter werden Instanzen der Klasse dam/upload/lib/event/dto/submittedRow
gebildet, sofern die in den HTTP-Parametern übertragenen Dateipfade existieren.
Feldvalidierungen
Wenn im zweiten Schritt die Feldinhalte validiert werden sollen, kann das ebenfalls über das Event onEditAfterUpload
geschehen. Das entsprechende Event-Objekt besitzt eine Eigenschaft, die ein Array an upload\lib\struct\structDynamicUploadViolation
-Objekten erwartet. Diese Objekte benötigen den Namen des fehlerhaften Parameters, die Fehlernachricht und die Nummer der Feldreihe. Die Fehlermeldungen werden wie von base/uiBase
als http\response\invalid
an das UI gesendet.
/** * @param upload\lib\event\dto\dtoOnEditAfterUpload $dto */ public function onValidateEditAfterUpload(upload\lib\event\dto\dtoOnEditAfterUpload $dto) { foreach($dto->submittedRows as $submittedRow): $rowNumber = $submittedRow->rowNumber; $dto->violations[] = new upload\lib\struct\structDynamicUploadViolation('testField', 'Hier ging was schief', $rowNumber); endforeach; }