name)) { $formName = (string)$formModel->name; } elseif (is_array($formModel) && isset($formModel['name'])) { $formName = (string)$formModel['name']; } } if (empty($formName) && !empty($formId)) { $formName = 'Forminator Form #' . $formId; } $ignoredTypes = [ 'pagebreak', 'html', 'divider', 'captcha', 'recaptcha', 'turnstile', 'hcaptcha', 'section', 'stripe', 'paypal', ]; $fields = []; foreach ($rawFields as $key => $fieldData) { if (is_object($fieldData)) { $type = strtolower(trim((string)($fieldData->type ?? $fieldData->field_type ?? ''))); $id = (string)($fieldData->name ?? $fieldData->id ?? $fieldData->field_id ?? $key); $label = (string)($fieldData->field_label ?? $fieldData->title ?? $fieldData->name ?? $id); $value = $fieldData->value ?? ''; } else { $type = strtolower(trim((string)($fieldData['type'] ?? $fieldData['field_type'] ?? ''))); $id = (string)($fieldData['name'] ?? $fieldData['id'] ?? $fieldData['field_id'] ?? $key); $label = (string)($fieldData['field_label'] ?? $fieldData['title'] ?? $fieldData['name'] ?? $id); $value = $fieldData['value'] ?? ''; } if (!empty($type) && in_array($type, $ignoredTypes, true)) { continue; } // Handle array values (e.g. checkboxes / multi-selects) if (is_array($value)) { $value = implode(', ', array_map(function ($val) { return is_scalar($val) ? (string)$val : json_encode($val); }, $value)); } $fields[] = new SubmissionField($id, $label, $value); } // Collect metadata/visitor details. $userId = get_current_user_id(); $userEmail = ''; if ($userId > 0) { $currentUser = wp_get_current_user(); $userEmail = $currentUser->user_email; } // Get submission page URL. $pageUrl = ''; if (isset($_POST['referrer'])) { $pageUrl = esc_url_raw(wp_unslash($_POST['referrer'])); } elseif (isset($_SERVER['HTTP_REFERER'])) { $pageUrl = esc_url_raw(wp_unslash($_SERVER['HTTP_REFERER'])); } // Extract tracking parameters. $trackingParams = [ 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'utm_term' => '', 'utm_content' => '', ]; if (!empty($customParamsString)) { $customKeys = array_map('trim', explode(',', $customParamsString)); foreach ($customKeys as $key) { $parts = array_map('trim', explode('|', $key)); $paramName = $parts[0]; if (!empty($paramName)) { $trackingParams[$paramName] = ''; } } } // 1. Try referrer URL query string if (!empty($pageUrl)) { $queryString = wp_parse_url($pageUrl, PHP_URL_QUERY); if (!empty($queryString)) { wp_parse_str($queryString, $parsedQuery); foreach (array_keys($trackingParams) as $key) { if (!empty($parsedQuery[$key])) { $trackingParams[$key] = sanitize_text_field($parsedQuery[$key]); } } } } // 2. Fallback to GET, POST, or COOKIE foreach (array_keys($trackingParams) as $key) { if (empty($trackingParams[$key])) { if (isset($_GET[$key])) { $trackingParams[$key] = sanitize_text_field(wp_unslash($_GET[$key])); } elseif (isset($_POST[$key])) { $trackingParams[$key] = sanitize_text_field(wp_unslash($_POST[$key])); } elseif (isset($_COOKIE['oneclickformsync_' . $key])) { $trackingParams[$key] = sanitize_text_field(wp_unslash($_COOKIE['oneclickformsync_' . $key])); } elseif (isset($_COOKIE[$key])) { $trackingParams[$key] = sanitize_text_field(wp_unslash($_COOKIE[$key])); } } } $metadata = [ 'user_ip' => sanitize_text_field($_SERVER['REMOTE_ADDR'] ?? ''), ]; foreach ($trackingParams as $key => $val) { $metadata[$key] = $val; } return new NormalizedSubmission([ 'provider_id' => 'forminator', 'form_id' => $formId, 'form_name' => $formName, 'submission_id' => 'oneclickformsync_fmt_' . $entryId, 'submission_date' => current_time('Y-m-d'), 'submission_time' => current_time('H:i:s'), 'page_url' => $pageUrl, 'user_id' => $userId, 'user_email' => $userEmail, 'fields' => $fields, 'metadata' => $metadata, ]); } }