Skip to main content

➕ Plugins Sammlung

setCreatedBy

setCreatedBy.png

<?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;
}