diff --git a/administrator/components/com_fields/src/Model/FieldModel.php b/administrator/components/com_fields/src/Model/FieldModel.php index b1318736ee1fa..16f13c537d4f1 100644 --- a/administrator/components/com_fields/src/Model/FieldModel.php +++ b/administrator/components/com_fields/src/Model/FieldModel.php @@ -1005,6 +1005,21 @@ protected function loadFormData() */ public function validate($form, $data, $group = null) { + // Check if the values are unique. This should only apply for list, checkboxes and radio custom field types + if (\in_array($data['type'], ['list', 'checkboxes', 'radio']) + && !empty($data['fieldparams']['options']) + && \is_array($data['fieldparams']['options'])) { + $tmpValues = []; + foreach ($data['fieldparams']['options'] as $option) { + $tmpValues[] = $option['value']; + } + + if (\count($tmpValues) !== \count(array_unique($tmpValues))) { + Factory::getApplication()->enqueueMessage(Text::_('COM_FIELDS_FIELD_INVALID_DUPLICATE_VALUES'), 'error'); + + return false; + } + } if (!$this->getCurrentUser()->authorise('core.admin', 'com_fields')) { if (isset($data['rules'])) { unset($data['rules']); diff --git a/administrator/language/en-GB/com_fields.ini b/administrator/language/en-GB/com_fields.ini index ca7ab9f4c122c..c0f2cfb728451 100644 --- a/administrator/language/en-GB/com_fields.ini +++ b/administrator/language/en-GB/com_fields.ini @@ -31,6 +31,7 @@ COM_FIELDS_FIELD_IMAGE_ALT_LABEL="Alt Text" COM_FIELDS_FIELD_IMAGE_DESC="Image label." COM_FIELDS_FIELD_IMAGE_LABEL="Image" COM_FIELDS_FIELD_INVALID_DEFAULT_VALUE="The default value is invalid." +COM_FIELDS_FIELD_INVALID_DUPLICATE_VALUES="The option values must be unique." COM_FIELDS_FIELD_LABEL_FORM_CLASS_LABEL="Label Class (Form)" COM_FIELDS_FIELD_LABEL_LABEL="Label" COM_FIELDS_FIELD_LABEL_RENDER_CLASS_LABEL="Label Class (Output)"