➕ Plugins Sammlung
setCreatedBy

<?php
/*
V 2025-12-22a
Plugin: setCreatedBy
Event: OnDocFormSave
- Wird nach dem Speichern einer Ressource im Manager-Formular ausgelöst.
- Event-Parameter: $mode ('new'|'upd'), $resource (modResource-Objekt), $id (Ressourcen-ID).
- TV-Werte können in diesem Event per setTVValue() gesetzt werden.
TV Input Option Values (Anzeige = fullname, Wert = internalKey) EINZEILIG:
@SELECT `fullname`, `internalKey` FROM `[[++table_prefix]]user_attributes` WHERE `blocked` = 0 ORDER BY `fullname` ASC
*/
use MODX\Revolution\modResource;
use MODX\Revolution\modUser;
if (empty($resource) || !($resource instanceof modResource)) {
return;
}
/* createdby beim Anlegen und bei Updates (Korrektur) setzen */
if (!isset($mode) || ($mode !== 'new' && $mode !== 'upd')) {
return;
}
$tvName = 'tvSetCreatedBy';
$mgrUserId = (int) $modx->user->get('id');
if ($mgrUserId <= 0) {
return;
}
/* TV-Wert lesen (soll eine User-ID sein) */
$tvVal = (int) $resource->getTVValue($tvName);
/* Fallback: wenn TV leer ist, setze aktuellen Manager-User (auch bei Updates) */
if ($tvVal <= 0) {
$tvVal = $mgrUserId;
if ($tvVal > 0) {
$resource->setTVValue($tvName, $tvVal);
}
}
$authorId = (int) $tvVal;
if ($authorId <= 0) {
return;
}
/* User muss existieren */
if (!$modx->getObject(modUser::class, $authorId)) {
return;
}
/* createdby nur setzen, wenn abweichend */
if ((int) $resource->get('createdby') === $authorId) {
return;
}
$resourceId = (int) $resource->get('id');
if ($resourceId <= 0) {
return;
}
$table = $modx->getTableName(modResource::class);
if (empty($table)) {
return;
}
$sql = "UPDATE {$table} SET createdby = :createdby WHERE id = :id";
$stmt = $modx->prepare($sql);
if (!$stmt) {
return;
}
if (!$stmt->execute([
':createdby' => $authorId,
':id' => $resourceId,
])) {
return;
}
/* Objekt im Speicher konsistent halten */
$resource->set('createdby', $authorId);