0
0
mirror of https://github.com/salesagility/SuiteCRM.git synced 2024-11-24 00:29:35 +00:00
salesagility_SuiteCRM/Api/V8/Param/Options/Fields.php
2023-07-18 15:53:08 +01:00

55 lines
1.9 KiB
PHP

<?php
namespace Api\V8\Param\Options;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
#[\AllowDynamicProperties]
class Fields extends BaseOption
{
public const REGEX_FIELD_PATTERN = '/[^\w\-,]/';
/**
* @inheritdoc
*
* @throws \InvalidArgumentException In case fields are invalid.
*/
public function add(OptionsResolver $resolver)
{
$resolver
->setDefined('fields')
->setAllowedTypes('fields', 'array')
->setAllowedValues('fields', $this->validatorFactory->createClosureForIterator([
new Assert\NotBlank(),
new Assert\Regex([
'pattern' => self::REGEX_FIELD_PATTERN,
'match' => false,
]),
], true))
->setNormalizer('fields', function (Options $options, $values) {
$bean = $this->beanManager->newBeanSafe(key($values));
$attributes = $bean->toArray();
$fields = explode(',', array_shift($values));
$invalidFields = array_filter($fields, function ($field) use ($attributes) {
return !array_key_exists($field, $attributes);
});
if ($invalidFields) {
throw new \InvalidArgumentException(
sprintf(
'The following field%s in %s module %s not found: %s',
count($invalidFields) > 1 ? 's' : '',
$bean->getObjectName(),
count($invalidFields) > 1 ? 'are' : 'is',
implode(', ', $invalidFields)
)
);
}
return $fields;
});
}
}