/** * {@inheritdoc} */ public function process(ContextInterface $context) { /** @var Context $context */ $entityClass = $context->getClassName(); if (!$this->doctrineHelper->isManageableEntityClass($entityClass)) { // only manageable entities are supported return; } $filters = $context->getFilters(); if ($filters->has(self::FILTER_KEY)) { // filters have been already set return; } $fieldFilter = new FieldsFilter(DataType::STRING, self::FILTER_KEY_DESCRIPTION); $fieldFilter->setArrayAllowed(true); $filters->add(sprintf(self::FILTER_KEY_TEMPLATE, $this->entityClassTransformer->transform($entityClass)), $fieldFilter); $associations = $this->doctrineHelper->getEntityMetadata($entityClass)->getAssociationMappings(); if (!$associations) { // no associations - no sense to add associations fields filters return; } $associationKeys = array_keys($associations); foreach ($associationKeys as $association) { $filters->add(sprintf(self::FILTER_KEY_TEMPLATE, $association), $fieldFilter); } }
/** * @param string $entityClass * @param array $fieldsDefinition * @param array $filterFieldsConfig */ protected function filterFields($entityClass, &$fieldsDefinition, &$filterFieldsConfig) { $entityAlias = $this->entityClassTransformer->transform($entityClass); $rootEntityIdentifiers = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($entityClass); if (array_key_exists($entityAlias, $filterFieldsConfig)) { $allowedFields = $filterFieldsConfig[$entityAlias]; foreach ($fieldsDefinition as $name => &$def) { if (isset($def[ConfigUtil::DEFINITION][ConfigUtil::FIELDS]) && array_key_exists($name, $filterFieldsConfig)) { continue; } if (!in_array($name, $allowedFields, true) && !in_array($name, $rootEntityIdentifiers, true) && !ConfigUtil::isMetadataProperty($name)) { $def[ConfigUtil::DEFINITION][ConfigUtil::EXCLUDE] = true; } } unset($filterFieldsConfig[$entityAlias]); } }
/** * @param string $entityClass * @param string|null $fallbackEntityClass * * @return string */ protected function getEntityType($entityClass, $fallbackEntityClass = null) { if (null === $fallbackEntityClass) { $entityType = $this->entityClassTransformer->transform($entityClass); } else { $entityType = $this->entityClassTransformer->transform($entityClass, false); if (!$entityType) { $entityType = $this->entityClassTransformer->transform($fallbackEntityClass); } } return $entityType; }