Hotfolder

Der Hotfolder ist ein Modul, welches ausschließlich über Config-Variablen eingestellt und konfiguriert wird. Es gibt kein Frontend für den Hotfolder. Der Hotfolder wird direkt über eine URL gestartet: http://easydb-url/hotfolder.

easydb authentifiziert diese URL per HTTP. Sie können alle easydb User benutzen, die über das Systemrecht HOTFOLDER verfügen. Zum Setzen gehen Sie im Frontend in Einstellungen > Systemrechte > HOTFOLDER.

Die Ausgabe des Hotfolders erfolgt als einfacher Text, so dass ein Aufruf über Kommandozeilen Browser (wie beispielsweise wget) und damit eine Integration als Cronjob etc. möglich ist.

Der Hotfolder sucht Dateien in einem oder mehreren Verzeichnissen. Alle gefundenen Dateien werden nacheinander abgearbeitet. Folgende Dateien werden vom Hotfolder nicht erfasst:

  • Dateien, die nicht älter als 15 Sekunden sind
  • Dateien, die mit HOTFOLDER_ERROR_ beginnen (im Normalfall Dateien, die der Hotfolder bereits importieren wollte und einen Fehler erhalten hat)
  • Dateien, die mit "." beginnen

Nach der Vereinnahmung können die Dateien in eine Arbeitsmappe gelegt werden.

Am besten kombiniert man den Hotfolder mit einem Samba-Export, so dass angeschlossene Desktops direkt Dateien in die EasyDB kopieren können. easydb unterstützt zu diesem Zwecke auch die Ablage ganzer Ordner-Hierarchien, die dann mit Ordnern und Unterordnern in eine Arbeitsmappe und entsprechende Unter-Arbeitsmappen kopiert werden können.

Die Konfigurations-Variablen teilen sich auf in solche die für alle Hotfolder gelten und in jene, die das Verhalten der easydb pro Hotfolder bestimmen.

Dateien, die mit dem Hotfolder importiert werden, verwenden immer die produce class A import. Dafür müssen in der Config Vorschau-Größen usw. konfiguriert sein.

HOTFOLDER_LOCK

Mit Hotfolder-Lock definieren Sie den Pfad zu einer Datei. Diese Datei wird von einem laufenden Hotfolder angelegt und nach Durchlauf wieder gelöscht. Sie dient dazu, dass derselbe Hotfolder nicht mehrfach gestartet werden kann. Legen Sie das Lock-File beispielsweise in /tmp ab.

HOTFOLDER_LOCK=/tmp/easydb_hotfolder.lck

HOTFOLDER_SECONDS

Diese Einstellung bestimmt die Sekunden die der Hotfolder wartet, bevor ein weiterer Durchlauf stattfindet. Dies ist nur relevant im Zusammenhang mit dem Aufruf des Hotfolder mit der "reload" Option. Sie rufen den Hotfolder dann wie folgt auf http:://easydb-url/hotfolder/reload.

HOTFOLDER_SECONDS=5 ( default: 10)

Der Reload geschieht über Javascript. D.h. diese Funktion macht nur Sinn in einem normalen Browser und dient nur zu Debug-Zwecken. Nutzen Sie diese Option, um zum Beispiel ein Samba-Netzlaufwerk zu testen, welches Sie als Hotfolder konfigurieren.

Updates mit dem Hotfolder

Der Hotfolder kann Updates erzeugen, d.h. vereinnahmte Assets werden bestehenden Datensätzen zugeordnet. Ob ein Update durchgeführt wird oder ein neuer Datensatz erzeugt wird, wird über die Config-Variable EAS_IMPORT_UPDATE_WHERE_SQL gesteuert.

Für das Matching mittels der Variable EAS_IMPORT_UPDATE_WHERE_SQL werden zusätzlich zu den Dateinamen mit und ohne Endung noch weitere Prüfungen durchgeführt, so dass sich die folgende Reihenfolge ergibt:

  • vollständiger Dateiname mit Pfad ab dem Hotfolder-Basis-Pfad
  • Dateiname mit einem Pfad-Teil weniger als der zuvor geprüfte Name (dieser Teil wiederholt sich, bis kein Verzeichnis mehr im Pfad ist)
  • derselbe Dateiname mit dem gleichen Pfad-Teil aber ohne die Endung
  • Dateiname ohne Pfad
  • Dateiname ohne Pfad und Endung

