Spaces:
No application file
No application file
| namespace Mautic\FormBundle\Event\Service; | |
| use Mautic\FormBundle\Entity\Field; | |
| use Mautic\FormBundle\Event\SubmissionEvent; | |
| use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | |
| use Symfony\Component\Routing\RouterInterface; | |
| class FieldValueTransformer | |
| { | |
| private array $contactFieldsToUpdate = []; | |
| private array $tokensToUpdate = []; | |
| private bool $isTransformed = false; | |
| public function __construct( | |
| private RouterInterface $router | |
| ) { | |
| } | |
| public function transformValuesAfterSubmit(SubmissionEvent $submissionEvent): void | |
| { | |
| if (true === $this->isTransformed) { | |
| return; | |
| } | |
| $fields = $submissionEvent->getForm()->getFields(); | |
| $contactFieldMatches = $submissionEvent->getContactFieldMatches(); | |
| $tokens = $submissionEvent->getTokens(); | |
| /** @var Field $field */ | |
| foreach ($fields as $field) { | |
| switch ($field->getType()) { | |
| case 'file': | |
| $newValue = $this->router->generate( | |
| 'mautic_form_file_download', | |
| [ | |
| 'submissionId' => $submissionEvent->getSubmission()->getId(), | |
| 'field' => $field->getAlias(), | |
| ], | |
| UrlGeneratorInterface::ABSOLUTE_URL | |
| ); | |
| $tokenAlias = "{formfield={$field->getAlias()}}"; | |
| if (!empty($tokens[$tokenAlias])) { | |
| $this->tokensToUpdate[$tokenAlias] = $tokens[$tokenAlias] = $newValue; | |
| } | |
| $contactFieldAlias = $field->getMappedField(); | |
| if ('contact' === $field->getMappedObject() && !empty($contactFieldMatches[$contactFieldAlias])) { | |
| $this->contactFieldsToUpdate[$contactFieldAlias] = $contactFieldMatches[$contactFieldAlias] = $newValue; | |
| } | |
| break; | |
| } | |
| } | |
| $submissionEvent->setTokens($tokens); | |
| $submissionEvent->setContactFieldMatches($contactFieldMatches); | |
| $this->isTransformed = true; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getContactFieldsToUpdate() | |
| { | |
| return $this->contactFieldsToUpdate; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getTokensToUpdate() | |
| { | |
| return $this->tokensToUpdate; | |
| } | |
| /** | |
| * @deprecated will be removed in Mautic 4. This should have been a private method. Not actually needed. | |
| */ | |
| public function isIsTransformed(): bool | |
| { | |
| return $this->isTransformed; | |
| } | |
| } | |