Files
iTop/sources/Form/Validator/MultipleChoicesValidator.php
2024-06-18 16:00:08 +02:00

60 lines
1.7 KiB
PHP

<?php
/*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Form\Validator;
use utils;
class MultipleChoicesValidator extends AbstractValidator
{
public const VALIDATOR_NAME = 'multiple_choices_validator';
/** @var array List of possible choices */
private array $aChoices;
public function __construct(array $aChoices)
{
parent::__construct();
$this->aChoices = $aChoices;
}
/**
* @param mixed $value Warning can either be an array (if multiple values are allowed in the field) or a primitive : {@see \Combodo\iTop\Form\Field\MultipleChoicesField::GetCurrentValue()}
*
* @return array|string[]
*/
public function Validate($value): array
{
$aErrorMessages = [];
if (false === is_array($value)) {
$this->CheckValueAgainstChoices($value, $aErrorMessages);
return $aErrorMessages;
}
if (count($value) === 0) {
return [];
}
/** @noinspection PhpUnusedLocalVariableInspection */
foreach ($value as $sCode => $valueItem) {
if (utils::IsNullOrEmptyString($valueItem)) {
continue;
}
$this->CheckValueAgainstChoices($valueItem, $aErrorMessages);
}
return $aErrorMessages;
}
private function CheckValueAgainstChoices(string $sValue, array &$aErrorMessages): void
{
if (false === array_key_exists($sValue, $this->aChoices)) {
$sValue = utils::HtmlEntities($sValue);
$aErrorMessages[] = "Value ({$sValue}) is not part of the field possible values list";
}
}
}