Beachten Sie, dass das Matching auf Groß- und Kleinschreibung achtet. Wenn Sie dass nicht wollen, können Sie entsprechende Konvertierungen in EAS_IMPORT_UPDATE_WHERE_SQL vornehmen.

Beispiel:

Hotfolder: /tmp/my-hotfolder
Datei: /tmp/my-hotfolder/folder-a/subfolder-ab/my.jpeg

Testet in dieser Reihenfolge:

/folder-a/subfolder-ab/my.jpeg
/folder-a/subfolder-ab/my
folder-a/subfolder-ab/my.jpeg
folder-a/subfolder-ab/my
subfolder-ab/my.jpeg
subfolder-ab/my
my.jpeg
my

Konfiguration eines Hotfolders

HOTFOLDER_###
HOTFOLDER_###.table
HOTFOLDER_###.column

Der Hotfolder wird mit einem eindeutigen Namens-Appendix oder einer Nummer konfiguriert, ersetzen Sie hierfür die ###. Um einen Hotfolder mit der Nummer 1 zu konfigurieren schreiben Sie:

HOTFOLDER_1=/opt/easydb/hotfolder
HOTFOLDER_1.table=bilder
HOTFOLDER_1.column=bild

Dieser Hotfolder wird in /opt/easydb/hotfolder konfiguriert. Dieser Ordner muss für den Apache-Prozess schreibbar sein. Dateien und Unter-Ordner müssen ebenfalls für den Apache-Prozess schreibbar sein.

Stellen Sie sicher, dass der Hotfolder-Ordner für den EAS erlaubt wird. Setzen Sie dafür in der EAS-Konfiguration EAS_SAFE_PATH auf einen Pfad, der den Hotfolder auch beeinhaltet. Pfade mit Leerzeichen müssen nicht mit einem \ maskiert oder mit Anführungszeichen umschlossen werden.

In table und column teilen Sie dem Hotfolder das Ziel des Asset-Imports mit. In der Regel handelt es sich hier um Ihre Haupttabelle die zum Beispiel "bilder" oder "assets" heisst. In dieser Tabelle werden die Asset-IDs in einer Spalte abgespeichert. Diesen Spaltennamen verwenden Sie für column. Schauen Sie in der ezadmin unter der Kategorie "EAS" nach, welche Tabellen-Spalten Kombination zur Verfügung stehen.

Für das o.a. Beispiel wäre die Ausgabe in ezadmin:

bilder.bild

Beachten Sie, dass nicht alle Felder direkt mit einem Hotfolder befüllt werden können, wenn es beispielsweise um Assets für ein Dokument geht, können Sie diese nicht ohne Weiteres mit einem Hotfolder vereinnahmen, weil easydb nicht wissen kann, für welches Dokument Sie Assets hochladen.

HOTFOLDER_###.LEAVE_FILES

Wenn gesetzt, veranlasst diese Option den Hotfolder dazu, die Dateien nach Vereinnahmung nicht zu löschen. Der Default ist, dass die Dateien nach erfolgreicher Vereinnahmung gelöscht werden.

HOTFOLDER_1.LEAVE_FILES=1 (default:0)

HOTFOLDER_###.SINGLE_ERROR_FILE

Im Fehlerfalle wird die Datei in HOTFOLDER_ERROR_+Dateiname umbenannt. Mit dieser Option können Sie den Hotfolder dazu veranlassen neben jede HOTFOLDER_ERROR_-Datei eine Datei mit der Endung ".txt" zu legen und in diese Datei den Grund des Fehlers zu schreiben. Die Überschrift dieser Datei ist der Text, den Sie dieser Variable geben. Im Beispiel wird der Text "Es ist folgender Fehler bei der Verarbeitung aufgetreten:" dem Fehler vorangestellt. Die "\r\n" bewirken ein Zeilenvorschub innerhalb der Textdatei.

HOTFOLDER_1.SINGLE_ERROR_FILE=Es ist folgender Fehler bei der Verarbeitung aufgetreten:\r\n

