mirror of
https://github.com/salesagility/SuiteCRM.git
synced 2025-02-11 16:58:54 +00:00
39 lines
1.3 KiB
PHP
39 lines
1.3 KiB
PHP
<?php
|
|
namespace Api\V8\Param\Options;
|
|
|
|
use Api\V8\JsonApi\Repository\Sort as SortRepository;
|
|
use Symfony\Component\OptionsResolver\Options;
|
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
|
use Symfony\Component\Validator\Constraints as Assert;
|
|
|
|
class Sort extends BaseOption
|
|
{
|
|
const REGEX_SORT_PATTERN = '/[^\w\-]/';
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function add(OptionsResolver $resolver)
|
|
{
|
|
$resolver
|
|
->setDefined('sort')
|
|
->setAllowedTypes('sort', 'string')
|
|
->setAllowedValues('sort', $this->validatorFactory->createClosure([
|
|
new Assert\NotBlank(),
|
|
new Assert\Regex([
|
|
'pattern' => self::REGEX_SORT_PATTERN,
|
|
'match' => false,
|
|
]),
|
|
], true))
|
|
->setNormalizer('sort', function (Options $options, $value) {
|
|
if ($options->offsetExists('linkFieldName')) {
|
|
$bean = $this->beanManager->getLinkedFieldBean($options->offsetGet('sourceBean'), $options->offsetGet('linkFieldName'));
|
|
} else {
|
|
$bean = $this->beanManager->newBeanSafe($options->offsetGet('moduleName'));
|
|
}
|
|
$sort = new SortRepository();
|
|
|
|
return $sort->parseOrderBy($bean, $value);
|
|
});
|
|
}
|
|
}
|