# ivyforms/1.1/backend/src/Services/Field/FieldDuplicateValidationService.php

The Innovative Form Builder – IvyForms, version 1.1. 79 lines.

- Page: https://pluginprobe.com/plugins/ivyforms/1.1/code/backend/src/Services/Field/FieldDuplicateValidationService.php
- Raw: https://pluginprobe.com/plugins/ivyforms/1.1/raw/backend/src/Services/Field/FieldDuplicateValidationService.php
- Modified: 2026-06-08T12:18:46+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ivyforms/1.1/code/backend/src/Services/Field/FieldDuplicateValidationService.php#L10-L20`.

```php
<?php

namespace IvyForms\Services\Field;

use IvyForms\Entity\Field\Field;
use IvyForms\Repository\EntryField\EntryFieldRepositoryInterface;

/**
 * Validates no-duplicates field values against stored submissions.
 */
class FieldDuplicateValidationService
{
    private EntryFieldRepositoryInterface $entryFieldRepository;

    public function __construct(EntryFieldRepositoryInterface $entryFieldRepository)
    {
        $this->entryFieldRepository = $entryFieldRepository;
    }

    /**
     * @param Field[] $formFields
     * @param array<string,mixed> $submissionData
     * @return array{0: bool, 1: array<int|string,bool>}
     */
    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<string, mixed> $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;
    }
}

```
