So habe ich es gelöst. In der Benachrichtigung habe ich nun die Simple Tokens ##course_name##, ##course_date## und ##course_url## zur Verfügung.
PHP-Code:
<?php
namespace App\EventListener;
use App\Model\CourseModel;
use App\Model\CourseDateModel;
use Contao\CoreBundle\Framework\ContaoFramework;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\HttpFoundation\RequestStack;
use Terminal42\NotificationCenterBundle\Event\CreateParcelEvent;
use Terminal42\NotificationCenterBundle\Event\GetTokenDefinitionsForNotificationTypeEvent;
use Terminal42\NotificationCenterBundle\Parcel\Stamp\TokenCollectionStamp;
use Terminal42\NotificationCenterBundle\Token\Definition\EmailTokenDefinition;
use Terminal42\NotificationCenterBundle\Token\Definition\Factory\TokenDefinitionFactoryInterface;
use Terminal42\NotificationCenterBundle\Token\Definition\TokenDefinitionInterface;
class HookListener
{
public function __construct(
private readonly RequestStack $requestStack,
private readonly TokenDefinitionFactoryInterface $tokenDefinitionFactory,
private readonly ContaoFramework $contaoFramework,
) {
}
#[AsEventListener]
public function onGetTokenDefinitions(GetTokenDefinitionsForNotificationTypeEvent $event): void
{
$event
->addTokenDefinition($this->getTokenDefinition('course_name'))
->addTokenDefinition($this->getTokenDefinition('course_date'))
->addTokenDefinition($this->getTokenDefinition('course_url'))
;
}
#[AsEventListener]
public function onCreateParcel(CreateParcelEvent $event): void
{
if (!$event->getParcel()->hasStamp(TokenCollectionStamp::class)) {
return;
}
$formId = $event->getParcel()->getStamp(TokenCollectionStamp::class)->tokenCollection->getByName('formconfig_id')->getValue();
if (13 !== $formId) {
return;
}
$courseDateId = $event->getParcel()->getStamp(TokenCollectionStamp::class)->tokenCollection->getByName('form_course')->getValue();
$courseDateModel = CourseDateModel::findById($courseDateId);
$courseModel = CourseModel::findById($courseDateModel->id);
$courseDate = date('d.m.Y', $courseDateModel->date) . ' ' . $courseDateModel->startTime . ' - ' . $courseDateModel->endTime;
$event->getParcel()->getStamp(TokenCollectionStamp::class)->tokenCollection
->addToken($this->getTokenDefinition('course_name')->createToken('course_name', $courseModel->title))
->addToken($this->getTokenDefinition('course_date')->createToken('course_date', $courseDate))
->addToken($this->getTokenDefinition('course_url')->createToken('course_url', $courseDateModel->url))
;
}
private function getTokenDefinition(string $token): TokenDefinitionInterface
{
return $this->tokenDefinitionFactory->create(EmailTokenDefinition::class, $token, $token);
}
}