HOTFOLDER_###.RENAME_ERROR_FILES

Wenn gesetzt, werden Dateien bei denen ein Fehler bei der Vereinnahmung auftrat, in HOTFOLDER_ERROR_<dateiname> umbenannt und beim nächsten Mal ignoriert.

HOTFOLDER_1.RENAME_ERROR_FILES (default:1)

Seit Version 4.0.229.

HOTFOLDER_###.METADATA_PROFILE

Gibt das Metadaten-Lese-Profil an, welches für diesen Hotfolder benutzt wird. Mehr zum Mapping und der Konfiguration finden Sie hier.

easydb kann nicht automatisch regelbasiert ein Metadaten-Lese-Profil auswählen.

HOTFOLDER_###.METADATA_IGNORE

Mit dieser Variable können Sie, nachdem die Datei analyisiert wurde, auf die Metadaten zugreifen und definieren, ob diese Datei für die Vereinnahmung ignoriert wird oder nicht. Der Wert dieser Variable wird als PHP evaluiert. Sie können eine Funktion zurückgeben, die dann ausgeführt wird. Der Rückgabewert kann true sein, damit wird die Datei ohne Log-Eintrag ignoriert, oder Sie können einen String zurückgeben, dann wird dieser String als Log-Eintrag benutzt.

Die Metadaten können Sie mit metadata.group.field erreichen. Schauen Sie dazu in den Asset-Eigenschaften-Manager in der easydb, um die Namen der Metadaten herauszufinden. metadata.group.field wird durch ‘<Wert-des-Metadatums>’ ersetzt, alle Werte sind im PHP als String verfügbar, das gilt auch für Zahlen.

HOTFOLDER_1.METADATA_IGNORE=(metadata.EAS::TypeInfo.maxdimension < 100) || (metadata.EAS::TypeInfo.maxdimension > 5000)?"Datei zu klein / groß.":false

Das Beispiel gibt die Fehlermeldung "Datei zu klein / groß" aus, wenn die maximale Kantenlänge nicht zwischen 100 und 5000 liegt.

Wie Sie eine Funktion für die Variable benutzten sehen Sie hier beschrieben: HOTFOLDER_###.SET_VARIABLE.###.

Seit Version 4.0.229.

HOTFOLDER_###.METADATA_REQUIRE

Diese Variable funktioniert wie METADATA_IGNORE, nur das umgekehrt die Bedingung zutreffen muss, damit vereinnahmt wird. Um nicht zu vereinnahmen, muss false oder ein String mit einem Fehler (Datei wird mit Log-Eintrag übersprungen) zurückgegeben werden. Um zu vereinnahmen muss true zurückgegeben werden.

HOTFOLDER_1.METADATA_REQUIRE=metadata.EAS::TypeInfo.fileclass=="image"

Mit diesem Beispiel werden im Hotfolder nur Bilder vereinnahmt.

Seit Version 4.0.229.

HOTFOLDER_###.ALLOW_DUPLICATES

Wenn gesetzt, vereinnahmt die easydb dieselbe Datei mehrfach. Wenn nicht gesetzt, wird die Datei übersprungen. Eine Verlinkung mit einer Arbeitsmappe findet immer statt. Der Default ist 1.

HOTFOLDER_1.ALLOW_DUPLICATES=0 (default:1)

HOTFOLDER_###.FORCE_INSERT

Die Variable sorgt dafür, dass immer ein INSERT stattfindet, auch wenn eigentlich aufgrund EAS_IMPORT_UPDATE_WHERE_SQL.<table> ein UPDATE gemacht würde.

# default: 0
HOTFOLDER_1.FORCE_INSERT=1

HOTFOLDER_###.UPDATE_ONLY

Falls gesetzt, werden nur UPDATE, die aufgrund von EAS_IMPORT_UPDATE_WHERE_SQL.<table> entstehen ausgeführt. Wenn UPDATE_ONLY und FORCE_INSERT beide gesetzt sind, werden alle UPDATE-Fälle neu hinzugefügt ( INSERT ).

# default: 0
HOTFOLDER_1.UPDATE_ONLY=1

