Skip to content

Commit

Permalink
Migrate Signal/Slots to PSR-14 EventDispatcher with backwards compati…
Browse files Browse the repository at this point in the history
…bility
  • Loading branch information
danielkestler committed Sep 29, 2020
1 parent 84b09a2 commit a667843
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 14 deletions.
35 changes: 35 additions & 0 deletions Classes/Compatibility/SlotReplacement.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php
namespace Medienreaktor\FormDoubleOptIn\Compatibility;

use Medienreaktor\FormDoubleOptIn\Controller\DoubleOptInController;
use Medienreaktor\FormDoubleOptIn\Domain\Finishers\DoubleOptInFormFinisher;
use Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn;
use Medienreaktor\FormDoubleOptIn\Event\AfterOptInCreationEvent;
use Medienreaktor\FormDoubleOptIn\Event\AfterOptInValidationEvent;
use TYPO3\CMS\Extbase\SignalSlot\Dispatcher;

class SlotReplacement
{

/**
* signalSlotDispatcher
*
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
*/
protected $signalSlotDispatcher;

public function injectSignalSlotDispatcher(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher $dispatcher): void
{
$this->signalSlotDispatcher = $dispatcher;
}

public function onOptInRecordCreated(AfterOptInCreationEvent $event): void
{
$this->signalSlotDispatcher->dispatch(DoubleOptInFormFinisher::class, 'afterOptInCreation', [$event->getOptIn()]);
}

public function onOptInRecordValidated(AfterOptInValidationEvent $event): void
{
$this->signalSlotDispatcher->dispatch(DoubleOptInController::class, 'afterOptInValidation', [$event->getOptIn()]);
}
}
15 changes: 8 additions & 7 deletions Classes/Controller/DoubleOptInController.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<?php
namespace Medienreaktor\FormDoubleOptIn\Controller;

use Medienreaktor\FormDoubleOptIn\Event\AfterOptInValidationEvent;
use Psr\EventDispatcher\EventDispatcherInterface;

/*
* DoubleOptInController
*/
Expand All @@ -15,20 +18,18 @@ class DoubleOptInController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionCont
protected $optInRepository;

/**
* signalSlotDispatcher
*
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
* @var \Psr\EventDispatcher\EventDispatcherInterface
*/
protected $signalSlotDispatcher;
protected $eventDispatcher;

public function injectOptInRepository(\Medienreaktor\FormDoubleOptIn\Domain\Repository\OptInRepository $optInRepository): void
{
$this->optInRepository = $optInRepository;
}

public function injectSignalSlotDispatcher(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher $dispatcher): void
public function injectEventDispatcher(\Psr\EventDispatcher\EventDispatcherInterface $eventDispatcher): void
{
$this->signalSlotDispatcher = $dispatcher;
$this->eventDispatcher = $eventDispatcher;
}

/**
Expand All @@ -49,7 +50,7 @@ public function validationAction()
$optIn->setValidationDate(new \DateTime);
$this->optInRepository->update($optIn);

$this->signalSlotDispatcher->dispatch(__CLASS__, 'afterOptInValidation', [$optIn]);
$this->eventDispatcher->dispatch(new AfterOptInValidationEvent($optIn));

$success = TRUE;
}
Expand Down
14 changes: 7 additions & 7 deletions Classes/Domain/Finishers/DoubleOptInFormFinisher.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
namespace Medienreaktor\FormDoubleOptIn\Domain\Finishers;

use Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn;
use Medienreaktor\FormDoubleOptIn\Event\AfterOptInCreationEvent;
use Psr\EventDispatcher\EventDispatcherInterface;
use TYPO3\CMS\Core\Mail\MailMessage;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
Expand All @@ -21,20 +23,18 @@ class DoubleOptInFormFinisher extends \TYPO3\CMS\Form\Domain\Finishers\EmailFini
protected $optInRepository;

/**
* signalSlotDispatcher
*
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
* @var \Psr\EventDispatcher\EventDispatcherInterface
*/
protected $signalSlotDispatcher;
protected $eventDispatcher;

public function injectOptInRepository(\Medienreaktor\FormDoubleOptIn\Domain\Repository\OptInRepository $optInRepository): void
{
$this->optInRepository = $optInRepository;
}

public function injectSignalSlotDispatcher(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher $dispatcher): void
public function injectEventDispatcher(\Psr\EventDispatcher\EventDispatcherInterface $eventDispatcher): void
{
$this->signalSlotDispatcher = $dispatcher;
$this->eventDispatcher = $eventDispatcher;
}

/**
Expand Down Expand Up @@ -91,7 +91,7 @@ protected function executeInternal()

$this->optInRepository->add($optIn);

$this->signalSlotDispatcher->dispatch(__CLASS__, 'afterOptInCreation', [$optIn]);
$this->eventDispatcher->dispatch(new AfterOptInCreationEvent($optIn));

$persistenceManager = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class);
$persistenceManager->persistAll();
Expand Down
26 changes: 26 additions & 0 deletions Classes/Event/AfterOptInCreationEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php
namespace Medienreaktor\FormDoubleOptIn\Event;

use Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn;

/**
* Event after OptIn record has been created.
*/
final class AfterOptInCreationEvent
{

/**
* @var \Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn
*/
private $optIn;

public function __construct(\Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn $optIn)
{
$this->optIn = $optIn;
}

public function getOptIn()
{
return $this->optIn;
}
}
26 changes: 26 additions & 0 deletions Classes/Event/AfterOptInValidationEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php
namespace Medienreaktor\FormDoubleOptIn\Event;

use Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn;

/**
* Event after OptIn record has been validated.
*/
final class AfterOptInValidationEvent
{

/**
* @var \Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn
*/
private $optIn;

public function __construct(\Medienreaktor\FormDoubleOptIn\Domain\Model\OptIn $optIn)
{
$this->optIn = $optIn;
}

public function getOptIn()
{
return $this->optIn;
}
}
12 changes: 12 additions & 0 deletions Configuration/Services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,15 @@ services:

Medienreaktor\FormDoubleOptIn\:
resource: '../Classes/*'

# EventListeners
Medienreaktor\FormDoubleOptIn\Compatibility\SlotReplacement:
tags:
- name: event.listener
identifier: 'legacy-slot'
method: 'onOptInRecordCreated'
event: Medienreaktor\FormDoubleOptIn\Event\AfterOptInCreationEvent
- name: event.listener
identifier: 'legacy-slot'
method: 'onOptInRecordValidated'
event: Medienreaktor\FormDoubleOptIn\Event\AfterOptInValidationEvent

0 comments on commit a667843

Please sign in to comment.