Ereignisse beim Speichern von Dateien nutzen

Beim Speichern von Dateien können über Verzeichnisereignisse zahlreiche Aktionen, wie z.B. Protokollierung, E-Mail Versand, etc. durchgeführt werden.

Verzeichnisereignisse geben Ihnen die Möglichkeit, im Projekt entsprechende Aktionen durchzuführen, wenn z.B. eine Datei gespeichert wird. Nachfolgend finden Sie ein paar Beispiele, was mit Ereignissen umgesetzt werden kann.

Beispiel 1: E-Mail Benachrichtigung beim Speichern einer Datei

Verzeichnisereignis onAfterSaveFile:

$mailHeader = array();
$mailHeader['From']    = 'absender@domain.dd';
$mailHeader['To']      = 'empfaenger@domain.dd';  // ggf. auch per Verweis auf eine individuelle Erweiterung in der Projektkonfiguration: $mailHeader['To']  = wVariables::getValue('myEvent_onAfterSave_email');
$mailHeader['Subject'] = 'Ereignisinfo: Die Seite '.$eventData['filePath'].' wurde geändert';
$text                  = 'Eine Seite wurde geändert!

Pfad zur Seite: '.$eventData['filePath'].'
Redakteur: '.$eventData['wEventUser'].'
Zeitpunkt: '.wDate::formatDate('d. F Y', $eventData['wEventTime'], 'de').', '.wDate::formatDate('H:i', $eventData['wEventTime'], 'de').' Uhr
User-Agent: '.$_SERVER['HTTP_USER_AGENT'].'

Bitte Inhalte prüfen!
http://'.$_SERVER['HTTP_HOST'].$eventData['filePath'].'

Das Web-Team';

wMailer::sendMailText($mailHeader, $text);

Die Pfade und E-Mail Adressen passen Sie entsprechend Ihrer Umgebung und Ihren Wünschen an.

Beispiel 2: Protokollierung beim Speichern einer Datei

Verzeichnisereignis onAfterSaveFile:

$logStr = $eventData['wEventTime'].';'.$eventData['wEventUser'].';'.$eventData['filePath'].';'.$eventData['dirPath']."\n";
wReadWrite::writeFile($_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/tmp/'.$eventData['wEventName'].'.eventLog.php', $logStr, 'a');

Die Pfade und E-Mail Adressen passen Sie entsprechend Ihrer Umgebung und Ihren Wünschen an.

FAQs are only visible for Weblication ai search and editors!
Was bedeutet „Ereignisse beim Speichern von Dateien nutzen“?
Du kannst beim Speichern von Dateien über sogenannte Verzeichnisereignisse automatisierte Aktionen ausführen lassen (z.B. Protokollierung oder E-Mail Versand). So werden definierte Abläufe angestoßen, sobald eine Datei gespeichert wurde.
Welches Verzeichnisereignis wird im Beispiel verwendet, um Aktionen nach dem Speichern auszuführen?
Im Beispiel wird das Verzeichnisereignis <code class="codeInline">onAfterSaveFile</code> verwendet. Dieses Ereignis wird nach dem Speichern einer Datei ausgelöst und eignet sich, um Logik wie Benachrichtigungen oder Logging auszuführen.
Wie lässt sich im Beispiel eine E-Mail-Benachrichtigung beim Speichern einer Datei versenden?
Im Ereignis <code class="codeInline">onAfterSaveFile</code> wird eine Mail-Header-Übersicht (<code class="codeInline">$mailHeader</code>) mit <code class="codeInline">From</code>, <code class="codeInline">To</code> und <code class="codeInline">Subject</code> aufgebaut und anschließend der Text generiert. Darin werden u.a. <code class="codeInline">filePath</code>, <code class="codeInline">wEventUser</code> und <code class="codeInline">wEventTime</code> aus dem <code class="codeInline">$eventData</code>-Array sowie zusätzliche Informationen wie der <code class="codeInline">User-Agent</code> verwendet. Zum Versand wird <code class="codeInline">wMailer::sendMailText($mailHeader, $text);</code> genutzt. Pfade und E-Mail-Adressen müssen an die eigene Umgebung angepasst werden.
Welche Informationen werden in der Beispiel-E-Mail typischerweise verwendet?
Die Beispiel-E-Mail enthält u.a. den Pfad zur geänderten Datei (<code class="codeInline">$eventData['filePath']</code>), den Redakteur (<code class="codeInline">$eventData['wEventUser']</code>), den Zeitpunkt der Änderung (<code class="codeInline">$eventData['wEventTime']</code>, formatiert) sowie den <code class="codeInline">User-Agent</code>. Außerdem wird eine Prüf-Notiz „Bitte Inhalte prüfen!“ und ein direkter Link anhand von <code class="codeInline">$_SERVER['HTTP_HOST']</code> und <code class="codeInline">$eventData['filePath']</code> eingefügt.
Wie kann man beim Speichern einer Datei eine Protokollierung (Logging) durchführen?
Im Ereignis <code class="codeInline">onAfterSaveFile</code> wird ein Log-String aufgebaut, der u.a. die Zeit (<code class="codeInline">wEventTime</code>), den User (<code class="codeInline">wEventUser</code>), den Dateipfad (<code class="codeInline">filePath</code>) und den Verzeichnis-Pfad (<code class="codeInline">dirPath</code>) enthält. Anschließend wird der Eintrag per <code class="codeInline">wReadWrite::writeFile(..., $logStr, 'a');</code> in eine Logdatei angehängt (Append-Modus).
Wie wird der Log-Eintrag im Protokollierungsbeispiel strukturiert?
Der Logeintrag wird als einzelne Zeile in einem String zusammengesetzt: <code class="codeInline">Zeitpunkt;User;Dateipfad;Verzeichnispfad</code> und mit einem Zeilenumbruch (<code class="codeInline">"\n"</code>) am Ende. Dadurch ist die spätere Auswertung/Analyse einfacher.
Müssen die Beispiele an die eigene Umgebung angepasst werden?
Ja. Im Text steht ausdrücklich, dass die Pfade und E-Mail-Adressen (und damit die konkreten Zielwerte) an die eigene Umgebung und die eigenen Wünsche angepasst werden müssen.