Esempio n. 1
0
 /**
  * Get the field group delete route for a given group.
  * @param \stdClass $group
  *
  * @return \Drupal\Core\Url
  *   A URL object.
  */
 public static function getDeleteRoute($group)
 {
     $entity_type_id = $group->entity_type;
     $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
     if ($entity_type->get('field_ui_base_route')) {
         $mode_route_name = '';
         $route_parameters = FieldUI::getRouteBundleParameter($entity_type, $group->bundle);
         $route_parameters['field_group_name'] = $group->group_name;
         // Get correct route name based on context and mode.
         if ($group->context == 'form') {
             $context_route_name = 'form_display';
             if ($group->mode != 'default') {
                 $mode_route_name = '.form_mode';
                 $route_parameters['form_mode_name'] = $group->mode;
             }
         } else {
             $context_route_name = 'display';
             if ($group->mode != 'default') {
                 $mode_route_name = '.view_mode';
                 $route_parameters['view_mode_name'] = $group->mode;
             }
         }
         return new Url('field_ui.field_group_delete_' . $entity_type_id . '.' . $context_route_name . $mode_route_name, $route_parameters);
     }
     throw new \InvalidArgumentException('The given group is not a valid.');
 }
Esempio n. 2
0
 /**
  * {@inheritdoc}
  */
 protected function actions(array $form, FormStateInterface $form_state)
 {
     $actions = parent::actions($form, $form_state);
     $actions['submit']['#value'] = $this->t('Save settings');
     if (!$this->entity->isNew()) {
         $target_entity_type = $this->entityManager->getDefinition($this->entity->getTargetEntityTypeId());
         $route_parameters = ['field_config' => $this->entity->id()] + FieldUI::getRouteBundleParameter($target_entity_type, $this->entity->bundle);
         $url = new Url('entity.field_config.' . $target_entity_type->id() . '_field_delete_form', $route_parameters);
         if ($this->getRequest()->query->has('destination')) {
             $query = $url->getOption('query');
             $query['destination'] = $this->getRequest()->query->get('destination');
             $url->setOption('query', $query);
         }
         $actions['delete'] = array('#type' => 'link', '#title' => $this->t('Delete'), '#url' => $url, '#access' => $this->entity->access('delete'), '#attributes' => array('class' => array('button', 'button--danger')));
     }
     return $actions;
 }
 /**
  * {@inheritdoc}
  */
 protected function getOverviewUrl($mode)
 {
     $entity_type = $this->entityManager->getDefinition($this->entity->getTargetEntityTypeId());
     return Url::fromRoute('entity.entity_view_display.' . $this->entity->getTargetEntityTypeId() . '.view_mode', ['view_mode_name' => $mode] + FieldUI::getRouteBundleParameter($entity_type, $this->entity->getTargetBundle()));
 }
Esempio n. 4
0
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     $error = FALSE;
     $values = $form_state->getValues();
     $destinations = array();
     $entity_type = $this->entityManager->getDefinition($this->entityTypeId);
     // Create new field.
     if ($values['new_storage_type']) {
         $field_storage_values = ['field_name' => $values['field_name'], 'entity_type' => $this->entityTypeId, 'type' => $values['new_storage_type'], 'translatable' => $values['translatable']];
         $field_values = ['field_name' => $values['field_name'], 'entity_type' => $this->entityTypeId, 'bundle' => $this->bundle, 'label' => $values['label'], 'translatable' => FALSE];
         $widget_id = $formatter_id = NULL;
         // Check if we're dealing with a preconfigured field.
         if (strpos($field_storage_values['type'], 'field_ui:') !== FALSE) {
             list(, $field_type, $option_key) = explode(':', $field_storage_values['type'], 3);
             $field_storage_values['type'] = $field_type;
             $field_type_class = $this->fieldTypePluginManager->getDefinition($field_type)['class'];
             $field_options = $field_type_class::getPreconfiguredOptions()[$option_key];
             // Merge in preconfigured field storage options.
             if (isset($field_options['field_storage_config'])) {
                 foreach (array('cardinality', 'settings') as $key) {
                     if (isset($field_options['field_storage_config'][$key])) {
                         $field_storage_values[$key] = $field_options['field_storage_config'][$key];
                     }
                 }
             }
             // Merge in preconfigured field options.
             if (isset($field_options['field_config'])) {
                 foreach (array('required', 'settings') as $key) {
                     if (isset($field_options['field_config'][$key])) {
                         $field_values[$key] = $field_options['field_config'][$key];
                     }
                 }
             }
             $widget_id = isset($field_options['entity_form_display']['type']) ? $field_options['entity_form_display']['type'] : NULL;
             $formatter_id = isset($field_options['entity_view_display']['type']) ? $field_options['entity_view_display']['type'] : NULL;
         }
         // Create the field storage and field.
         try {
             $this->entityManager->getStorage('field_storage_config')->create($field_storage_values)->save();
             $field = $this->entityManager->getStorage('field_config')->create($field_values);
             $field->save();
             $this->configureEntityFormDisplay($values['field_name'], $widget_id);
             $this->configureEntityViewDisplay($values['field_name'], $formatter_id);
             // Always show the field settings step, as the cardinality needs to be
             // configured for new fields.
             $route_parameters = array('field_config' => $field->id()) + FieldUI::getRouteBundleParameter($entity_type, $this->bundle);
             $destinations[] = array('route_name' => "entity.field_config.{$this->entityTypeId}_storage_edit_form", 'route_parameters' => $route_parameters);
             $destinations[] = array('route_name' => "entity.field_config.{$this->entityTypeId}_field_edit_form", 'route_parameters' => $route_parameters);
             $destinations[] = array('route_name' => "entity.{$this->entityTypeId}.field_ui_fields", 'route_parameters' => $route_parameters);
             // Store new field information for any additional submit handlers.
             $form_state->set(['fields_added', '_add_new_field'], $values['field_name']);
         } catch (\Exception $e) {
             $error = TRUE;
             drupal_set_message($this->t('There was a problem creating field %label: @message', array('%label' => $values['label'], '@message' => $e->getMessage())), 'error');
         }
     }
     // Re-use existing field.
     if ($values['existing_storage_name']) {
         $field_name = $values['existing_storage_name'];
         try {
             $field = $this->entityManager->getStorage('field_config')->create(array('field_name' => $field_name, 'entity_type' => $this->entityTypeId, 'bundle' => $this->bundle, 'label' => $values['existing_storage_label']));
             $field->save();
             $this->configureEntityFormDisplay($field_name);
             $this->configureEntityViewDisplay($field_name);
             $route_parameters = array('field_config' => $field->id()) + FieldUI::getRouteBundleParameter($entity_type, $this->bundle);
             $destinations[] = array('route_name' => "entity.field_config.{$this->entityTypeId}_field_edit_form", 'route_parameters' => $route_parameters);
             $destinations[] = array('route_name' => "entity.{$this->entityTypeId}.field_ui_fields", 'route_parameters' => $route_parameters);
             // Store new field information for any additional submit handlers.
             $form_state->set(['fields_added', '_add_existing_field'], $field_name);
         } catch (\Exception $e) {
             $error = TRUE;
             drupal_set_message($this->t('There was a problem creating field %label: @message', array('%label' => $values['label'], '@message' => $e->getMessage())), 'error');
         }
     }
     if ($destinations) {
         $destination = $this->getDestinationArray();
         $destinations[] = $destination['destination'];
         $form_state->setRedirectUrl(FieldUI::getNextDestination($destinations, $form_state));
     } elseif (!$error) {
         drupal_set_message($this->t('Your settings have been saved.'));
     }
 }
