entryFieldRepository = $entryFieldRepository; } /** * @param Field[] $formFields * @param array $submissionData * @return array{0: bool, 1: array} */ public function checkDuplicateFieldValues( array $formFields, array $submissionData, int $formId, ?string $pageId = null ): array { $duplicateErrors = []; $isDuplicate = false; $fieldValues = []; foreach ($formFields as $field) { if (!$this->isFieldOnPage($field, $pageId)) { continue; } $fid = $field->getId(); $fidStr = (string) $fid; if (isset($submissionData[$fidStr])) { $fieldValues[$fidStr] = $submissionData[$fidStr]; } if (!$this->shouldCheckDuplicateValue($field, $fieldValues, $fidStr)) { continue; } $val = $fieldValues[$fidStr]; if ($this->entryFieldRepository->checkDuplicateValue($formId, $fid, $val)) { $duplicateErrors[$fidStr] = true; $isDuplicate = true; } } return [$isDuplicate, $duplicateErrors]; } private function isFieldOnPage(Field $field, ?string $pageId): bool { return $pageId === null || $field->getPageId() === $pageId; } /** * @param array $fieldValues */ private function shouldCheckDuplicateValue(Field $field, array $fieldValues, string $fidStr): bool { if (!$field->getFieldAdvancedSettings()->isNoDuplicates()) { return false; } if (!array_key_exists($fidStr, $fieldValues)) { return false; } $value = $fieldValues[$fidStr]; return $value !== '' && $value !== null; } }