sanitizer = $sanitizer; } /** * @inheritDoc */ public function map(NormalizedSubmission $submission, array $mappingSettings): array { $row = []; // 1. Map all form input fields. foreach ($submission->getFields() as $field) { $header = $field->getLabel() ?: $field->getId(); // Store as Column Header => Sanitized Value. $row[$header] = $this->sanitizer->sanitize($field->getValue()); } // 2. Append selected form metadata as extra columns if enabled. $metaMappings = [ 'include_submission_id' => ['Header' => __('Submission ID', '1-click-form-sync'), 'Value' => $submission->getSubmissionId()], 'include_submission_date' => ['Header' => __('Date', '1-click-form-sync'), 'Value' => $submission->getSubmissionDate()], 'include_submission_time' => ['Header' => __('Submission Time', '1-click-form-sync'), 'Value' => $submission->getSubmissionTime()], 'include_form_id' => ['Header' => __('Form ID', '1-click-form-sync'), 'Value' => $submission->getFormId()], 'include_form_name' => ['Header' => __('Form Name', '1-click-form-sync'), 'Value' => $submission->getFormName()], 'include_page_url' => ['Header' => __('Page URL', '1-click-form-sync'), 'Value' => $submission->getPageUrl()], 'include_utm_source' => ['Header' => __('UTM Source', '1-click-form-sync'), 'Value' => $submission->getUtmSource()], 'include_utm_medium' => ['Header' => __('UTM Medium', '1-click-form-sync'), 'Value' => $submission->getUtmMedium()], 'include_utm_campaign' => ['Header' => __('UTM Campaign', '1-click-form-sync'), 'Value' => $submission->getUtmCampaign()], 'include_utm_term' => ['Header' => __('UTM Term', '1-click-form-sync'), 'Value' => $submission->getUtmTerm()], 'include_utm_content' => ['Header' => __('UTM Content', '1-click-form-sync'), 'Value' => $submission->getUtmContent()], ]; foreach ($metaMappings as $settingKey => $meta) { $isDefaultEnabled = in_array($settingKey, ['include_submission_date', 'include_page_url'], true); if (isset($mappingSettings[$settingKey])) { if (!empty($mappingSettings[$settingKey])) { $row[$meta['Header']] = $this->sanitizer->sanitize($meta['Value']); } } elseif ($isDefaultEnabled) { $row[$meta['Header']] = $this->sanitizer->sanitize($meta['Value']); } } // 3. Append custom query parameters if specified and present in metadata. if (!empty($mappingSettings['custom_utm_params'])) { $customKeys = array_map('trim', explode(',', $mappingSettings['custom_utm_params'])); $metadata = $submission->getMetadata(); foreach ($customKeys as $key) { $parts = array_map('trim', explode('|', $key)); $paramName = $parts[0]; if (!empty($paramName) && isset($metadata[$paramName])) { if ($metadata[$paramName] !== '') { $overrideValue = isset($parts[1]) && $parts[1] !== '' ? $parts[1] : null; $value = $overrideValue !== null ? $overrideValue : $metadata[$paramName]; $row[$paramName] = $this->sanitizer->sanitize($value); } } } } return $row; } }