Coder Social home page Coder Social logo

friendsofredaxo / yform_dropzone Goto Github PK

View Code? Open in Web Editor NEW
24.0 5.0 2.0 112 KB

Erweitert YForm für REDAXO um Multiuploads mit Drag & Drop

License: MIT License

CSS 0.49% JavaScript 84.87% PHP 14.63%
redaxo dropzone upload uploader yform dropzonejs php redaxo-addon

yform_dropzone's Introduction

Dropzone Multi-Upload-Feld mit Drag & Drop für YForm 4

Übersicht

Dieses Addon bindet dropzone.js ein und fügt YForm die Value dropzone hinzu. Diese bietet eine Möglichkeit, mehrere Dateien auf einmal hochzuladen.

Features

  • Mehrere Dateien in ein YForm-Value hochladen
  • Drag & Drop Upload im Frontend und im Table Manager
  • Download der Dateien direkt aus der Tabellenübersicht des Table Managers
  • Einschränkung maximale Dateigröße je Datei
  • Einschränkung des Dateityps (Dateiendungen) sowohl clientseitig (Datei-Auswahl-Dialog des Betriebssystems), als auch serverseitig (Validierung)

Hinweis: Es sollte sichergestellt sein, dass der Webspace genügend Speicherplatz hat, um größere Mengen an Uploads problemlos abzuspeichern.

Erste Schritte

Setup

Nach der Installation ist das Feld in YForm verfügbar.

Feld hinzufügen (Table Manager)

  1. In REDAXO auf YForm > Table Manager klicken
  2. In der gewünschten Tabelle die Felddefinition editieren
  3. Das Feld dropzone hinzufügen und den Instruktionen folgen
  4. Lang-Parameter hinzufügen:
{
    "add":"Dateien hinzufügen",
    "start":"Upload starten",
    "clear":"zurücksetzen",
    "dictDefaultMessage":"Dateien auf dieses Feld ziehen",
    "dictFallbackMessage":"Ihr Browser untersützt leider keine Drag\'n\'Drop Datei Uploads",
    "dictFallbackText":"",
    "dictFileTooBig":"Datei ist zu groß",
    "dictInvalidFileType":"Dateityp wird nicht unterstützt",
    "dictResponseError":"Ein Fehler ist aufgetreten. Ein oder mehrere Dateien konnten nicht hochgeladen werden.",
    "dictCancelUpload":"abbrechen",
    "dictUploadCanceled":"Upload wurde abgebrochen",
    "dictCancelUploadConfirmation":"Upload wird abgebrochen",
    "dictRemoveFile":"entfernen",
    "dictRemoveFileConfirmation":"Datei wird entfernt",
    "dictMaxFilesExceeded":"Zuviele Dateien",
    "dictFileSizeUnits":"mb"
}

Anschließend kann das Feld verwendet werden.

Links und Hilfe

Hinweise und bekannte Probleme in dieser Version

ACHTUNG: Im Moment muss eine hidden-Value namens order_id im Formular vorhanden sein, das einen einmaligen Key generiert. Beteilige dich am Addon, um dieses Problem zu lösen. z.B.: $yform->setValueField('hidden', array('order_id',bin2hex(openssl_random_pseudo_bytes(16))));

Es wird jQuery benötigt.

Die Einstellung "Pflichtfeld" ist ohne Funktion

Debugging

Wenn was mit der Dropzone clientseitig schief läuft, ist das Problem entweder in der mitgelieferten JS-Datei in /assets/addons/yform_dropzone/js/, oder serverseitig in der API unter /redaxo/src/addons/yform_dropzone/lib/.

Erster Ansatz: Browser-Developer-Console liefert beim Fehler zusätzliche Infos als JSON in der Response, z.B. bei der Validierung (Dateigröße, Formate, oder, ob die Datei bereits vorhanden war).

Meist stimmt einfach was mit den Parametern der Validierung nicht.

Bugmeldungen Hilfe und Links

yform_dropzone's People

Contributors

alxndr-w avatar geri2017 avatar gharlan avatar schuer avatar skerbis avatar staabm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

geri2017 rkemmere

yform_dropzone's Issues

Usability: Fehlermeldungen ausgeben

Aus irgendeinem Grund werden Fehlermeldungen nicht ausgegeben, bspw. wenn die dropzone die Datei aufgrund von Dateigrößenbeschränkungen oder Dateiendungen ablehnt.

Description updaten

Die dropzone benötigt noch eine aktuelle description am Value-Feld. Die kann sich aber noch in Abhängigkeit der Definitionen ändern.

Doku-Seite schöner machen

Die verliert momentan das Menü von YForm.

@gharlan hast du mir einen Tipp, wie ich das richtig anlege in der package.yml oder wie kann ich das mit Menü (Addon-Menü oben) rendern?

Frontend Upload Sicherheitslücke?

Leider bekomme ich es nicht hin, das für jeden Besucher beim hochladen ein eigener Ordner genommen wird .
Wenn ich es mit zwei Nutzern teste, sieht jeder der Nutzer was der andere hochgeladen hat.