HOTFOLDER_###.LOG

Mit dieser Option geben Sie den Pfad zu einer Log-Datei für diesen Hotfolder an.

HOTFOLDER_1.LOG=/opt/easydb/4.0/log/hotfolder.log

Der Hotfolder schreibt nichts in das Log, wenn es nichts zu tun gibt, d.h. keine Dateien im Hotfolder gefunden werden.

HOTFOLDER_###.POST_PROCESS

Im Einzelfall kann eine Weiterverarbeitung nach einer erfolgreichen Vereinnahmung nötig sein. In diesem Fall erfahren Sie von unserem Support, was Sie für POST_PROCESS konfigurieren können. In einer Standard-easydb wird diese Variable nicht genutzt und kann ignoriert werden.

HOTFOLDER_###.PRODUCE_CLASS

Für die Vereinnahmung können Sie eine vom Standard A abweichende PRODUCE_CLASS setzen. Seit Version 4.0.229.

HOTFOLDER_###.PRODUCE_CLASS_FILTER

Wenn gesetzt, veranlasst diese Option den Hotfolder dazu, die Dateien nach Vereinnahmung durch den angegebenen Filter zu schicken. Mehr zu dem Filter Mechanismus finden Sie hier.

Damit ist es möglich, z.B. die vereinnahmten Originale zu verwerfen und an Stelle dessen eine kleiner Version als Original zu verwenden.

Seit Version 4.0.241.

HOTFOLDER_###.FILENAME_IGNORE_REGEX

Ignoriert Dateien deren Dateiname den angegebenen Regex matcht. Der Regex wird an die PHP-Funktion preg_match direkt übergeben.

HOTFOLDER_1.FILENAME_IGNORE_REGEX=/^\./

Das Beispiel ignoriert alle Dateien, die mit einem Punkt beginnen.

Seit Version 4.0.229.

HOTFOLDER_###.FILENAME_ALLOW_REGEX

Vereinnahmt keine Dateien deren Dateiname nicht den angegebenen Regex matcht. Der Regex wird an die PHP-Funktion preg_match direkt übergeben.

HOTFOLDER_1.FILENAME_ALLOW_REGEX=/\.(jpg|jpeg)$/i

Das Beispiel vereinnahmt nur Dateien deren Dateinamen auf jpg oder jpeg enden. Groß-Kleinschreibung wird ignoriert.

Seit Version 4.0.229.

HOTFOLDER_###.FILESIZE_MIN

Die Mindestgröße der Datei in Bytes. Wenn die Datei kleiner ist, wird sie nicht vereinnahmt. Seit Version 4.0.229.

HOTFOLDER_###.FILESIZE_MAX

Die Maximalgröße der Datei in Bytes. Wenn die Datei größer ist, wird sie nicht vereinnahmt. Seit Version 4.0.229.

HOTFOLDER_###.SET_VARIABLE.###

Mit dieser Option ist es möglich für diesen Hotfolder eine Spalte in der Zieltabelle zu schreiben. Beispielsweise würde

HOTFOLDER_1.SET_VARIABLE.lk_pool_id=2

die Spalte "lk_pool_id" in HOTFOLDER_1.TABLE auf den Wert "2" setzen. Dadurch werden alle Assets, die in diesem Hotfolder landen, automatisch in den Pool mit der ID 2 gelegt.

Der Wert dieser Config-Variable wird durch PHP-eval evaluiert, d.h. es ist möglich PHP zu benutzen. %FILENAME% wird durch den vollständigen Dateinamen der Datei die gerade vereinnahmt ersetzt (in einfachen Anführungszeichen, d.h. das Escaping ist automatisch).

Seit Version 4.0.229 können Sie die Spalte "id" setzen, um ein UPDATE durchzuführen. Wenn "id" gesetzt ist, wird EAS_IMPORT_UPDATE_WHERE_SQL ignoriert.

Verwenden einer PHP-Funktion als Wert

Wenn der Wert dieser Option eine PHP-Funktion ist, wird die Funktion aufgerufen und der Rückgabe-Wert der Funktion der Variable zugewiesen (Seit Version 4.0.229).

