diff --git a/core/modules/field_ui/field_ui.admin.inc b/core/modules/field_ui/field_ui.admin.inc index e419063..4c6e464 100644 --- a/core/modules/field_ui/field_ui.admin.inc +++ b/core/modules/field_ui/field_ui.admin.inc @@ -58,27 +58,6 @@ function field_ui_fields_list() { } /** - * Displays a message listing the inactive fields of a given bundle. - */ -function field_ui_inactive_message($entity_type, $bundle) { - $inactive_instances = field_ui_inactive_instances($entity_type, $bundle); - if (!empty($inactive_instances)) { - $field_types = field_info_field_types(); - - foreach ($inactive_instances as $field_name => $instance) { - $field = field_info_field($instance['field_name']); - $list[] = t('%field (@field_name) field requires the %field_type field type provided by %field_type_module module', array( - '%field' => $instance['label'], - '@field_name' => $instance['field_name'], - '%field_type' => isset($field_types[$field['type']]) ? $field_types[$field['type']]['label'] : $field['type'], - '%field_type_module' => $field['module'], - )); - } - drupal_set_message(t('Inactive fields are not shown unless their providing modules are enabled. The following fields are not enabled: !list', array('!list' => theme('item_list', array('items' => $list)))), 'error'); - } -} - -/** * Determines the rendering order of an array representing a tree. * * Callback for array_reduce() within field_ui_table_pre_render(). @@ -96,40 +75,6 @@ function _field_ui_reduce_order($array, $a) { } /** - * Returns the region to which a row in the 'Manage fields' screen belongs. - * - * This function is used as a #region_callback in - * Drupal\field_ui\DisplayOverview::form(). It is called during - * field_ui_table_pre_render(). - */ -function field_ui_field_overview_row_region($row) { - switch ($row['#row_type']) { - case 'field': - case 'extra_field': - return 'content'; - case 'add_new_field': - // If no input in 'label', assume the row has not been dragged out of the - // 'add new' section. - return (!empty($row['label']['#value']) ? 'content' : 'hidden'); - } -} - -/** - * Returns the region to which a row in the 'Manage display' screen belongs. - * - * This function is used as a #region_callback in - * Drupal\field_ui\FieldOverview::form(), and is called during - * field_ui_table_pre_render(). - */ -function field_ui_display_overview_row_region($row) { - switch ($row['#row_type']) { - case 'field': - case 'extra_field': - return ($row['format']['type']['#value'] == 'hidden' ? 'hidden' : 'content'); - } -} - -/** * Render API callback: Performs pre-render tasks on field_ui_table elements. * * This function is assigned as a #pre_render callback in @@ -162,8 +107,7 @@ function field_ui_table_pre_render($elements) { unset($list[$name]); // Determine the region for the row. - $function = $row['#region_callback']; - $region_name = $function($row); + $region_name = call_user_func($row['#region_callback'], $row); // Add the element in the tree. $target = &$trees[$region_name]['']; @@ -431,30 +375,3 @@ function field_ui_existing_field_options($entity_type, $bundle) { } return $info; } - -/** - * Extracts next redirect path from an array of multiple destinations. - * - * @see field_ui_next_destination() - */ -function field_ui_get_destinations($destinations) { - $path = array_shift($destinations); - $options = drupal_parse_url($path); - if ($destinations) { - $options['query']['destinations'] = $destinations; - } - return array($options['path'], $options); -} - -/** - * Returns the next redirect path in a multipage sequence. - */ -function field_ui_next_destination($entity_type, $bundle) { - $destinations = !empty($_REQUEST['destinations']) ? $_REQUEST['destinations'] : array(); - if (!empty($destinations)) { - unset($_REQUEST['destinations']); - return field_ui_get_destinations($destinations); - } - $admin_path = Drupal::entityManager()->getAdminPath($entity_type, $bundle); - return $admin_path . '/fields'; -} diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php index cf4f6de..8eda507 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php @@ -107,7 +107,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $table[$name] = array( '#attributes' => array('class' => array('draggable', 'tabledrag-leaf')), '#row_type' => 'field', - '#region_callback' => 'field_ui_display_overview_row_region', + '#region_callback' => array($this, 'getRowRegion'), '#js_settings' => array( 'rowHandler' => 'field', 'defaultFormatter' => $field_types[$field['type']]['default_formatter'], @@ -294,7 +294,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $table[$name] = array( '#attributes' => array('class' => array('draggable', 'tabledrag-leaf')), '#row_type' => 'extra_field', - '#region_callback' => 'field_ui_display_overview_row_region', + '#region_callback' => array($this, 'getRowRegion'), '#js_settings' => array('rowHandler' => 'field'), 'human_name' => array( '#markup' => check_plain($extra_field['label']), @@ -576,4 +576,16 @@ public function multistepAjax($form, &$form_state) { // Return the whole table. return $form['fields']; } + + /** + * {@inheritdoc} + */ + public function getRowRegion($row) { + switch ($row['#row_type']) { + case 'field': + case 'extra_field': + return ($row['format']['type']['#value'] == 'hidden' ? 'hidden' : 'content'); + } + } + } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php index f02e2eb..20e17f4 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php @@ -91,7 +91,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $table[$name] = array( '#attributes' => array('class' => array('draggable', 'tabledrag-leaf')), '#row_type' => 'field', - '#region_callback' => 'field_ui_field_overview_row_region', + '#region_callback' => array($this, 'getRowRegion'), 'label' => array( '#markup' => check_plain($instance['label']), ), @@ -163,7 +163,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $table[$name] = array( '#attributes' => array('class' => array('draggable', 'tabledrag-leaf')), '#row_type' => 'extra_field', - '#region_callback' => 'field_ui_field_overview_row_region', + '#region_callback' => array($this, 'getRowRegion'), 'label' => array( '#markup' => check_plain($extra_field['label']), ), @@ -213,7 +213,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $table[$name] = array( '#attributes' => array('class' => array('draggable', 'tabledrag-leaf', 'add-new')), '#row_type' => 'add_new_field', - '#region_callback' => 'field_ui_field_overview_row_region', + '#region_callback' => array($this, 'getRowRegion'), 'label' => array( '#type' => 'textfield', '#title' => t('New field label'), @@ -317,7 +317,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $table[$name] = array( '#attributes' => array('class' => array('draggable', 'tabledrag-leaf', 'add-new')), '#row_type' => 'add_new_field', - '#region_callback' => 'field_ui_field_overview_row_region', + '#region_callback' => array($this, 'getRowRegion'), 'label' => array( '#type' => 'textfield', '#title' => t('Existing field label'), @@ -631,10 +631,29 @@ public function submitForm(array &$form, array &$form_state) { $destination = drupal_get_destination(); $destinations[] = $destination['destination']; unset($_GET['destination']); - $form_state['redirect'] = field_ui_get_destinations($destinations); + $path = array_shift($destinations); + $options = drupal_parse_url($path); + $options['query']['destinations'] = $destinations; + $form_state['redirect'] = array($options['path'], $options); } else { drupal_set_message(t('Your settings have been saved.')); } } + + /** + * {@inheritdoc} + */ + public function getRowRegion($row) { + switch ($row['#row_type']) { + case 'field': + case 'extra_field': + return 'content'; + case 'add_new_field': + // If no input in 'label', assume the row has not been dragged out of the + // 'add new' section. + return (!empty($row['label']['#value']) ? 'content' : 'hidden'); + } + } + } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldDeleteForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldDeleteForm.php index ec13c50..a35be7f 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldDeleteForm.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldDeleteForm.php @@ -107,7 +107,7 @@ public function submitForm(array &$form, array &$form_state) { } $admin_path = $this->entityManager->getAdminPath($this->instance->entity_type, $this->instance->bundle); - $form_state['redirect'] = field_ui_get_destinations(array($admin_path . '/fields')); + $form_state['redirect'] = "$admin_path/fields"; // Fields are purged on cron. However field module prevents disabling modules // when field types they provided are used in a field until it is fully diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php index 8e8d890..bc2d5ab 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php @@ -7,19 +7,18 @@ namespace Drupal\field_ui\Form; -use Drupal\Core\Form\FormInterface; -use Drupal\field\Plugin\Core\Entity\FieldInstance; +use Drupal\field\FieldInstanceInterface; use Drupal\field\Field; /** * Provides a form for the field settings edit page. */ -class FieldEditForm implements FormInterface { +class FieldEditForm extends FieldInstanceFormBase { /** * The field instance being edited. * - * @var \Drupal\field\Plugin\Core\Entity\FieldInstance + * @var \Drupal\field\FieldInstanceInterface */ protected $instance; @@ -33,8 +32,9 @@ public function getFormID() { /** * {@inheritdoc} */ - public function buildForm(array $form, array &$form_state, FieldInstance $field_instance = NULL) { - $this->instance = $form_state['instance'] = $field_instance; + public function buildForm(array $form, array &$form_state, FieldInstanceInterface $field_instance = NULL) { + parent::buildForm($form, $form_state, $field_instance); + $field = $this->instance->getField(); $form['#field'] = $field; @@ -128,7 +128,6 @@ public function validateForm(array &$form, array &$form_state) { * {@inheritdoc} */ public function submitForm(array &$form, array &$form_state) { - form_load_include($form_state, 'inc', 'field_ui', 'field_ui.admin'); $form_values = $form_state['values']; $field_values = $form_values['field']; @@ -152,7 +151,7 @@ public function submitForm(array &$form, array &$form_state) { try { $field->save(); drupal_set_message(t('Updated field %label field settings.', array('%label' => $this->instance->label()))); - $form_state['redirect'] = field_ui_next_destination($this->instance->entity_type, $this->instance->bundle); + $form_state['redirect'] = $this->getNextDestination(); } catch (Exception $e) { drupal_set_message(t('Attempt to update field %label failed: %message.', array('%label' => $this->instance->label(), '%message' => $e->getMessage())), 'error'); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php index 4803701..d8cc38f 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php @@ -7,49 +7,12 @@ namespace Drupal\field_ui\Form; -use Drupal\Core\Form\FormInterface; -use Drupal\Core\ControllerInterface; -use Drupal\field\Plugin\Core\Entity\FieldInstance; -use Drupal\field\Plugin\Type\Widget\WidgetPluginManager; -use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\field\FieldInstanceInterface; /** * Provides a form for the field instance settings form. */ -class FieldInstanceEditForm implements FormInterface, ControllerInterface { - - /** - * The field instance being edited. - * - * @var \Drupal\field\Plugin\Core\Entity\FieldInstance - */ - protected $instance; - - /** - * The field widget plugin manager. - * - * @var \Drupal\field\Plugin\Type\Widget\WidgetPluginManager - */ - protected $widgetManager; - - /** - * Constructs a new FieldInstanceEditForm object. - * - * @param \Drupal\field\Plugin\Type\Widget\WidgetPluginManager $widget_manager - * The field widget plugin manager. - */ - public function __construct(WidgetPluginManager $widget_manager) { - $this->widgetManager = $widget_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('plugin.manager.field.widget') - ); - } +class FieldInstanceEditForm extends FieldInstanceFormBase { /** * {@inheritdoc} @@ -61,8 +24,8 @@ public function getFormID() { /** * {@inheritdoc} */ - public function buildForm(array $form, array &$form_state, FieldInstance $field_instance = NULL) { - $this->instance = $form_state['instance'] = $field_instance; + public function buildForm(array $form, array &$form_state, FieldInstanceInterface $field_instance = NULL) { + parent::buildForm($form, $form_state, $field_instance); $bundle = $this->instance['bundle']; $entity_type = $this->instance['entity_type']; @@ -216,7 +179,6 @@ public function validateForm(array &$form, array &$form_state) { * {@inheritdoc} */ public function submitForm(array &$form, array &$form_state) { - form_load_include($form_state, 'inc', 'field_ui', 'field_ui.admin'); $field = $form['#field']; $entity = $form['#entity']; @@ -243,7 +205,7 @@ public function submitForm(array &$form, array &$form_state) { drupal_set_message(t('Field %label is required and uses the "hidden" widget. You might want to configure a default value.', array('%label' => $this->instance['label'])), 'warning'); } - $form_state['redirect'] = field_ui_next_destination($this->instance['entity_type'], $this->instance['bundle']); + $form_state['redirect'] = $this->getNextDestination(); } /** diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php new file mode 100644 index 0000000..a967781 --- /dev/null +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceFormBase.php @@ -0,0 +1,92 @@ +entityManager = $entity_manager; + $this->widgetManager = $widget_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('plugin.manager.entity'), + $container->get('plugin.manager.field.widget') + ); + } + + /** + * {@inheritdoc} + */ + public function buildForm(array $form, array &$form_state, FieldInstanceInterface $field_instance = NULL) { + $this->instance = $form_state['instance'] = $field_instance; + form_load_include($form_state, 'inc', 'field_ui', 'field_ui.admin'); + } + + /** + * Returns the next redirect path in a multipage sequence. + * + * @return string|array + * Either the next path, or an array of redirect paths. + */ + protected function getNextDestination() { + $destinations = !empty($_REQUEST['destinations']) ? $_REQUEST['destinations'] : array(); + if (!empty($destinations)) { + unset($_REQUEST['destinations']); + $path = array_shift($destinations); + $options = drupal_parse_url($path); + if ($destinations) { + $options['query']['destinations'] = $destinations; + } + return array($options['path'], $options); + } + $admin_path = $this->entityManager->getAdminPath($this->instance->entity_type, $this->instance->bundle); + return $admin_path . '/fields'; + } + +} diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldWidgetTypeForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldWidgetTypeForm.php index b28083a..a318c74 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldWidgetTypeForm.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldWidgetTypeForm.php @@ -7,49 +7,12 @@ namespace Drupal\field_ui\Form; -use Drupal\Core\Form\FormInterface; -use Drupal\Core\ControllerInterface; -use Drupal\field\Plugin\Core\Entity\FieldInstance; -use Drupal\field\Plugin\Type\Widget\WidgetPluginManager; -use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\field\FieldInstanceInterface; /** * Provides a form for the widget selection form. */ -class FieldWidgetTypeForm implements FormInterface, ControllerInterface { - - /** - * The field instance being edited. - * - * @var \Drupal\field\Plugin\Core\Entity\FieldInstance - */ - protected $instance; - - /** - * The field widget plugin manager. - * - * @var \Drupal\field\Plugin\Type\Widget\WidgetPluginManager - */ - protected $widgetManager; - - /** - * Constructs a new FieldWidgetTypeForm object. - * - * @param \Drupal\field\Plugin\Type\Widget\WidgetPluginManager $widget_manager - * The field widget plugin manager. - */ - public function __construct(WidgetPluginManager $widget_manager) { - $this->widgetManager = $widget_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('plugin.manager.field.widget') - ); - } +class FieldWidgetTypeForm extends FieldInstanceFormBase { /** * {@inheritdoc} @@ -61,9 +24,9 @@ public function getFormID() { /** * {@inheritdoc} */ - public function buildForm(array $form, array &$form_state, FieldInstance $field_instance = NULL) { - $this->instance = $form_state['instance'] = $field_instance; - form_load_include($form_state, 'inc', 'field_ui', 'field_ui.admin'); + public function buildForm(array $form, array &$form_state, FieldInstanceInterface $field_instance = NULL) { + parent::buildForm($form, $form_state, $field_instance); + drupal_set_title($this->instance['label']); $bundle = $this->instance['bundle']; @@ -132,7 +95,7 @@ public function submitForm(array &$form, array &$form_state) { drupal_set_message(t('There was a problem changing the widget for field %label.', array('%label' => $instance['label'])), 'error'); } - $form_state['redirect'] = field_ui_next_destination($entity_type, $bundle); + $form_state['redirect'] = $this->getNextDestination(); } } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php index a8cd891..e576d5d 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php @@ -130,4 +130,13 @@ public function getRegionOptions() { return $options; } + /** + * Returns the region to which a row in the overview screen belongs. + * + * This function is to be used as a #region_callback in + * \Drupal\field_ui\Form\OverviewBase::form(), and is called during + * field_ui_table_pre_render(). + */ + abstract public function getRowRegion($row); + }