➕ Plugins Sammlung
setCreatedBy

<?php
/*
V 2025-11-20
Plugin: setCreatedBy
Events: OnDocFormRender, OnDocFormSave
Zweck:
- Ein TV (Listbox) namens "tvSetCreatedBy" enthält eine User-ID.
- Diese User-ID wird beim Öffnen des Dokuments vorbelegt.
- Beim Speichern wird die Resource.createdby damit überschrieben.
TV Input Option Values:
@SELECT `fullname`, `id` FROM `[[++table_prefix]]user_attributes` WHERE `blocked` = 0 ORDER BY `fullname` ASC
*/
use MODX\Revolution\modSystemEvent;
use MODX\Revolution\modResource;
use xPDO\xPDO;
switch ($modx->event->name) {
/* -------------------------------------------------------------
OnDocFormRender
TV vorbelegen (aber nur, wenn der TV leer ist)
------------------------------------------------------------- */
case 'OnDocFormRender':
if (empty($resource) || !($resource instanceof modResource)) {
return;
}
$resourceId = (int) $resource->get('id');
// Bei neuen Dokumenten → aktuell eingeloggter User
// Bei bestehenden → createdby des Dokuments
if ($mode === modSystemEvent::MODE_NEW) {
$authorId = (int) $modx->user->get('id');
} else {
$authorId = (int) $resource->get('createdby');
}
// TV-Wert prüfen
$currentTvValue = $resource->getTVValue('tvSetCreatedBy');
// Nur setzen, wenn TV leer ist
if ($currentTvValue === '' || $currentTvValue === null) {
$page = $modx->getObject(modResource::class, $resourceId);
if ($page) {
// Fehler-Logging entfernt
$page->setTVValue('tvSetCreatedBy', $authorId);
}
}
break;
/* -------------------------------------------------------------
OnDocFormSave
Beim Speichern: TV-Wert nach createdby übernehmen
------------------------------------------------------------- */
case 'OnDocFormSave':
if (empty($resource) || !($resource instanceof modResource)) {
return;
}
$createdbyId = (int) $resource->getTVValue('tvSetCreatedBy');
// Wenn TV-Wert gesetzt und verschieden → createdby überschreiben
if (!empty($createdbyId) && $createdbyId !== (int) $resource->get('createdby')) {
$resource->set('createdby', $createdbyId);
// Fehler-Logging entfernt
$resource->save();
}
break;
}