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'); | |
} | |
} | |
} |