N°6414 Move existing AbstractSimpleField::Validate impl to custom validators

- LinkedSetField
- SelectObjectField
- MultipleChoicesField (warning this hierarchy contains non multiple value fields like SelectField !)

Also change AbstractValidator::Validate signature : now we are returning an array of error messages, so that we can return multiple ones
This commit is contained in:
Pierre Goiffon
2023-06-28 17:56:04 +02:00
parent d085f15b6d
commit 6cc2d49cd5
20 changed files with 526 additions and 172 deletions

View File

@@ -0,0 +1,45 @@
<?php
/*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Form\Validator;
use Combodo\iTop\Form\Helper\FieldHelper;
use DBSearch;
use utils;
class SelectObjectValidator extends AbstractValidator
{
public const VALIDATOR_NAME = 'select_object_validator';
/** @var \DBSearch $oSearch */
private $oSearch;
public function __construct(DBSearch $oSearch)
{
parent::__construct();
$this->oSearch = $oSearch;
}
public function Validate($value): array
{
if (utils::IsNullOrEmptyString($value)) {
return [];
}
if (($value === 0) || ($value === '0')) {
return [];
}
$oSetForExistingCurrentValue = FieldHelper::GetObjectsSetFromSearchAndCurrentValueId($this->oSearch, $value);
$iObjectsCount = $oSetForExistingCurrentValue->CountWithLimit(1);
if ($iObjectsCount === 0) {
return ["Value $value does not match the corresponding filter set"];
}
return [];
}
}