HOTFOLDER_1.SET_VARIABLE.lk_pool_id=\
   function() { \
      if (preg_match("/.*\/(.*)?\-.*$/", %FILENAME%, $m)) { \
         $ids = db::data()->queryColumns("SELECT id FROM pool WHERE kurzname=?", $m[1]); \
         if (count($ids) > 1) { \
            throw new EasydbException('Mehrere Pools fuer Kurznamen gefunden.'); \
         } \
         if (count($ids) === 0) { \
            throw new EasydbException('Keinen Pool fuer Kurznamen gefunden.'); \
         } \
         return $ids[0]; \
      } else { \
	     throw new EasydbException('Keinen Kurznamen im Dateinamen erkannt.'); \
      } \
   }

Dises Beispiel setzt die Pool-ID abhängig von dem Kurznamen der aus dem Dateinamen extrahiert wird. Als Kurzname wird alles bis zum ersten "-" im Dateinamen interpretiert. Danach wird in der Tabelle Pool geschaut, ob es genau einen Pool gibt, dieser wird zugewiesen.

Setzen einer abweichenden Objekt-ID und Tabellen-Zugehörigkeit

Im Easydb-Asset-Server werden für das Rechtemanagement easydb-ID und easydb-table des Objektes gespeichert, für welches das Asset verwendet wird. Wenn das Objekt ein übergeordnetes Objekt ist und beispielsweise eine Bilder < Documents Verknüpfung benutzt wird (wobei die Assets in "Documents" gespeichert sind), kann mit dieser Variablen die easydb-ID und die easydb-table explizit gesetzt werden.

Es können die speziellen Variablen EAS.EASYDB_ID und EAS.EASYDB_TABLE verwendet werden, um die im Easydb-Asset-Server gespeicherte Objekt-ID und Tabelle zu überschreiben. Wenn gesetzt, müssen beide Variablen gesetzt werden.

HOTFOLDER_1.SET_VARIABLE.EAS.EASYDB_ID=db::data()->queryColumn('SELECT id FROM "Bilder" WHERE dateiname = ?', bareBasename(pf_basename(%FILENAME%)))
HOTFOLDER_1.SET_VARIABLE.EAS.EASYDB_TABLE="Bilder"
HOTFOLDER_1.SET_VARIABLE.lk_bild_id=db::data()->queryColumn('SELECT id FROM "Bilder" WHERE dateiname = ?', bareBasename(pf_basename(%FILENAME%)))

Das Beispiel setzt die lk_bild_id in der Zieltabelle Documents auf eine ID die mit dem Dateinamen in der Tabelle Bilder gesucht wird. Gleichzeitig wird dem Easydb-Asset-Server diese ID als easydb-ID übermittelt.

Seit Version 4.0.259

HOTFOLDER_###.SET_USER_ID

Beim Vereinnahmen der Assets und dem Verlinken in eine Arbeitsmappe setzt der Hotfolder den User normalerweise auf den User über den die Hotfolder-URL gestartet wird. Mit dieser Option können Sie den User überschreiben und beispielsweise auf den ersten Teil des Pfades des Hotfolders setzen.

HOTFOLDER_1.SET_USER_ID=%path.0%

Es erfolgt keine Prüfung, ob die User-ID existiert oder nicht.

Für SET_USER_ID und auch die Arbeitsmappen-Verlinkung lassen sich Platzhalter durch Pfad-Angaben der zu vereinnahmenden Datei ersetzen. Dabei sind folgende Ersetzungen möglich:

Wir nehmen an, eine Datei wird in den Hotfolder /opt/easydb/hotfolder mit folgendem Pfad kopiert: /opt/easydb/hotfolder/Eingangsmappe/Bilder/Architektur, dann ist:

  • %path%: /Eingangsmappe/Bilder/Architektur
  • %path.0%: Eingangsmappe
  • %path.1%: Bilder
  • %path.2%: Architektur
  • %path.0-%: /Eingangsmappe/Bilder/Architektur
  • %path.1-%: /Bilder/Architektur
  • %path.2-%: /Architektur

Diese Ersetzungen werden auch in den WORKFOLDER_LINK_HOTFOLDER_* Variablen benutzt. Siehe auch hier.