Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 7  | 
      CRAP |         | 
      0.00%  | 
      0 / 104  | 
     
| FieldStorageConfigEditForm |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 7  | 
      420 |         | 
      0.00%  | 
      0 / 104  | 
     
| getEntityFromRouteMatch |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 6  | 
     |||
| buildForm |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 8  | 
     |||
| form |         | 
      0.00%  | 
      0 / 1  | 
      30 |         | 
      0.00%  | 
      0 / 59  | 
     |||
| actions |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| validateForm |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| buildEntity |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| save |         | 
      0.00%  | 
      0 / 1  | 
      20 |         | 
      0.00%  | 
      0 / 17  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\field_ui\Form\FieldStorageConfigEditForm. | |
| */ | |
| namespace Drupal\field_ui\Form; | |
| use Drupal\Core\Entity\EntityForm; | |
| use Drupal\Core\Field\FieldStorageDefinitionInterface; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\Core\Routing\RouteMatchInterface; | |
| use Drupal\field\Entity\FieldConfig; | |
| use Drupal\field_ui\FieldUI; | |
| use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | |
| /** | |
| * Provides a form for the "field storage" edit page. | |
| */ | |
| class FieldStorageConfigEditForm extends EntityForm { | |
| /** | |
| * The entity being used by this form. | |
| * | |
| * @var \Drupal\field\FieldStorageConfigInterface | |
| */ | |
| protected $entity; | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getEntityFromRouteMatch(RouteMatchInterface $route_match, $entity_type_id) { | |
| // The URL of this entity form contains only the ID of the field_config | |
| // but we are actually editing a field_storage_config entity. | |
| $field_config = FieldConfig::load($route_match->getRawParameter('field_config')); | |
| if (!$field_config) { | |
| throw new NotFoundHttpException(); | |
| } | |
| return $field_config->getFieldStorageDefinition(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| * | |
| * @param string $field_config | |
| * The ID of the field config whose field storage config is being edited. | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state, $field_config = NULL) { | |
| if ($field_config) { | |
| $field = FieldConfig::load($field_config); | |
| $form_state->set('field_config', $field); | |
| $form_state->set('entity_type_id', $field->getTargetEntityTypeId()); | |
| $form_state->set('bundle', $field->getTargetBundle()); | |
| } | |
| return parent::buildForm($form, $form_state); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function form(array $form, FormStateInterface $form_state) { | |
| $form = parent::form($form, $form_state); | |
| $field_label = $form_state->get('field_config')->label(); | |
| $form['#title'] = $field_label; | |
| $form['#prefix'] = '<p>' . $this->t('These settings apply to the %field field everywhere it is used. These settings impact the way that data is stored in the database and cannot be changed once data has been created.', array('%field' => $field_label)) . '</p>'; | |
| // See if data already exists for this field. | |
| // If so, prevent changes to the field settings. | |
| if ($this->entity->hasData()) { | |
| $form['#prefix'] = '<div class="messages messages--error">' . $this->t('There is data for this field in the database. The field settings can no longer be changed.') . '</div>' . $form['#prefix']; | |
| } | |
| // Add settings provided by the field module. The field module is | |
| // responsible for not returning settings that cannot be changed if | |
| // the field already has data. | |
| $form['settings'] = array( | |
| '#weight' => -10, | |
| '#tree' => TRUE, | |
| ); | |
| // Create an arbitrary entity object, so that we can have an instantiated | |
| // FieldItem. | |
| $ids = (object) array( | |
| 'entity_type' => $form_state->get('entity_type_id'), | |
| 'bundle' => $form_state->get('bundle'), | |
| 'entity_id' => NULL | |
| ); | |
| $entity = _field_create_entity_from_ids($ids); | |
| $items = $entity->get($this->entity->getName()); | |
| $item = $items->first() ?: $items->appendItem(); | |
| $form['settings'] += $item->storageSettingsForm($form, $form_state, $this->entity->hasData()); | |
| // Build the configurable field values. | |
| $cardinality = $this->entity->getCardinality(); | |
| $form['cardinality_container'] = array( | |
| // Reset #parents so the additional container does not appear. | |
| '#parents' => array(), | |
| '#type' => 'fieldset', | |
| '#title' => $this->t('Allowed number of values'), | |
| '#attributes' => array('class' => array( | |
| 'container-inline', | |
| 'fieldgroup', | |
| 'form-composite' | |
| )), | |
| ); | |
| $form['cardinality_container']['cardinality'] = array( | |
| '#type' => 'select', | |
| '#title' => $this->t('Allowed number of values'), | |
| '#title_display' => 'invisible', | |
| '#options' => array( | |
| 'number' => $this->t('Limited'), | |
| FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED => $this->t('Unlimited'), | |
| ), | |
| '#default_value' => ($cardinality == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) ? FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED : 'number', | |
| ); | |
| $form['cardinality_container']['cardinality_number'] = array( | |
| '#type' => 'number', | |
| '#default_value' => $cardinality != FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED ? $cardinality : 1, | |
| '#min' => 1, | |
| '#title' => $this->t('Limit'), | |
| '#title_display' => 'invisible', | |
| '#size' => 2, | |
| '#states' => array( | |
| 'visible' => array( | |
| ':input[name="cardinality"]' => array('value' => 'number'), | |
| ), | |
| 'disabled' => array( | |
| ':input[name="cardinality"]' => array('value' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED), | |
| ), | |
| ), | |
| ); | |
| return $form; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function actions(array $form, FormStateInterface $form_state) { | |
| $elements = parent::actions($form, $form_state); | |
| $elements['submit']['#value'] = $this->t('Save field settings'); | |
| return $elements; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateForm(array &$form, FormStateInterface $form_state) { | |
| parent::validateForm($form, $form_state); | |
| // Validate field cardinality. | |
| if ($form_state->getValue('cardinality') === 'number' && !$form_state->getValue('cardinality_number')) { | |
| $form_state->setErrorByName('cardinality_number', $this->t('Number of values is required.')); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildEntity(array $form, FormStateInterface $form_state) { | |
| // Save field cardinality. | |
| if ($form_state->getValue('cardinality') === 'number' && $form_state->getValue('cardinality_number')) { | |
| $form_state->setValue('cardinality', $form_state->getValue('cardinality_number')); | |
| } | |
| return parent::buildEntity($form, $form_state); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function save(array $form, FormStateInterface $form_state) { | |
| $field_label = $form_state->get('field_config')->label(); | |
| try { | |
| $this->entity->save(); | |
| drupal_set_message($this->t('Updated field %label field settings.', array('%label' => $field_label))); | |
| $request = $this->getRequest(); | |
| if (($destinations = $request->query->get('destinations')) && $next_destination = FieldUI::getNextDestination($destinations)) { | |
| $request->query->remove('destinations'); | |
| $form_state->setRedirectUrl($next_destination); | |
| } | |
| else { | |
| $form_state->setRedirectUrl(FieldUI::getOverviewRouteInfo($form_state->get('entity_type_id'), $form_state->get('bundle'))); | |
| } | |
| } | |
| catch (\Exception $e) { | |
| drupal_set_message($this->t('Attempt to update field %label failed: %message.', array('%label' => $field_label, '%message' => $e->getMessage())), 'error'); | |
| } | |
| } | |
| } |