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 dd0cd78..6547f5b 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php @@ -137,6 +137,13 @@ protected function getDisplayModes() { } /** + * {@inheritdoc} + */ + protected function getDisplayType() { + return 'entity_display'; + } + + /** * {@inheritdoc */ protected function getTableHeader() { diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php index 42f5152..edd687a 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php @@ -150,8 +150,8 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $options = array(); $default = array(); $display_statuses = $this->getDisplayStatuses(); - foreach ($display_modes as $mode_name => $status) { - $options[$mode_name] = $display_modes[$mode_name]['label']; + foreach ($display_modes as $mode_name => $mode_info) { + $options[$mode_name] = $mode_info['label']; if (!empty($display_statuses[$mode_name])) { $default[] = $mode_name; } @@ -509,11 +509,11 @@ public function submitForm(array &$form, array &$form_state) { // Handle the 'display modes' checkboxes if present. if ($this->mode == 'default' && !empty($form_values['display_modes_custom'])) { $display_modes = $this->getDisplayModes(); - $display_mode_statuses = $this->getDisplayStatuses(); + $current_statuses = $this->getDisplayStatuses(); $statuses = array(); foreach ($form_values['display_modes_custom'] as $mode => $value) { - if (!empty($value) && empty($display_mode_statuses[$mode])) { + if (!empty($value) && empty($current_statuses[$mode])) { // If no display exists for the newly enabled view mode, initialize // it with those from the 'default' view mode, which were used so // far. @@ -529,7 +529,6 @@ public function submitForm(array &$form, array &$form_state) { $statuses[$mode] = !empty($value); } - // Save updated bundle settings. $this->saveDisplayStatuses($statuses); } @@ -679,6 +678,14 @@ protected function getPluginOptions($field_type) { abstract protected function getDisplayModes(); /** + * Returns the display entity type. + * + * @return string + * The name of the display entity type. + */ + abstract protected function getDisplayType(); + + /** * Returns the region to which a row in the display overview belongs. * * @param array $row @@ -709,22 +716,37 @@ protected function getExtraFieldVisibilityOptions() { } /** - * Returns form or view modes statuses for the bundle used by this form. + * Returns entity (form) displays for the current entity display type. * * @return array - * An array of form or view mode statuses. + * An array holding entity displays or entity form displays. */ - protected function getDisplayStatuses() { - $display_statuses = array(); - $display_entity_type = $this->getFormID() == 'field_ui_display_overview_form' ? 'entity_display' : 'entity_form_display'; + protected function getDisplays() { + $load_ids = array(); + $display_entity_type = $this->getDisplayType(); $entity_info = $this->entityManager->getDefinition($display_entity_type); $config_prefix = $entity_info['config_prefix']; $ids = config_get_storage_names_with_prefix($config_prefix . '.' . $this->entity_type . '.' . $this->bundle); foreach ($ids as $id) { - $display = entity_load($display_entity_type, str_replace($config_prefix . '.', '', $id)); - if ($display->get('mode') == 'default') { - continue; + $config_id = str_replace($config_prefix . '.', '', $id); + list(,, $display_mode) = explode('.', $config_id); + if ($display_mode != 'default') { + $load_ids[] = $config_id; } + } + return entity_load_multiple($display_entity_type, $load_ids); + } + + /** + * Returns form or view modes statuses for the bundle used by this form. + * + * @return array + * An array of form or view mode statuses. + */ + protected function getDisplayStatuses() { + $display_statuses = array(); + $displays = $this->getDisplays(); + foreach ($displays as $display) { $display_statuses[$display->get('mode')] = $display->status(); } return $display_statuses; @@ -733,20 +755,13 @@ protected function getDisplayStatuses() { /** * Saves the updated display mode statuses. * - * @param array $display_mode_statuses + * @param array $display_statuses * An array holding updated form or view mode statuses. */ - protected function saveDisplayStatuses($display_mode_statuses) { - $display_entity_type = $this->getFormID() == 'field_ui_display_overview_form' ? 'entity_display' : 'entity_form_display'; - $entity_info = $this->entityManager->getDefinition($display_entity_type); - $config_prefix = $entity_info['config_prefix']; - $ids = config_get_storage_names_with_prefix($config_prefix . '.' . $this->entity_type . '.' . $this->bundle); - foreach ($ids as $id) { - $display = entity_load($display_entity_type, str_replace($config_prefix . '.', '', $id)); - if ($display->get('mode') == 'default') { - continue; - } - $display->set('status', $display_mode_statuses[$display->get('mode')]); + protected function saveDisplayStatuses($display_statuses) { + $displays = $this->getDisplays(); + foreach ($displays as $display) { + $display->set('status', $display_statuses[$display->get('mode')]); $display->save(); } } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php index 1d3a781..bdbea8a 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php @@ -97,6 +97,13 @@ protected function getDisplayModes() { } /** + * {@inheritdoc} + */ + protected function getDisplayType() { + return 'entity_form_display'; + } + + /** * {@inheritdoc */ protected function getTableHeader() {