Finalize referrer form finisher by adding request middlewareπ
This commit is contained in:
@@ -8,8 +8,14 @@ class AddReferrerFinisher extends AbstractFinisher
|
|||||||
{
|
{
|
||||||
protected function executeInternal()
|
protected function executeInternal()
|
||||||
{
|
{
|
||||||
$referrer = 'FooBarBaz';
|
// Look for key 'referrer' in frontend session
|
||||||
|
$referrer = $GLOBALS['TSFE']->fe_user->getKey('ses', 'referrer');
|
||||||
|
|
||||||
|
if (null === $referrer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add textfield to form containing referrer value
|
||||||
$field = $this->finisherContext
|
$field = $this->finisherContext
|
||||||
->getFormRuntime()
|
->getFormRuntime()
|
||||||
->getFormDefinition()
|
->getFormDefinition()
|
||||||
@@ -20,10 +26,15 @@ class AddReferrerFinisher extends AbstractFinisher
|
|||||||
$field->setDataType('string');
|
$field->setDataType('string');
|
||||||
$field->setLabel('Referrer');
|
$field->setLabel('Referrer');
|
||||||
|
|
||||||
|
// Add finisher variable for potential later use
|
||||||
$this->finisherContext->getFinisherVariableProvider()->add(
|
$this->finisherContext->getFinisherVariableProvider()->add(
|
||||||
$this->shortFinisherIdentifier,
|
$this->shortFinisherIdentifier,
|
||||||
'referrer',
|
'referrer',
|
||||||
$referrer
|
$referrer
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Remove session key
|
||||||
|
$GLOBALS['TSFE']->fe_user->setKey('ses', 'referrer', null);
|
||||||
|
$GLOBALS['TSFE']->fe_user->storeSessionData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace EP\EpTheme\Middleware;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\MiddlewareInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use TYPO3\CMS\Core\Exception\SiteNotFoundException;
|
||||||
|
use TYPO3\CMS\Core\Site\SiteFinder;
|
||||||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
|
|
||||||
|
class ReferrerMiddleware implements MiddlewareInterface
|
||||||
|
{
|
||||||
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
|
{
|
||||||
|
$queryParams = $request->getQueryParams();
|
||||||
|
|
||||||
|
if (!array_key_exists('ref', $queryParams)) {
|
||||||
|
return $handler->handle($request);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ref = $queryParams['ref'];
|
||||||
|
|
||||||
|
/** @var SiteFinder $siteFinder */
|
||||||
|
$siteFinder = GeneralUtility::makeInstance(SiteFinder::class);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$site = $siteFinder->getSiteByPageId($ref);
|
||||||
|
$url = $site->getRouter()->generateUri($ref);
|
||||||
|
$GLOBALS['TSFE']->fe_user->setKey('ses', 'referrer', $url);
|
||||||
|
$GLOBALS['TSFE']->fe_user->storeSessionData();
|
||||||
|
}
|
||||||
|
catch (SiteNotFoundException $exception) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return $handler->handle($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'frontend' => [
|
||||||
|
'ep/referrer' => [
|
||||||
|
'target' => \EP\EpTheme\Middleware\ReferrerMiddleware::class,
|
||||||
|
'after' => [
|
||||||
|
'typo3/cms-frontend/site',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
TYPO3:
|
|
||||||
CMS:
|
|
||||||
Form:
|
|
||||||
persistenceManager:
|
|
||||||
allowedExtensionPaths:
|
|
||||||
10: EXT:ep_theme/Resources/Private/Forms/
|
|
||||||
|
|
||||||
prototypes:
|
|
||||||
standard:
|
|
||||||
finishersDefinition:
|
|
||||||
BpnApiFinisher:
|
|
||||||
implementationClassName: 'EP\EpTheme\Form\BpnApiFinisher'
|
|
||||||
formElementsDefinition:
|
|
||||||
Form:
|
|
||||||
renderingOptions:
|
|
||||||
templateRootPaths:
|
|
||||||
100: 'EXT:ep_theme/Resources/Private/Templates/Form/'
|
|
||||||
partialRootPaths:
|
|
||||||
100: 'EXT:ep_theme/Resources/Private/Partials/Form/'
|
|
||||||
layoutRootPaths:
|
|
||||||
100: 'EXT:ep_theme/Resources/Private/Layouts/Form/'
|
|
||||||
|
|
||||||
contactform:
|
|
||||||
__inheritances:
|
|
||||||
10: 'TYPO3.CMS.Form.prototypes.standard'
|
|
||||||
|
|
||||||
applicationform:
|
|
||||||
__inheritances:
|
|
||||||
10: 'TYPO3.CMS.Form.prototypes.standard'
|
|
||||||
Reference in New Issue
Block a user