コード例 #1
0
 /**
  * @param \Twig_Environment $environment
  * @param FieldableEntity $entity
  * @param string $field
  *
  * @return string
  * @internal param \Twig_Environment $environment
  */
 public function renderFieldDisplay(\Twig_Environment $environment, FieldableEntity $entity, $field)
 {
     $class = get_class($entity);
     $displayMapping = $this->displayManager->getEntityConfig($class);
     $fieldSettings = $this->fieldManager->getEntityFieldMapping($class);
     $html = '';
     if ($displayMapping['options']['fields'][$field]) {
         $displayFieldSettings = $displayMapping['options']['fields'][$field] + ['type' => null, 'label' => true, 'label_inline' => false, 'options' => []];
         $display = $this->displayManager->getDisplayDefinition($displayFieldSettings['type']);
         $fieldEntity = call_user_func([$entity, 'get' . $field]);
         $fieldDisplayOptions = $displayFieldSettings['options'] ?: [];
         $templateOptions = ['entity' => $fieldEntity, 'field_settings' => $fieldSettings, 'field_name' => $field, 'label' => is_string($displayFieldSettings['label']) ?: ($displayFieldSettings['label'] ? $field : false), 'label_inline' => $displayFieldSettings['label_inline']];
         if ($fieldSettings[$field]['options']['limit'] > 1) {
             $subHtml = '';
             $subTemplateOptions = $templateOptions;
             $subTemplateOptions['label'] = false;
             foreach ($fieldEntity as $fieldEntityItem) {
                 $subHtml .= $environment->render($display->getTemplate(), $subTemplateOptions + $display->getTemplateOptions($fieldEntityItem, $fieldDisplayOptions));
             }
             $templateOptions['rows'] = $subHtml;
             $html = $environment->render($display->getListTemplate(), $templateOptions + $display->getListTemplateOptions($fieldEntity, $fieldDisplayOptions));
         } else {
             $html = $environment->render($display->getTemplate(), $templateOptions + $display->getTemplateOptions($fieldEntity, $fieldDisplayOptions));
         }
     }
     return $html;
 }
コード例 #2
0
 public function requireFieldAssets()
 {
     $assets = [];
     foreach ($this->fieldManager->getFieldWidgetDefinitions() as $definition) {
         foreach ($definition->getAssetLibraries() as $library) {
             $assets = array_merge($assets, $library->getJavascripts());
         }
     }
     return $assets;
 }
コード例 #3
0
 /**
  * {@inheritdoc}
  */
 public function getGlobals()
 {
     $fieldWidgets = $this->fieldManager->getFieldWidgetDefinitions();
     $javascripts = [];
     $stylesheets = [];
     foreach ($fieldWidgets as $fieldWidget) {
         $fieldWidgetAssetLibs = $fieldWidget->getAssetLibraries();
         foreach ($fieldWidgetAssetLibs as $fieldWidgetAssetLib) {
             $javascripts = array_merge($javascripts, $fieldWidgetAssetLib->getJavascripts());
             $stylesheets = array_merge($stylesheets, $fieldWidgetAssetLib->getStylesheets());
         }
     }
     return ['field_assets_js' => $javascripts, 'field_assets_css' => $stylesheets];
 }
コード例 #4
0
 /**
  * @inheritDoc
  */
 public function shouldSkipClass(ClassMetadata $metadata, Context $context)
 {
     if ($this->fieldManager->hasEntityFieldMapping($metadata->name)) {
         return false;
     }
     if ($metadata->reflection->isSubclassOf('Gravity\\CmsBundle\\Entity\\Field')) {
         return false;
     }
     if ($metadata->reflection->isSubclassOf('Gravity\\CmsBundle\\Entity\\FieldableEntity')) {
         return false;
     }
     if ($metadata->reflection->implementsInterface('Symfony\\Component\\Security\\Core\\User\\UserInterface')) {
         return false;
     }
     return $this->otherStrategy->shouldSkipClass($metadata, $context);
 }
コード例 #5
0
 /**
  * {@inheritDoc}
  */
 public function getOptions($term, array $options)
 {
     $fieldSearch = ['vocab' => [], 'terms' => ['name' => $term]];
     $fieldDefinitions = $this->fieldManager->getEntityFieldMapping($options['class']);
     foreach ($fieldDefinitions as $fieldName => $fieldDefinition) {
         if ($fieldDefinition['searchable']) {
             $fieldSearch['terms'][$fieldName] = $term;
         }
     }
     /** @var Tag[] $taxonomies */
     $taxonomies = $this->searchAdaptor->search($options['class'], $fieldSearch, $options['page_size'], $options['page_offset']);
     $tagOptions = [];
     foreach ($taxonomies as $taxonomy) {
         $tagOptions[] = ['text' => (string) $taxonomy, 'id' => $taxonomy->getId()];
     }
     if ($options['allow_new']) {
         $tagOptions[] = ['text' => $term, 'id' => $term];
     }
     return $tagOptions;
 }
