/** * @param string $entityClass * @param string $filterKey * @param array $filterConfig * * @return ConfigInterface|null */ protected function findFieldConfig($entityClass, $filterKey, $filterConfig) { $path = ConfigUtil::explodePropertyPath(isset($filterConfig[ConfigUtil::PROPERTY_PATH]) ? $filterConfig[ConfigUtil::PROPERTY_PATH] : $filterKey); if (count($path) === 1) { return $this->getFieldConfig($entityClass, reset($path)); } $linkedProperty = array_pop($path); $classMetadata = $this->doctrineHelper->findEntityMetadataByPath($entityClass, $path); return null !== $classMetadata ? $this->getFieldConfig($classMetadata->name, $linkedProperty) : null; }
/** * @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); } } } }
/** * @param ConfigContext $context * @param array $fields * @param string $rootEntityClass * @param ClassMetadata $metadata * @param string|null $fieldPath */ protected function processFields(ConfigContext $context, array &$fields, $rootEntityClass, ClassMetadata $metadata, $fieldPath = null) { foreach ($fields as $fieldName => &$fieldConfig) { if (is_array($fieldConfig)) { $propertyPath = !empty($fieldConfig[ConfigUtil::PROPERTY_PATH]) ? $fieldConfig[ConfigUtil::PROPERTY_PATH] : $fieldName; $path = ConfigUtil::explodePropertyPath($propertyPath); if (count($path) === 1) { $this->setFieldCustomizationHandler($context, $fieldConfig, $metadata, $propertyPath, $rootEntityClass, $this->buildFieldPath($fieldName, $fieldPath)); } else { $linkedField = array_pop($path); $linkedMetadata = $this->doctrineHelper->findEntityMetadataByPath($metadata->name, $path); if (null !== $linkedMetadata) { $this->setFieldCustomizationHandler($context, $fieldConfig, $linkedMetadata, $linkedField, $rootEntityClass, $this->buildFieldPath($fieldName, $fieldPath)); } } } } }
/** * @param array $definition * @param string $entityClass * @param int $limit */ protected function setLimits(array &$definition, $entityClass, $limit) { if (isset($definition[ConfigUtil::FIELDS]) && is_array($definition[ConfigUtil::FIELDS])) { $metadata = $this->doctrineHelper->getEntityMetadataForClass($entityClass); foreach ($definition[ConfigUtil::FIELDS] as $fieldName => &$fieldConfig) { if (is_array($fieldConfig)) { $propertyPath = ConfigUtil::getPropertyPath($fieldConfig, $fieldName); $path = ConfigUtil::explodePropertyPath($propertyPath); if (count($path) === 1) { $this->setFieldLimit($fieldConfig, $metadata, $propertyPath, $limit); } else { $linkedField = array_pop($path); $linkedMetadata = $this->doctrineHelper->findEntityMetadataByPath($entityClass, $path); if (null !== $linkedMetadata) { $this->setFieldLimit($fieldConfig, $linkedMetadata, $linkedField, $limit); } } } } } }
/** * @param array $sectionConfig * @param string $entityClass * * @return array */ protected function removeDuplicates(array $sectionConfig, $entityClass) { if (empty($sectionConfig[ConfigUtil::FIELDS])) { return $sectionConfig; } $keys = array_keys($sectionConfig[ConfigUtil::FIELDS]); foreach ($keys as $key) { $fieldPath = !empty($sectionConfig[ConfigUtil::FIELDS][$key][ConfigUtil::PROPERTY_PATH]) ? $sectionConfig[ConfigUtil::FIELDS][$key][ConfigUtil::PROPERTY_PATH] : $key; $path = ConfigUtil::explodePropertyPath($fieldPath); if (count($path) === 1) { continue; } $fieldName = array_pop($path); if (array_key_exists(implode(ConfigUtil::PATH_DELIMITER, $path), $sectionConfig[ConfigUtil::FIELDS])) { $metadata = $this->doctrineHelper->findEntityMetadataByPath($entityClass, $path); if (null !== $metadata && in_array($fieldName, $metadata->getIdentifierFieldNames(), true)) { unset($sectionConfig[ConfigUtil::FIELDS][$key]); } } } return $sectionConfig; }
/** * @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); } } }