Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var ConfigContext $context */
     /** @var array $definition */
     $definition = $context->getResult();
     if (empty($definition) || !array_key_exists(ConfigUtil::FIELDS, $definition)) {
         // virtual fields is added only if a definition of fields exists
         return;
     }
     $entityClass = $context->getClassName();
     $virtualFields = $this->virtualFieldProvider->getVirtualFields($entityClass);
     if (!empty($virtualFields)) {
         foreach ($virtualFields as $field) {
             $query = $this->virtualFieldProvider->getVirtualFieldQuery($entityClass, $field);
             $propertyPath = $this->getPropertyPath($query);
             if (!empty($propertyPath)) {
                 $definition[ConfigUtil::FIELDS][$field][ConfigUtil::PROPERTY_PATH] = $propertyPath;
                 if (!empty($query['select']['label']) && $context->hasExtra(DescriptionsConfigExtra::NAME)) {
                     $definition[ConfigUtil::FIELDS][$field][ConfigUtil::LABEL] = new Label($query['select']['label']);
                 }
             }
         }
         $context->setResult($definition);
     }
 }
Exemplo n.º 2
0
 /**
  * Adds entity virtual fields to $result
  *
  * @param array         $result
  * @param ClassMetadata $metadata
  * @param bool          $applyExclusions
  * @param bool          $translate
  */
 protected function addVirtualFields(array &$result, ClassMetadata $metadata, $applyExclusions, $translate)
 {
     $className = $metadata->getName();
     $virtualFields = $this->virtualFieldProvider->getVirtualFields($className);
     foreach ($virtualFields as $fieldName) {
         if ($applyExclusions && $this->exclusionProvider->isIgnoredField($metadata, $fieldName)) {
             continue;
         }
         $query = $this->virtualFieldProvider->getVirtualFieldQuery($className, $fieldName);
         $fieldLabel = isset($query['select']['label']) ? $query['select']['label'] : $this->getFieldLabel($className, $fieldName);
         $this->addField($result, $fieldName, $query['select']['return_type'], $fieldLabel, false, $translate);
         if (isset($query['select']['filter_by_id']) && $query['select']['filter_by_id']) {
             $result[$fieldName]['related_entity_name'] = $metadata->getAssociationTargetClass($fieldName);
         }
     }
 }
Exemplo n.º 3
0
 protected function loadVirtualFields()
 {
     $entities = $this->cache->getEntities();
     foreach ($entities as $className => $entityData) {
         $virtualFields = $this->virtualFieldProvider->getVirtualFields($className);
         if (!empty($virtualFields)) {
             foreach ($virtualFields as $fieldName) {
                 if (null === $this->cache->getConfigurable($className, $fieldName)) {
                     $this->cache->saveConfigurable(false, $className, $fieldName);
                 }
             }
         }
         $virtualRelations = $this->virtualRelationProvider->getVirtualRelations($className);
         if (!empty($virtualRelations)) {
             foreach ($virtualRelations as $fieldName => $config) {
                 if (null === $this->cache->getConfigurable($className, $fieldName)) {
                     $this->cache->saveConfigurable(false, $className, $fieldName);
                 }
             }
         }
     }
 }