/**
  * @param EntityMetadata $entityMetadata
  * @param array          $config
  */
 protected function normalizeMetadata(EntityMetadata $entityMetadata, array $config)
 {
     $fields = ConfigUtil::getArrayValue($config, ConfigUtil::FIELDS);
     foreach ($fields as $fieldName => $fieldConfig) {
         if (!$entityMetadata->hasProperty($fieldName) && null !== $fieldConfig && isset($fieldConfig[ConfigUtil::PROPERTY_PATH])) {
             $path = ConfigUtil::explodePropertyPath($fieldConfig[ConfigUtil::PROPERTY_PATH]);
             if (count($path) > 1) {
                 $this->addLinkedProperty($entityMetadata, $fieldName, $path);
             }
         }
     }
 }
 /**
  * {@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]);
 }
示例#3
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var ConfigContext $context */
     $filters = $context->getFilters();
     if (empty($filters)) {
         // nothing to normalize
         return;
     }
     $fields = ConfigUtil::getArrayValue($filters, ConfigUtil::FIELDS);
     if (ConfigUtil::isExcludeAll($filters)) {
         $fields = ConfigUtil::removeExclusions($fields);
     } else {
         $entityClass = $context->getClassName();
         if ($this->doctrineHelper->isManageableEntityClass($entityClass)) {
             $fields = ConfigUtil::removeExclusions($this->completeFilters($fields, $entityClass, $context->getResult()));
         }
     }
     $context->setFilters([ConfigUtil::EXCLUSION_POLICY => ConfigUtil::EXCLUSION_POLICY_ALL, ConfigUtil::FIELDS => $fields]);
 }
 /**
  * @param array  $sectionConfig
  * @param string $sectionName
  * @param array  $definition
  * @param array  $childSectionConfig
  * @param string $fieldPrefix
  * @param string $pathPrefix
  *
  * @return array
  */
 protected function collectNested(array &$sectionConfig, $sectionName, array $definition, array $childSectionConfig, $fieldPrefix, $pathPrefix)
 {
     $this->updatePropertyPath($childSectionConfig, $definition);
     $fields = ConfigUtil::getArrayValue($childSectionConfig, ConfigUtil::FIELDS);
     foreach ($fields as $fieldName => $config) {
         $fieldPath = !empty($config[ConfigUtil::PROPERTY_PATH]) ? $config[ConfigUtil::PROPERTY_PATH] : $fieldName;
         $field = $fieldPrefix . $fieldName;
         if (!isset($sectionConfig[ConfigUtil::FIELDS][$field])) {
             $path = $pathPrefix . $fieldPath;
             if ($path !== $field) {
                 $config[ConfigUtil::PROPERTY_PATH] = $path;
             } elseif (is_array($config) && array_key_exists(ConfigUtil::PROPERTY_PATH, $config)) {
                 unset($config[ConfigUtil::PROPERTY_PATH]);
             }
             $sectionConfig[ConfigUtil::FIELDS][$field] = $config;
         }
         if (is_array($definition) && !empty($definition[ConfigUtil::FIELDS][$fieldName][$sectionName])) {
             $this->collectNested($sectionConfig, $sectionName, ConfigUtil::getArrayValue($definition[ConfigUtil::FIELDS][$fieldName], ConfigUtil::DEFINITION), $definition[ConfigUtil::FIELDS][$fieldName][$sectionName], $this->buildPrefix($fieldName, $fieldPrefix), $this->buildPrefix($fieldPath, $pathPrefix));
         }
     }
 }
示例#5
0
 /**
  * @param EntityMetadata $entityMetadata
  * @param array          $config
  */
 protected function normalizeMetadata(EntityMetadata $entityMetadata, array $config)
 {
     $fields = ConfigUtil::getArrayValue($config, ConfigUtil::FIELDS);
     foreach ($fields as $fieldName => $fieldConfig) {
         if (null === $fieldConfig) {
             continue;
         }
         if (ConfigUtil::isExclude($fieldConfig)) {
             $entityMetadata->removeProperty($fieldName);
         } elseif (isset($fieldConfig[ConfigUtil::PROPERTY_PATH])) {
             $path = ConfigUtil::explodePropertyPath($fieldConfig[ConfigUtil::PROPERTY_PATH]);
             if (count($path) === 1) {
                 $entityMetadata->renameProperty(reset($path), $fieldName);
             }
         }
     }
     if (ConfigUtil::isExcludeAll($config)) {
         $toRemoveFieldNames = array_diff(array_merge(array_keys($entityMetadata->getFields()), array_keys($entityMetadata->getAssociations())), array_keys($fields));
         foreach ($toRemoveFieldNames as $fieldName) {
             $entityMetadata->removeProperty($fieldName);
         }
     }
 }
示例#6
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var GetListContext $context */
     $configOfFilters = $context->getConfigOfFilters();
     if (empty($configOfFilters)) {
         // a filters' configuration does not contains any data
         return;
     }
     if (!ConfigUtil::isExcludeAll($configOfFilters)) {
         // it seems that filters' configuration was not normalized
         throw new \RuntimeException(sprintf('Expected "all" exclusion policy for filters. Got: %s.', ConfigUtil::getExclusionPolicy($configOfFilters)));
     }
     $fields = ConfigUtil::getArrayValue($configOfFilters, ConfigUtil::FIELDS);
     $filters = $context->getFilters();
     foreach ($fields as $field => $fieldConfig) {
         if ($filters->has($field)) {
             continue;
         }
         $filter = $this->createFilter(ConfigUtil::getPropertyPath($fieldConfig, $field), $fieldConfig);
         if (null !== $filter) {
             $filters->add($field, $filter);
         }
     }
 }