providerId = $data['provider_id'] ?? ''; $this->formId = $data['form_id'] ?? ''; $this->formName = $data['form_name'] ?? ''; $this->submissionId = $data['submission_id'] ?? ''; $this->submissionDate = $data['submission_date'] ?? gmdate('Y-m-d'); $this->submissionTime = $data['submission_time'] ?? gmdate('H:i:s'); $this->pageUrl = $data['page_url'] ?? ''; $this->userId = (int)($data['user_id'] ?? 0); $this->userEmail = $data['user_email'] ?? ''; $this->fields = $data['fields'] ?? []; $this->metadata = $data['metadata'] ?? []; } /** * Convert the DTO to a serializable array. * * @return array */ public function toArray(): array { $fieldsArr = []; foreach ($this->fields as $field) { $fieldsArr[] = [ 'id' => $field->getId(), 'label' => $field->getLabel(), 'value' => $field->getValue(), ]; } return [ 'provider_id' => $this->providerId, 'form_id' => $this->formId, 'form_name' => $this->formName, 'submission_id' => $this->submissionId, 'submission_date' => $this->submissionDate, 'submission_time' => $this->submissionTime, 'page_url' => $this->pageUrl, 'user_id' => $this->userId, 'user_email' => $this->userEmail, 'fields' => $fieldsArr, 'metadata' => $this->metadata, ]; } // Getters public function getProviderId(): string { return $this->providerId; } public function getFormId(): string { return $this->formId; } public function getFormName(): string { return $this->formName; } public function getSubmissionId(): string { return $this->submissionId; } public function getSubmissionDate(): string { return $this->submissionDate; } public function getSubmissionTime(): string { return $this->submissionTime; } public function getPageUrl(): string { return $this->pageUrl; } public function getUserId(): int { return $this->userId; } public function getUserEmail(): string { return $this->userEmail; } /** @return SubmissionField[] */ public function getFields(): array { return $this->fields; } public function getMetadata(): array { return $this->metadata; } public function getUtmSource(): string { return (string)($this->metadata['utm_source'] ?? ''); } public function getUtmMedium(): string { return (string)($this->metadata['utm_medium'] ?? ''); } public function getUtmCampaign(): string { return (string)($this->metadata['utm_campaign'] ?? ''); } public function getUtmTerm(): string { return (string)($this->metadata['utm_term'] ?? ''); } public function getUtmContent(): string { return (string)($this->metadata['utm_content'] ?? ''); } }