/**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var ConfigContext $context */
     /** @var array|null $definition */
     $definition = $context->getResult();
     if (empty($definition) || ConfigUtil::isExcludeAll($definition)) {
         // nothing to do
         return $definition;
     }
     $entityClass = $context->getClassName();
     if (!$this->doctrineHelper->isManageableEntityClass($entityClass)) {
         return $definition;
     }
     $expandRelations = $context->get(ExpandRelatedEntitiesConfigExtra::NAME);
     $associations = $this->doctrineHelper->getEntityMetadataForClass($entityClass)->getAssociationMappings();
     foreach ($associations as $fieldName => $mapping) {
         if (!$this->isAssociationCompletionRequired($fieldName, $definition)) {
             continue;
         }
         if (!in_array($fieldName, $expandRelations)) {
             continue;
         }
         $extras = array_filter($context->getExtras(), function ($item) {
             if ($item instanceof ExpandRelatedEntitiesConfigExtra || $item instanceof FilterFieldsConfigExtra) {
                 return false;
             }
             return true;
         });
         $config = $this->configProvider->getConfig($mapping['targetEntity'], $context->getVersion(), $context->getRequestType(), $extras);
         $definition[ConfigUtil::FIELDS][$fieldName] = $config;
     }
     $context->setResult([ConfigUtil::EXCLUSION_POLICY => ConfigUtil::EXCLUSION_POLICY_NONE, ConfigUtil::FIELDS => $definition[ConfigUtil::FIELDS]]);
 }
Пример #2
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var GetListContext $context */
     if (!in_array(RequestType::REST, $context->getRequestType(), true)) {
         parent::process($context);
     } else {
         // reuse REST API sorting filter
         $filters = $context->getFilters();
         $sortFilterKey = $this->getSortFilterKey();
         if ($sortFilterKey !== RestSetDefaultSorting::SORT_FILTER_KEY && $filters->has(RestSetDefaultSorting::SORT_FILTER_KEY)) {
             $filter = $filters->get(RestSetDefaultSorting::SORT_FILTER_KEY);
             $filters->remove(RestSetDefaultSorting::SORT_FILTER_KEY);
             $filters->add($sortFilterKey, $filter);
         }
         if ($filters->has($sortFilterKey)) {
             $filter = $filters->get($sortFilterKey);
             if ($filter instanceof SortFilter) {
                 $entityClass = $context->getClassName();
                 $filter->setDefaultValue(function () use($entityClass) {
                     return $this->getDefaultValue($entityClass);
                 });
             }
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var Context $context */
     $requestType = $context->getRequestType();
     if (empty($requestType)) {
         throw new \RuntimeException('The type of a request must be set in the context.');
     }
 }
Пример #4
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var Context $context */
     $entityClass = $context->getClassName();
     if (false !== strpos($entityClass, '\\')) {
         // an entity class is already normalized
         return;
     }
     $context->setClassName($this->valueNormalizer->normalizeValue($entityClass, DataType::ENTITY_PLURAL_ALIAS, $context->getRequestType()));
 }
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var Context $context */
     if (!$context->hasConfigExtra(ExpandRelatedEntitiesConfigExtra::NAME)) {
         $filterValue = $context->getFilterValues()->get(self::FILTER_KEY);
         if (null !== $filterValue) {
             $includes = $this->valueNormalizer->normalizeValue($filterValue->getValue(), DataType::STRING, $context->getRequestType(), true);
             if (!empty($includes)) {
                 $context->addConfigExtra(new ExpandRelatedEntitiesConfigExtra((array) $includes));
             }
         }
     }
 }
Пример #6
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var Context $context */
     if (!$context->hasConfigExtra(FilterFieldsConfigExtra::NAME)) {
         $fields = [];
         $filterValues = $context->getFilterValues()->getAll(self::FILTER_KEY);
         foreach ($filterValues as $filterValue) {
             $fields[$filterValue->getPath()] = (array) $this->valueNormalizer->normalizeValue($filterValue->getValue(), DataType::STRING, $context->getRequestType(), true);
         }
         if (!empty($fields)) {
             $context->addConfigExtra(new FilterFieldsConfigExtra($fields));
         }
     }
 }
Пример #7
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var ConfigContext $context */
     /** @var array|null $definition */
     $definition = $context->getResult();
     if (empty($definition) || ConfigUtil::isExcludeAll($definition)) {
         // nothing to normalize
         return;
     }
     if (ConfigUtil::getArrayValue($definition, ConfigUtil::DEFINITION)) {
         $definition = ConfigUtil::getArrayValue($definition, ConfigUtil::DEFINITION);
     }
     $fields = ConfigUtil::getArrayValue($definition, ConfigUtil::FIELDS);
     $entityClass = $context->getClassName();
     if ($this->doctrineHelper->isManageableEntityClass($entityClass)) {
         $fields = $this->completeDefinition($fields, $entityClass, $context->getVersion(), $context->getRequestType(), $context->getExtras());
     }
     $context->setResult([ConfigUtil::EXCLUSION_POLICY => ConfigUtil::EXCLUSION_POLICY_ALL, ConfigUtil::FIELDS => $fields]);
 }
Пример #8
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var GetListContext $context */
     if ($context->hasQuery()) {
         // a query is already built
         return;
     }
     $filterValues = $context->getFilterValues();
     $filters = $context->getFilters();
     foreach ($filters as $filterKey => $filter) {
         $filterValue = null;
         if ($filterValues->has($filterKey)) {
             $filterValue = $filterValues->get($filterKey);
             if ($filter instanceof StandaloneFilter) {
                 $value = $this->valueNormalizer->normalizeValue($filterValue->getValue(), $filter->getDataType(), $context->getRequestType(), $filter->isArrayAllowed($filterValue->getOperator()));
                 $filterValue->setValue($value);
             }
         }
     }
 }
Пример #9
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var GetListContext $context */
     if (!in_array(RequestType::REST, $context->getRequestType(), true)) {
         parent::process($context);
     } else {
         // reuse REST API paging filters
         $filters = $context->getFilters();
         if ($filters->has(RestSetDefaultPaging::PAGE_SIZE_FILTER_KEY)) {
             $filter = $filters->get(RestSetDefaultPaging::PAGE_SIZE_FILTER_KEY);
             $filters->remove(RestSetDefaultPaging::PAGE_SIZE_FILTER_KEY);
             $filters->add($this->getPageSizeFilterKey(), $filter);
         }
         if ($filters->has(RestSetDefaultPaging::PAGE_NUMBER_FILTER_KEY)) {
             $filter = $filters->get(RestSetDefaultPaging::PAGE_NUMBER_FILTER_KEY);
             $filters->remove(RestSetDefaultPaging::PAGE_NUMBER_FILTER_KEY);
             $filters->add($this->getPageNumberFilterKey(), $filter);
         }
     }
 }