YForm Tablemanager: Hochgeladene Dateien schützen / Medienpool updaten
Mit dem EP REX_YFORM_SAVED
lassen sich die aktuellen Daten eines Datensatzes auslesen. Möchte man nun zeitgleich Änderungen oder Anpassungen in einer anderen Tabelle ausführen, kann das mit dem folgenden Code erreicht werden. Ein möglicher Anwendungsfall:
- YForm Tabelle mit Medienfeldern
- YCom Media Auth Plugin zum Schutz der hochgeladenen Medien
Die Medien werden in der angelegten YForm Tabelle gespeichert. Aber um die Dateien zu schützen, müssen die zugehörigen Datensätze in der Tabelle rex_media
angepasst werden.
Extensionpoint 'REX_YFORM_SAVED' erweitern, entweder in der boot.php des project Addons oder im eigenen Addon
rex_extension::register('REX_YFORM_SAVED', ['klasse', 'methode'], rex_extension::LATE);
Methode deklarieren
class klasse {
public function methode($ep) {
//Tabellenname aus $ep holen
$table = $ep->getParam('table');
//Code nur ausführen für festgelegte yform_tabelle
if ($table == rex::getTable('yform_tabelle')) {
//Id und Datensatz holen
$id = $ep->getParam('id');
$dataset = rex_yform_manager_dataset::get($id, $table)->getData();
//Beispiel für angelegte Medienfelder in yform_tabelle
$media_files = [];
$media_files[] = $dataset['media'];
$media_files[] = $dataset['media_web_1'];
$media_files[] = $dataset['media_web_2'];
$media_files[] = $dataset['media_web_3'];
$media_files[] = $dataset['media_web_4'];
$media_files = array_filter($media_files);
//Update auf rex_media Tabelle. Um die Medien zu betrachten zu können, muss der Nutzer eingeloggt sein und wenigstens einer Gruppe zugehörig sein mit Id 1 und/oder 2.
foreach ($media_files as $media_file) {
$sql = rex_sql::factory();
$sql = $sql->setDebug(false);
$sql = $sql->setTable(rex::getTable('media'));
$sql = $sql->setWhere(['filename' => $media_file]);
$sql = $sql->setValues(['ycom_auth_type' => '1']);
$sql = $sql->setValues(['ycom_group_type' => '2']);
$sql = $sql->setValues(['ycom_groups' => '1,2']);
$sql->update();
//Generiere Cache Datei für das Medium
rex_media_cache::generate($media_file);
}
}
return;
}
}