EXT: sf_event_mgt erweitern: Registrierung direkt auf Detailseite

Eigentlich ist vorgesehen, dass die Registrierung auf einer separaten Seite erfolgt. Möchte man das Registrierungsformular direkt auf der Seite der Erweiterung darstellen, kann folgende Lösungsmöglichkeit verwendet werden.

In diesem Beispiel ist der Vendor ‘Machwert’ und die Extension ‘theme’.

1. In die Datei ext_localconf.php der eigenen Extension die zu vererbende Klasse definieren:

EXT:theme/ext_localconf.php

<?php
declare(strict_types=1);
use Machwert\Theme\Xclass\NewEventController as NewEventControllerXclass;
use DERHANSEN\SfEventMgt\Controller\EventController;
defined('TYPO3') or die();
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][EventController::class] = [
    'className' => NewEventControllerXclass::class
];

2. NewEventController.php anlegen und dort die $this→settings['singleEvent'] über den URL-Event-Parameter festlegen. Dann die jeweilige Elternfunktion der Originalklasse aufrufen.

EXT:theme/Classes/XClass/NewEventController.php

<?php
declare(strict_types=1);
/*
 * This file is part of the Extension "theme" and extends "sf_event_mgt" for TYPO3 CMS.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 */
namespace Machwert\Theme\Xclass;
use DERHANSEN\SfEventMgt\Domain\Model\Event;
use DERHANSEN\SfEventMgt\Domain\Model\Registration;
use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Annotation as Extbase;
class NewEventController extends \DERHANSEN\SfEventMgt\Controller\EventController
{
    public function registrationAction(?Event $event = null): ResponseInterface
    {
        $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventdetail');
        if(!isset($getVars['event'])) {
            $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventregistration');
        }
        if(isset($getVars['event'])) {
            $eventId = (int)$getVars['event'];
            if ($eventId > 0) {
                $this->settings['singleEvent'] = $eventId;
            }
        }
        return parent::registrationAction($event);
    }
    /**
     * Shows the result of the saveRegistrationAction
     */
    public function saveRegistrationResultAction(int $result, int $eventuid, string $hmac): ResponseInterface
    {
        $getVars = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_sfeventmgt_pieventregistration');
        if(isset($getVars['event'])) {
            $eventId = (int) $getVars['event'];
            if($eventId > 0) {
                $this->settings['singleEvent'] = $eventId;
            }
        }
        return parent::saveRegistrationResultAction($result, $eventuid, $hmac);
    }
    public function initializeSaveRegistrationAction(): void
    {
        $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventregistration');
        if (isset($getVars['event'])) {
            $eventId = (int)$getVars['event'];
            if ($eventId > 0) {
                $this->settings['singleEvent'] = $eventId;
                $this->settings['disableOverrideDemand'] = 0;
            }
        }
        parent::initializeSaveRegistrationAction();
    }
    /**
     * Saves the registration
     *
     * @Extbase\Validate("DERHANSEN\SfEventMgt\Validation\Validator\RegistrationFieldValidator", param="registration")
     * @Extbase\Validate("DERHANSEN\SfEventMgt\Validation\Validator\RegistrationValidator", param="registration")
     */
    public function saveRegistrationAction(Registration $registration, Event $event): ResponseInterface
    {
        $getVars = GeneralUtility::_GET('tx_sfeventmgt_pieventregistration');
        if (isset($getVars['event'])) {
            $eventId = (int)$getVars['event'];
            if ($eventId > 0) {
                $this->settings['singleEvent'] = $eventId;
            }
        }
        return parent::saveRegistrationAction($registration, $event);
    }
}

3. Bei Composer Installation in der composer.json darauf achten, dass die Extension Klassen geladen werden.

EXT:theme/composer.json

"autoload": {
        "psr-4": {
            "Machwert\\Theme\\": "Classes"
        }
    },

4. Extension per Composer deinstallieren und danach wieder installieren, damit die autoload Klassen registriert werden. Folgende Shell-Befehle ausführen:

composer remove Machwert/theme
composer req Machwert/theme

Erstellt am: (aktualisiert am: )