コード例 #6
0
 /**
  * @param LoadClassMetadataEventArgs $eventArgs
  */
 public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
 {
     // the $metadata is the whole mapping info for this class
     /** @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */
     $metadata = $eventArgs->getClassMetadata();
     $reflection = $metadata->getReflectionClass();
     if (!isset($this->entityMappings[$metadata->getName()])) {
         return;
     }
     // map all the user fields automatically if they aren't defined
     if (!$metadata->hasAssociation('createdBy')) {
         $metadata->mapManyToOne(['fieldName' => 'createdBy', 'targetEntity' => $this->userEntity]);
     }
     if (!$metadata->hasAssociation('editedBy')) {
         $metadata->mapManyToOne(['fieldName' => 'editedBy', 'targetEntity' => $this->userEntity]);
     }
     if (!$metadata->hasAssociation('deletedBy')) {
         $metadata->mapManyToOne(['fieldName' => 'deletedBy', 'targetEntity' => $this->userEntity]);
     }
     $entityManager = $eventArgs->getEntityManager();
     $namingStrategy = $entityManager->getConfiguration()->getNamingStrategy();
     foreach ($this->entityMappings[$metadata->getName()] as $field => $fieldConfig) {
         $fieldDefinition = $this->fieldManager->getFieldDefinition($fieldConfig['type']);
         if ($fieldConfig['dynamic']) {
             if ($fieldConfig['options']['limit'] > 1) {
                 $mapping = ['targetEntity' => $fieldDefinition->getEntityClass(), 'fieldName' => $field, 'cascade' => ['persist'], 'joinTable' => ['name' => strtolower($namingStrategy->classToTableName($metadata->getName())) . '_field_' . $namingStrategy->propertyToColumnName($field)], 'orderBy' => ['delta' => 'ASC'], 'unique' => false];
             } else {
                 $mapping = ['targetEntity' => $fieldDefinition->getEntityClass(), 'fieldName' => $field, 'cascade' => ['persist'], 'unique' => false];
             }
             $event = new FieldMappingEvent($entityManager, $fieldDefinition, $metadata, $field, $fieldConfig, $mapping);
             $this->eventDispatcher->dispatch(GravityEvents::FIELD_MAPPING, $event);
             if ($fieldConfig['options']['limit'] > 1) {
                 $metadata->mapManyToMany($event->getMapping());
             } else {
                 $metadata->mapManyToOne($event->getMapping());
             }
         }
     }
 }
コード例 #7
0
 /**
  * @param FormMapper $formMapper
  */
 protected function configureFormFields(FormMapper $formMapper)
 {
     $formMapper->with('Content', ['class' => 'col-md-9'])->end()->with('Publishing', ['class' => 'col-md-3'])->end()->with('Routing', ['class' => 'col-md-3'])->add('path', 'text', ['required' => false])->end();
     $fieldMappings = $this->fieldManager->getEntityFieldMapping($this->getClass());
     $formMapper->with('Content');
     foreach ($fieldMappings as $field => $settings) {
         $fieldDefinition = $this->fieldManager->getFieldDefinition($settings['type']);
         $fieldWidgetDefinition = $this->fieldManager->getFieldWidgetDefinition($settings['widget']['type']);
         $constraints = $fieldDefinition->getConstraints($field, $settings['options']);
         // TODO: deprecate dynamic
         if ($settings['dynamic']) {
             $fieldWidgetDefinition->configureForm($formMapper, $fieldDefinition, $field, $settings['options'], $settings['widget']['type'], $settings['widget']['options']);
             $formMapper->getFormBuilder()->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $formEvent) use($fieldDefinition, $field, $settings) {
                 $data = $formEvent->getData();
                 if ($data instanceof Node) {
                     $value = $data->{"get{$field}"}();
                     if (!$value || !count($value) && $settings['options']['limit'] == 1) {
                         $fieldClass = $fieldDefinition->getEntityClass();
                         if ($fieldClass) {
                             $data->{"set{$field}"}(new $fieldClass());
                         }
                     }
                 }
             });
         } else {
             $fieldWidgetDefinition->configureForm($formMapper, $fieldDefinition, $field, $settings['options'], $settings['widget']['type'], $settings['widget']['options']);
             /** @var ClassMetadata $metadata */
             $metadata = $this->validator->getMetadataFactory()->getMetadataFor($this->getClass());
             foreach ($constraints as $constraintField => $constraint) {
                 $metadata->addPropertyConstraints($constraintField, $constraint);
             }
         }
     }
     $formMapper->end();
     $formMapper->end();
 }