mirror of
https://github.com/salesagility/SuiteCRM.git
synced 2024-12-28 23:08:09 +00:00
55 lines
1.9 KiB
PHP
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;
|
|
});
|
|
}
|
|
}
|