Die uniqueId wird irgendwie gar nicht durchgeschleift.

Warnings

Warning: array_merge() [function.array-merge]: Argument #2 is not an array in redaxo/src/addons/yform_dropzone/ytemplates/bootstrap/value.dropzone.tpl.php on line 25

Warning: Invalid argument supplied for foreach() in redaxo/src/addons/yform_dropzone/ytemplates/bootstrap/value.dropzone.tpl.php on line 29

REDAXO-Umgebung nutzen

an vielen Stellen wird mit $_FILES, $_SESSION, fopen() etc. gearbeitet. Hier sollten die üblichen Klassen/Methoden/Funktionen von REDAXO verwendet werden.

Doku: Sprachcodes-JSON

{
    "add":"Dateien hinzufügen",
    "start":"Upload starten",
    "clear":"zurücksetzen",
    "dictDefaultMessage":"Dateien auf dieses Feld ziehen",
    "dictFallbackMessage":"Ihr Browser untersützt leider keine Drag\'n\'Drop Datei Uploads",
    "dictFallbackText":"",
    "dictFileTooBig":"Datei ist zu groß",
    "dictInvalidFileType":"Dateityp wird nicht unterstützt",
    "dictResponseError":"Ein Fehler ist aufgetreten. Ein oder mehrere Dateien konnten nicht hochgeladen werden.",
    "dictCancelUpload":"abbrechen",
    "dictUploadCanceled":"Upload wurde abgebrochen",
    "dictCancelUploadConfirmation":"Upload wird abgebrochen",
    "dictRemoveFile":"entfernen",
    "dictRemoveFileConfirmation":"Datei wird entfernt",
    "dictMaxFilesExceeded":"Zuviele Dateien",
    "dictFileSizeUnits":"mb"
}

muss in die Felddefinition. Könnte man auch direkt bei der Eingabe der Parameter per default einfügen.

Verzicht auf manuelles hidden-Feld

im Moment wird ein manuelles Hiddenfeld für einen unique key benötigt, um sich zu merken, welche Dateien hochgeladen wurden und auch um eindeutige Ordner pro Formular+Feld+Nutzer zu erzeugen.

Das müsste man sich vom upload-Feld aus YForm abgucken und dann an den richtigen Stellen korrigieren - im JS, in der Felddefinition und im Template.

PDF immer aktiviert

Als Dateiformat ist pdf immer aktiviert, wenn die Tabelle angelegt wird.
Wenn ich es lösche und speichere ist es beim nächsten Aufruf wieder da.

Abhängigkeit von JQuery lösen

dropzone.js ist prinzipiell ohne jQuery nutzbar - Bootstrap 3 erfordert hingegen jQuery.

Vielleicht findet man eine Lösung, die dropzone jQuery-frei zu halten.

Weitere Validierungen hinzufügen (z.B. Pflichtfeld)

Die vom Upload-Feld bekannten Validierungen sollen auch mit Dropzone funktionieren, heißt:

  • ist Pflichtfeld und ausgefüllt? - In der Umsetzung: gibt es zu dieser Session und zu dieser Tabelle und zu diesem Feld schon ein Verzeichnis mit Dateiinhalten?
  • Dateigröße min/max pro Datei
  • Dateiendung

Zudem als Idee

  • Dateigröße min/max gesamt
  • Dateianzahl min/max (clientseitig umgesetzt)

Unique-Key nicht aus PHPSESSID gewinnen

Der Denkansatz führt dazu, dass man fremden gegenüber die PHPSESSID offenbart. Hier sollte man, analog zum upload-Feld, einen eigenen Token generieren, anhand dessen man die Dateien zuordnet und im data-Verzeichnis ablegt.

Namen "yuploader" umbenennen

Finde yuploader ungeeignet. Je nachdem, ob der Code später in YForm landet, oder als Addon, würde ich das yform_dropzone nennen oder yform_uploder. der y-präfix ist Yakamara vorenthalten.

Umzug zu FOR

ich würde den aktuellen Stand jetzt gerne an FOR abgeben und hoffen, dass sich doch noch jemand daran beteiligt.

Das Addon hat jetzt einen prinzipiell funktionstüchtigen Zustand, auch wenn es noch nicht die Qualität hat, die ich mir gewünscht habe.

Doku: Debugging

Grob gesagt:

Wenn was mit der Dropzone.js clientseitig schief läuft, ist das Problem entweder in der mitgelieferten JS-Datei in /assets/addons/yform_dropzone/js/, oder serverseitig in der API unter /redaxo/src/addons/yform_dropzone/lib/

Erster Ansatz: Browser-Developer-Console liefert beim Fehler zusätzliche Infos als JSON in der Response, z.B. bei der Validierung (Dateigröße, Formate, oder, ob die Datei bereits vorhanden war).

Meist stimmt einfach was mit den Parametern der Validierung nicht.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.