Esempio n. 5
0
 /**
  * {@inheritdoc}
  */
 public function buildRow(EntityInterface $field_config)
 {
     /** @var \Drupal\field\FieldConfigInterface $field_config */
     $field_storage = $field_config->getFieldStorageDefinition();
     $route_parameters = array('field_config' => $field_config->id()) + FieldUI::getRouteBundleParameter($this->entityManager->getDefinition($this->targetEntityTypeId), $this->targetBundle);
     $row = array('id' => Html::getClass($field_config->getName()), 'data' => array('label' => $field_config->getLabel(), 'field_name' => $field_config->getName(), 'field_type' => array('data' => array('#type' => 'link', '#title' => $this->fieldTypeManager->getDefinitions()[$field_storage->getType()]['label'], '#url' => Url::fromRoute("entity.field_config.{$this->targetEntityTypeId}_storage_edit_form", $route_parameters), '#options' => array('attributes' => array('title' => $this->t('Edit field settings.')))))));
     // Add the operations.
     $row['data'] = $row['data'] + parent::buildRow($field_config);
     if ($field_storage->isLocked()) {
         $row['data']['operations'] = array('data' => array('#markup' => $this->t('Locked')));
         $row['class'][] = 'menu-disabled';
     }
     return $row;
 }
 /**
  * Get the correct url to redirect to.
  */
 private function getRedirectUrl()
 {
     $entity_type = \Drupal::entityManager()->getDefinition($this->entityTypeId);
     if ($entity_type->get('field_ui_base_route')) {
         $context_route_name = "";
         $mode_route_name = "default";
         $route_parameters = FieldUI::getRouteBundleParameter($entity_type, $this->bundle);
         // Get correct route name based on context and mode.
         if ($this->context == 'form') {
             $context_route_name = 'entity_form_display';
             if ($this->mode != 'default') {
                 $mode_route_name = 'form_mode';
                 $route_parameters['form_mode_name'] = $this->mode;
             }
         } else {
             $context_route_name = 'entity_view_display';
             if ($this->mode != 'default') {
                 $mode_route_name = 'view_mode';
                 $route_parameters['view_mode_name'] = $this->mode;
             }
         }
         return new Url("entity.{$context_route_name}.{$this->entityTypeId}.{$mode_route_name}", $route_parameters);
     }
 }
  /**
   * Helper function.
   *
   * Display a link to bundle's view mode page if user has permission.
   *
   * @param string $entity_type
   *   The type of the entity.
   * @param string $bundle
   *   The bundle of the entity.
   * @param string $view_mode
   *   A view mode.
   *
   * @return string
   *   A link to the view mode of the bundle if user has access.
   *   The view mode otherwise.
   */
  public function displayViewModeLink($entity_type, $bundle, $view_mode = 'default') {
    $display = $view_mode;

    // Get entity type object from entity type name.
    $entity_type_object = $this->entityTypeManager->getDefinition($entity_type);

    // Prepare URL parameters.
    $parameters = array(
      'view_mode_name' => $view_mode,
    );
    $parameters += FieldUI::getRouteBundleParameter($entity_type_object, $bundle);

    // Route.
    if ($view_mode == 'default') {
      $route = "entity.entity_view_display.{$entity_type}.default";
    }
    else {
      $route = "entity.entity_view_display.{$entity_type}.view_mode";
    }

    $url = Url::fromRoute($route, $parameters);
    if ($url->renderAccess($url->toRenderArray())) {
      $display = Link::fromTextAndUrl($view_mode, $url);
    }

    return $display;
  }