diff --git a/public/typo3conf/ext/ep_theme/Classes/Form/AddReferrerFinisher.php b/public/typo3conf/ext/ep_theme/Classes/Form/AddReferrerFinisher.php new file mode 100644 index 00000000..6f5463bd --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Classes/Form/AddReferrerFinisher.php @@ -0,0 +1,40 @@ +fe_user->getKey('ses', 'referrer'); + + if (null === $referrer) { + return; + } + + // Add textfield to form containing referrer value + $field = $this->finisherContext + ->getFormRuntime() + ->getFormDefinition() + ->getPageByIndex(0) + ->createElement('referrer', 'Text'); + + $field->setDefaultValue($referrer); + $field->setDataType('string'); + $field->setLabel('Referrer'); + + // Add finisher variable for potential later use + $this->finisherContext->getFinisherVariableProvider()->add( + $this->shortFinisherIdentifier, + 'referrer', + $referrer + ); + + // Remove session key + $GLOBALS['TSFE']->fe_user->setKey('ses', 'referrer', null); + $GLOBALS['TSFE']->fe_user->storeSessionData(); + } +} diff --git a/public/typo3conf/ext/ep_theme/Classes/Middleware/ReferrerMiddleware.php b/public/typo3conf/ext/ep_theme/Classes/Middleware/ReferrerMiddleware.php new file mode 100644 index 00000000..35eed7a5 --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Classes/Middleware/ReferrerMiddleware.php @@ -0,0 +1,39 @@ +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); + } +} diff --git a/public/typo3conf/ext/ep_theme/Configuration/RequestMiddlewares.php b/public/typo3conf/ext/ep_theme/Configuration/RequestMiddlewares.php new file mode 100644 index 00000000..ec4ed8b7 --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Configuration/RequestMiddlewares.php @@ -0,0 +1,12 @@ + [ + 'ep/referrer' => [ + 'target' => \EP\EpTheme\Middleware\ReferrerMiddleware::class, + 'after' => [ + 'typo3/cms-frontend/site', + ], + ], + ], +]; diff --git a/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.typoscript b/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.typoscript index 7541f7a2..f0105ae1 100644 --- a/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.typoscript +++ b/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.typoscript @@ -6,9 +6,11 @@ plugin.tx_form.view { } plugin.tx_form.settings.yamlConfigurations { - 100 = EXT:ep_theme/Configuration/Forms/FormSetup.yaml + 1630994710 = EXT:ep_theme/Configuration/Yaml/FormsBase.yaml + 1630994711 = EXT:ep_theme/Configuration/Yaml/FormFinishersFrontend.yaml } module.tx_form.settings.yamlConfigurations { - 100 = EXT:ep_theme/Configuration/Forms/FormSetup.yaml + 1630994710 = EXT:ep_theme/Configuration/Yaml/FormsBase.yaml + 1630994711 = EXT:ep_theme/Configuration/Yaml/FormFinishersBackend.yaml } diff --git a/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormFinishersBackend.yaml b/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormFinishersBackend.yaml new file mode 100644 index 00000000..f155147c --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormFinishersBackend.yaml @@ -0,0 +1,51 @@ +TYPO3: + CMS: + Form: + prototypes: + standard: + formElementsDefinition: + Form: + formEditor: + editors: + 900: + selectOptions: + 1000: + value: 'BpnApiFinisher' + label: 'BusPro Finisher' + 1100: + value: 'AddReferrerFinisher' + label: 'Referrer Finisher' + propertyCollections: + finishers: + 1000: + identifier: 'BpnApiFinisher' + editors: + __inheritances: + 10: 'TYPO3.CMS.Form.mixins.formElementMixins.BaseCollectionEditorsMixin' + 100: + label: 'BusPro Finisher' + 110: + identifier: 'mapping' + templateName: 'Inspector-TextEditor' + label: 'Mapping' + propertyPath: 'options.mapping' + propertyValidators: + 10: 'NotEmpty' + 1100: + identifier: 'AddReferrerFinisher' + editors: + __inheritances: + 10: 'TYPO3.CMS.Form.mixins.formElementMixins.BaseCollectionEditorsMixin' + 100: + label: 'Referrer Finisher' + + finishersDefinition: + BpnApiFinisher: + formEditor: + iconIdentifier: 'form-finisher' + predefinedDefaults: + options: + mapping: 'lastName:text-1,firstName:text-2,gender:singleselect-1,email:email-1,street:text-3,zipCode:text-4,city:text-5,phone:telephone-1' + AddReferrerFinisher: + formEditor: + iconIdentifier: 'form-finisher' diff --git a/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormFinishersFrontend.yaml b/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormFinishersFrontend.yaml new file mode 100644 index 00000000..b9e8cb73 --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormFinishersFrontend.yaml @@ -0,0 +1,19 @@ +TYPO3: + CMS: + Form: + prototypes: + standard: + finishersDefinition: + BpnApiFinisher: + implementationClassName: 'EP\EpTheme\Form\BpnApiFinisher' + formEditor: + label: 'BusPro Finisher' + options: + identifier: 'BpnApiFinisher' + mapping: 'lastName:text-1,firstName:text-2,gender:singleselect-1,email:email-1,street:text-3,zipCode:text-4,city:text-5,phone:telephone-1' + AddReferrerFinisher: + implementationClassName: 'EP\EpTheme\Form\AddReferrerFinisher' + formEditor: + label: 'Referrer Finisher' + options: + identifier: 'AddReferrerFinisher' diff --git a/public/typo3conf/ext/ep_theme/Configuration/Forms/FormSetup.yaml b/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormsBase.yaml similarity index 61% rename from public/typo3conf/ext/ep_theme/Configuration/Forms/FormSetup.yaml rename to public/typo3conf/ext/ep_theme/Configuration/Yaml/FormsBase.yaml index 255e9b4e..7687bbb7 100644 --- a/public/typo3conf/ext/ep_theme/Configuration/Forms/FormSetup.yaml +++ b/public/typo3conf/ext/ep_theme/Configuration/Yaml/FormsBase.yaml @@ -4,26 +4,20 @@ TYPO3: 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/' + 1505042810: 'EXT:ep_theme/Resources/Private/Templates/Form/' partialRootPaths: - 100: 'EXT:ep_theme/Resources/Private/Partials/Form/' + 1505042810: 'EXT:ep_theme/Resources/Private/Partials/Form/' layoutRootPaths: - 100: 'EXT:ep_theme/Resources/Private/Layouts/Form/' - + 1505042810: 'EXT:ep_theme/Resources/Private/Layouts/Form/' contactform: __inheritances: 10: 'TYPO3.CMS.Form.prototypes.standard' - applicationform: __inheritances: 10: 'TYPO3.CMS.Form.prototypes.standard'