addCurrentUrlField(); $this->addReferrerField(); } private function addReferrerField(): void { $frontendUser = $this->finisherContext->getRequest()->getAttribute('frontend.user'); if (!$frontendUser instanceof FrontendUserAuthentication) { return; } $referrer = $frontendUser->getKey('ses', ReferrerMiddleware::SESSION_KEY); if (null === $referrer) { return; } $this->addField('referrer', 'Referrer', $referrer); $frontendUser->setKey('ses', ReferrerMiddleware::SESSION_KEY, null); $frontendUser->storeSessionData(); } private function addCurrentUrlField(): void { $request = $this->finisherContext->getRequest(); $routing = $request->getAttribute('routing'); $site = $request->getAttribute('site'); if (!$routing instanceof PageArguments || !$site instanceof Site) { return; } // The page itself, not the form page type the submission was posted to $url = (string)$site->getRouter()->generateUri($routing->getPageId(), [ '_language' => $request->getAttribute('language'), ]); $this->addField('pageurl', 'URL', $url); } private function addField(string $identifier, string $label, string $value): void { $field = $this->finisherContext ->getFormRuntime() ->getFormDefinition() ->getPageByIndex(0) ->createElement($identifier, 'Text'); $field->setDefaultValue($value); $field->setDataType('string'); $field->setLabel($label); // Finisher variable for potential later use $this->finisherContext->getFinisherVariableProvider()->add( $this->shortFinisherIdentifier, $identifier, $value ); } }