/** * 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.'); }
/** * {@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())); }
/** * {@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.')); } }
/** * {@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; }