diff --git a/core/includes/entity.inc b/core/includes/entity.inc index e8a0e95..cb4bfb7 100644 --- a/core/includes/entity.inc +++ b/core/includes/entity.inc @@ -717,6 +717,7 @@ function entity_get_display($entity_type, $bundle, $view_mode) { 'targetEntityType' => $entity_type, 'bundle' => $bundle, 'mode' => $view_mode, + 'status' => TRUE, )); } @@ -750,12 +751,20 @@ function entity_get_display($entity_type, $bundle, $view_mode) { function entity_get_render_display(EntityInterface $entity, $view_mode) { $entity_type = $entity->entityType(); $bundle = $entity->bundle(); - - // Determine the display to use for rendering this entity. Depending on the - // configuration of the view mode for this bundle, this will be either the - // display associated to the view mode, or the 'default' display. - $view_mode_settings = field_view_mode_settings($entity_type, $bundle); - $render_view_mode = !empty($view_mode_settings[$view_mode]['status']) ? $view_mode : 'default'; + $render_view_mode = 'default'; + + // Look at the default display and display for the view mode, and fallback to + // the former if the latter does not exist is disabled. + if ($view_mode != 'default') { + $ids = array( + 'entity.display.' . $entity->entityType() . '.' . $entity->bundle() . '.default', + 'entity.display.' . $entity->entityType() . '.' . $entity->bundle() . '.' . $view_mode, + ); + $entity_displays = \Drupal::service('config.storage')->readMultiple($ids); + if (isset($entity_displays[$ids[1]]) && $entity_displays[$ids[1]]->status()) { + $render_view_mode = $view_mode; + } + } $display = entity_get_display($entity_type, $bundle, $render_view_mode); $display->originalMode = $view_mode; @@ -812,6 +821,7 @@ function entity_get_form_display($entity_type, $bundle, $form_mode) { 'targetEntityType' => $entity_type, 'bundle' => $bundle, 'mode' => $form_mode, + 'status' => TRUE, )); } @@ -841,12 +851,20 @@ function entity_get_form_display($entity_type, $bundle, $form_mode) { function entity_get_render_form_display(EntityInterface $entity, $form_mode) { $entity_type = $entity->entityType(); $bundle = $entity->bundle(); - - // Determine the form display to use for rendering this entity form. Depending - // on the configuration of the form mode for this bundle, this will be either - // the form display associated to the form mode, or the 'default' display. - $form_mode_settings = field_form_mode_settings($entity_type, $bundle); - $render_form_mode = !empty($form_mode_settings[$form_mode]['status']) ? $form_mode : 'default'; + $render_form_mode = 'default'; + + // Look at the default form display and form display for the view mode, and + // fallback to the former if the latter does not exist is disabled. + if ($form_mode != 'default') { + $ids = array( + 'default' => 'entity.form_display.' . $entity->entityType() . '.' . $entity->bundle() . '.default', + $form_mode => 'entity.form_display.' . $entity->entityType() . '.' . $entity->bundle() . '.' . $form_mode, + ); + $entity_form_displays = \Drupal::service('config.storage')->readMultiple($ids); + if ($form_display = $entity_form_displays[$ids[$form_mode]] && $form_display['status']) { + $render_form_mode = $form_mode; + } + } $form_display = entity_get_form_display($entity_type, $bundle, $render_form_mode); $form_display->originalMode = $form_mode; diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php index 552813b..d59ace3 100644 --- a/core/lib/Drupal/Core/Entity/EntityFormController.php +++ b/core/lib/Drupal/Core/Entity/EntityFormController.php @@ -186,12 +186,16 @@ public function processForm($element, $form_state, $form) { } } - // Hide extra fields. + // Hide or assign weights for extra fields. $extra_fields = field_info_extra_fields($this->entity->entityType(), $this->entity->bundle(), 'form'); foreach ($extra_fields as $extra_field => $info) { - if (!$this->getFormDisplay($form_state)->getComponent($extra_field)) { + $component = $this->getFormDisplay($form_state)->getComponent($extra_field); + if (!$component) { $element[$extra_field]['#access'] = FALSE; } + else { + $element[$extra_field]['#weight'] = $component['weight']; + } } return $element; diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php index 8256889..0b6f2b1 100644 --- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php +++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php @@ -46,9 +46,7 @@ public function form(array $form, array &$form_state) { $form += $form_state['comment_preview']; } - $form['author'] = array( - '#weight' => 10, - ); + $form['author'] = array(); // Display author information in a details element for comment moderators. if ($is_admin) { $form['author'] += array( diff --git a/core/modules/entity/entity.install b/core/modules/entity/entity.install index 95d485b..d3010bb 100644 --- a/core/modules/entity/entity.install +++ b/core/modules/entity/entity.install @@ -39,6 +39,7 @@ function _update_8000_entity_get_display($entity_type, $bundle, $view_mode) { 'bundle' => $bundle, 'mode' => $view_mode, 'content' => array(), + 'status' => TRUE, ); foreach ($properties as $key => $value) { $config->set($key, $value); @@ -78,6 +79,7 @@ function _update_8000_entity_get_form_display($entity_type, $bundle, $form_mode) 'bundle' => $bundle, 'mode' => $form_mode, 'content' => array(), + 'status' => TRUE, ); foreach ($properties as $key => $value) { $config->set($key, $value); diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityDisplay.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityDisplay.php index 29bf629..8b59366 100644 --- a/core/modules/entity/lib/Drupal/entity/Entity/EntityDisplay.php +++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityDisplay.php @@ -26,7 +26,8 @@ * config_prefix = "entity.display", * entity_keys = { * "id" = "id", - * "uuid" = "uuid" + * "uuid" = "uuid", + * "status" = "status" * } * ) */ diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php index 6b01510..1e04cfb 100644 --- a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php +++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php @@ -26,7 +26,8 @@ * config_prefix = "entity.form_display", * entity_keys = { * "id" = "id", - * "uuid" = "uuid" + * "uuid" = "uuid", + * "status" = "status" * } * ) */ diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php index ac13757..76d41d2 100644 --- a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php +++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php @@ -47,7 +47,8 @@ * entity_keys = { * "id" = "id", * "label" = "label", - * "uuid" = "uuid" + * "uuid" = "uuid", + * "status" = "status" * }, * links = { * "edit-form" = "admin/structure/display-modes/form/manage/{form_mode}" diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php index c46ef60..4c27ff9 100644 --- a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php +++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php @@ -48,7 +48,8 @@ * entity_keys = { * "id" = "id", * "label" = "label", - * "uuid" = "uuid" + * "uuid" = "uuid", + * "status" = "status" * }, * links = { * "edit-form" = "admin/structure/display-modes/view/manage/{view_mode}" diff --git a/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php b/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php index eabce25..eab0b66 100644 --- a/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php +++ b/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php @@ -51,6 +51,14 @@ public $mode; /** + * Whether this display is enabled or not. If the entity (form) display + * is disabled, we'll fall back to the 'default' display. + * + * @var boolean + */ + public $status; + + /** * List of component display options, keyed by component name. * * @var array @@ -143,6 +151,7 @@ public function getExportProperties() { 'bundle', 'mode', 'content', + 'status', ); $properties = array(); foreach ($names as $name) { diff --git a/core/modules/field/field.install b/core/modules/field/field.install index 5f70ee1..0f21a25 100644 --- a/core/modules/field/field.install +++ b/core/modules/field/field.install @@ -241,16 +241,16 @@ function field_update_8002() { ->execute(); } - // Migration of 'extra_fields' display settings. Avoid calling - // entity_get_info() by fetching the relevant variables directly in the - // variable table. + // Migration of the content of the old 'bundle_settings_*'' variables. + // Avoid calling entity_get_info() by fetching the relevant variables + // directly in the variable table. $variables = array_map('unserialize', db_query("SELECT name, value FROM {variable} WHERE name LIKE '%field_bundle_settings_%'")->fetchAllKeyed()); foreach ($variables as $variable_name => $variable_value) { if (preg_match('/field_bundle_settings_(.*)__(.*)/', $variable_name, $matches)) { - $variable_needs_update = FALSE; $entity_type = $matches[1]; $bundle = $matches[2]; + // Migrate form settings for extra fields. if (isset($variable_value['extra_fields']['form'])) { foreach ($variable_value['extra_fields']['form'] as $field_name => $field_settings) { // Determine name and create initial entry in the $form_displays @@ -261,12 +261,9 @@ function field_update_8002() { } $form_displays[$form_display_id]->set("content.$field_name", $field_settings); } - - // Remove the old entry. - unset($variable_value['extra_fields']['form']); - $variable_needs_update = TRUE; } + // Migrate display settings for extra fields. if (isset($variable_value['extra_fields']['display'])) { foreach ($variable_value['extra_fields']['display'] as $field_name => $field_settings) { foreach ($field_settings as $view_mode => $display_options) { @@ -287,15 +284,22 @@ function field_update_8002() { $displays[$display_id]->set("content.$field_name", $new_options); } } - - // Remove the old entry. - unset($variable_value['extra_fields']['display']); - $variable_needs_update = TRUE; } - if ($variable_needs_update) { - variable_set($variable_name, $variable_value); + // Migrate view mode settings. + if (isset($variable_value['view_modes'])) { + foreach ($variable_value['view_modes'] as $view_mode => $view_mode_settings) { + // Determine name and create initial entry in the $displays array + // if it does not exist yet. + if (!isset($displays[$display_id])) { + $displays[$display_id] = _update_8000_entity_get_display($entity_type, $bundle, $view_mode); + } + $displays[$display_id]->setStatus($view_mode_settings['custom_settings']); + } } + + // Remove the variable. + update_variable_del($variable_name); } } diff --git a/core/modules/field/field.module b/core/modules/field/field.module index 681fc63..01c9181 100644 --- a/core/modules/field/field.module +++ b/core/modules/field/field.module @@ -295,11 +295,6 @@ function field_entity_bundle_rename($entity_type, $bundle_old, $bundle_new) { // Clear the field cache. field_cache_clear(); - - // Update bundle settings. - $settings = variable_get('field_bundle_settings_' . $entity_type . '__' . $bundle_old, array()); - variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle_new, $settings); - variable_del('field_bundle_settings_' . $entity_type . '__' . $bundle_old); } /** @@ -323,9 +318,6 @@ function field_entity_bundle_delete($entity_type, $bundle) { // Clear the cache. field_cache_clear(); - - // Clear bundle display settings. - variable_del('field_bundle_settings_' . $entity_type . '__' . $bundle); } /** @@ -409,124 +401,6 @@ function field_sync_field_status() { } /** - * Gets or sets administratively defined bundle settings. - * - * @param string $entity_type - * The type of $entity; e.g., 'node' or 'user'. - * @param string $bundle - * The bundle name. - * @param array|null $settings - * (optional) The settings to store, an associative array with the following - * elements: - * - view_modes: An associative array keyed by view mode, with the following - * key/value pairs: - * - status: Boolean specifying whether the view mode uses a dedicated set - * of display options (TRUE), or the 'default' options (FALSE). Defaults - * to FALSE. - * - extra_fields: An associative array containing the form and display - * settings for extra fields (also known as pseudo-fields): - * - form: An associative array whose keys are the names of extra fields, - * and whose values are associative arrays with the following elements: - * - weight: The weight of the extra field, determining its position on an - * entity form. - * - display: An associative array whose keys are the names of extra fields, - * and whose values are associative arrays keyed by the name of view - * modes. This array must include an item for the 'default' view mode. - * Each view mode sub-array contains the following elements: - * - weight: The weight of the extra field, determining its position when - * an entity is viewed. - * - visible: TRUE if the extra field is visible, FALSE otherwise. - * - * @return array|null - * If no $settings are passed, the current settings are returned. - */ -function field_bundle_settings($entity_type, $bundle, $settings = NULL) { - if (isset($settings)) { - variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle, $settings); - field_info_cache_clear(); - } - else { - $settings = variable_get('field_bundle_settings_' . $entity_type . '__' . $bundle, array()); - $settings += array( - 'view_modes' => array(), - 'form_modes' => array(), - ); - - return $settings; - } -} - -/** - * Returns form mode settings in a given bundle. - * - * @param string $entity_type - * The type of entity; e.g. 'node' or 'user'. - * @param string $bundle - * The bundle name to return form mode settings for. - * - * @return - * An array keyed by form mode, with the following key/value pairs: - * - status: Boolean specifying whether the form mode uses a dedicated set of - * display options (TRUE), or the 'default' options (FALSE). Defaults to - * FALSE. - */ -function field_form_mode_settings($entity_type, $bundle) { - $cache = &drupal_static(__FUNCTION__, array()); - - if (!isset($cache[$entity_type][$bundle])) { - $bundle_settings = field_bundle_settings($entity_type, $bundle); - $settings = $bundle_settings['form_modes']; - // Include form modes for which nothing has been stored yet, but whose - // definition in hook_entity_info_alter() specify they should use custom - // settings by default. - $form_modes = entity_get_form_modes($entity_type); - foreach ($form_modes as $form_mode => $form_mode_info) { - if (!isset($settings[$form_mode]['status']) && $form_mode_info['status']) { - $settings[$form_mode]['status'] = TRUE; - } - } - $cache[$entity_type][$bundle] = $settings; - } - - return $cache[$entity_type][$bundle]; -} - -/** - * Returns view mode settings in a given bundle. - * - * @param $entity_type - * The type of entity; e.g. 'node' or 'user'. - * @param $bundle - * The bundle name to return view mode settings for. - * - * @return - * An array keyed by view mode, with the following key/value pairs: - * - status: Boolean specifying whether the view mode uses a dedicated set of - * display options (TRUE), or the 'default' options (FALSE). Defaults to - * FALSE. - */ -function field_view_mode_settings($entity_type, $bundle) { - $cache = &drupal_static(__FUNCTION__, array()); - - if (!isset($cache[$entity_type][$bundle])) { - $bundle_settings = field_bundle_settings($entity_type, $bundle); - $settings = $bundle_settings['view_modes']; - // Include view modes for which nothing has been stored yet, but whose - // definition in hook_entity_info_alter() specify they should use custom - // settings by default. - $view_modes = entity_get_view_modes($entity_type); - foreach ($view_modes as $view_mode => $view_mode_info) { - if (!isset($settings[$view_mode]['status']) && $view_mode_info['status']) { - $settings[$view_mode]['status'] = TRUE; - } - } - $cache[$entity_type][$bundle] = $settings; - } - - return $cache[$entity_type][$bundle]; -} - -/** * Clears the field info and field data caches. */ function field_cache_clear() { diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php index 8d6bc3a..e6411c3 100644 --- a/core/modules/field/lib/Drupal/field/FieldInfo.php +++ b/core/modules/field/lib/Drupal/field/FieldInfo.php @@ -545,13 +545,10 @@ public function getBundleExtraFields($entity_type, $bundle) { // Cache miss: read from hook_field_extra_fields(). Note: given the current // shape of the hook, we have no other way than collecting extra fields on // all bundles. - $info = array(); $extra = $this->moduleHandler->invokeAll('field_extra_fields'); drupal_alter('field_extra_fields', $extra); - // Merge in saved settings. - if (isset($extra[$entity_type][$bundle])) { - $info = $this->prepareExtraFields($extra[$entity_type][$bundle], $entity_type, $bundle); - } + $info = isset($extra[$entity_type][$bundle]) ? $extra[$entity_type][$bundle] : array(); + $info += array('form' => array(), 'display' => array()); // Store in the 'static' and persistent caches. $this->bundleExtraFields[$entity_type][$bundle] = $info; @@ -599,38 +596,4 @@ public function prepareInstance($instance, $field_type) { return $instance; } - /** - * Prepares 'extra fields' for the current run-time context. - * - * @param $extra_fields - * The array of extra fields, as collected in hook_field_extra_fields(). - * @param $entity_type - * The entity type. - * @param $bundle - * The bundle name. - * - * @return - * The list of extra fields completed for the current runtime context. - */ - public function prepareExtraFields($extra_fields, $entity_type, $bundle) { - $entity_type_info = entity_get_info($entity_type); - $bundle_settings = field_bundle_settings($entity_type, $bundle); - $extra_fields += array('form' => array(), 'display' => array()); - - $result = array(); - // Extra fields in forms. - foreach ($extra_fields['form'] as $name => $field_data) { - $settings = isset($bundle_settings['extra_fields']['form'][$name]) ? $bundle_settings['extra_fields']['form'][$name] : array(); - if (isset($settings['weight'])) { - $field_data['weight'] = $settings['weight']; - } - $result['form'][$name] = $field_data; - } - - // Extra fields in displayed entities. - $result['display'] = $extra_fields['display']; - - return $result; - } - } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php b/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php index 928b12f..5a9a2be 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php @@ -31,8 +31,16 @@ public function access(Route $route, Request $request) { $bundle = $request->attributes->get('bundle'); $form_mode = $request->attributes->get('mode'); - $form_mode_settings = field_form_mode_settings($entity_type, $bundle); - $visibility = ($form_mode == 'default') || !empty($form_mode_settings[$form_mode]['status']); + if ($form_mode == 'default') { + $visibility = TRUE; + } + elseif ($entity_form_display = entity_load('entity_form_display', $entity_type . '.' . $bundle . '.' . $form_mode)) { + $visibility = $entity_form_display->status(); + } + else { + $visibility = FALSE; + } + if ($visibility) { $permission = $route->getRequirement('_field_ui_form_mode_access'); return user_access($permission) ? static::ALLOW : static::DENY; diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php b/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php index a431da2..f841d60 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php @@ -31,8 +31,16 @@ public function access(Route $route, Request $request) { $bundle = $request->attributes->get('bundle'); $view_mode = $request->attributes->get('mode'); - $view_mode_settings = field_view_mode_settings($entity_type, $bundle); - $visibility = ($view_mode == 'default') || !empty($view_mode_settings[$view_mode]['status']); + if ($view_mode == 'default') { + $visibility = TRUE; + } + elseif ($entity_display = entity_load('entity_display', $entity_type . '.' . $bundle . '.' . $view_mode)) { + $visibility = $entity_display->status(); + } + else { + $visibility = FALSE; + } + if ($visibility) { $permission = $route->getRequirement('_field_ui_view_mode_access'); return user_access($permission) ? static::ALLOW : static::DENY; 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 dfc6a13..dd0cd78 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php @@ -137,22 +137,6 @@ protected function getDisplayModes() { } /** - * {@inheritdoc} - */ - protected function getDisplayModeSettings() { - return field_view_mode_settings($this->entity_type, $this->bundle); - } - - /** - * {@inheritdoc} - */ - protected function saveDisplayModeSettings($display_mode_settings) { - $bundle_settings = field_bundle_settings($this->entity_type, $this->bundle); - $bundle_settings['view_modes'] = NestedArray::mergeDeep($bundle_settings['view_modes'], $display_mode_settings); - field_bundle_settings($this->entity_type, $this->bundle, $bundle_settings); - } - - /** * {@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 3f9adea..42f5152 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php @@ -149,10 +149,10 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, // checkboxes. $options = array(); $default = array(); - $display_mode_settings = $this->getDisplayModeSettings(); - foreach ($display_modes as $mode_name => $mode_info) { - $options[$mode_name] = $mode_info['label']; - if (!empty($display_mode_settings[$mode_name]['status'])) { + $display_statuses = $this->getDisplayStatuses(); + foreach ($display_modes as $mode_name => $status) { + $options[$mode_name] = $display_modes[$mode_name]['label']; + if (!empty($display_statuses[$mode_name])) { $default[] = $mode_name; } } @@ -506,14 +506,14 @@ public function submitForm(array &$form, array &$form_state) { // Save the display. $display->save(); - // Handle the 'view modes' checkboxes if present. + // Handle the 'display modes' checkboxes if present. if ($this->mode == 'default' && !empty($form_values['display_modes_custom'])) { $display_modes = $this->getDisplayModes(); - $display_mode_settings = $this->getDisplayModeSettings(); + $display_mode_statuses = $this->getDisplayStatuses(); - $display_mode_bundle_settings = array(); + $statuses = array(); foreach ($form_values['display_modes_custom'] as $mode => $value) { - if (!empty($value) && empty($display_mode_settings[$mode]['status'])) { + if (!empty($value) && empty($display_mode_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. @@ -526,11 +526,11 @@ public function submitForm(array &$form, array &$form_state) { $path = $this->getOverviewPath($mode); drupal_set_message($this->t('The %display_mode mode now uses custom display settings. You might want to configure them.', array('%display_mode' => $display_mode_label, '@url' => url($path)))); } - $display_mode_bundle_settings[$mode]['status'] = !empty($value); + $statuses[$mode] = !empty($value); } // Save updated bundle settings. - $this->saveDisplayModeSettings($display_mode_bundle_settings); + $this->saveDisplayStatuses($statuses); } drupal_set_message($this->t('Your settings have been saved.')); @@ -679,22 +679,6 @@ protected function getPluginOptions($field_type) { abstract protected function getDisplayModes(); /** - * Returns form or view modes settings for the bundle used by this form. - * - * @return array - * An array of form or view mode settings. - */ - abstract protected function getDisplayModeSettings(); - - /** - * Saves the updated display mode settings. - * - * @param array $display_mode_settings - * An array holding updated form or view mode settings. - */ - abstract protected function saveDisplayModeSettings($display_mode_settings); - - /** * Returns the region to which a row in the display overview belongs. * * @param array $row @@ -725,6 +709,49 @@ protected function getExtraFieldVisibilityOptions() { } /** + * 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(); + $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_statuses[$display->get('mode')] = $display->status(); + } + return $display_statuses; + } + + /** + * Saves the updated display mode statuses. + * + * @param array $display_mode_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')]); + $display->save(); + } + } + + /** * Returns an array containing the table headers. * * @return array 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 1186fc2..1d3a781 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php @@ -97,22 +97,6 @@ protected function getDisplayModes() { } /** - * {@inheritdoc} - */ - protected function getDisplayModeSettings() { - return field_form_mode_settings($this->entity_type, $this->bundle); - } - - /** - * {@inheritdoc} - */ - protected function saveDisplayModeSettings($display_mode_settings) { - $bundle_settings = field_bundle_settings($this->entity_type, $this->bundle); - $bundle_settings['form_modes'] = NestedArray::mergeDeep($bundle_settings['form_modes'], $display_mode_settings); - field_bundle_settings($this->entity_type, $this->bundle, $bundle_settings); - } - - /** * {@inheritdoc */ protected function getTableHeader() { diff --git a/core/modules/system/tests/upgrade/drupal-7.field.database.php b/core/modules/system/tests/upgrade/drupal-7.field.database.php index cb96034..420dc0b 100644 --- a/core/modules/system/tests/upgrade/drupal-7.field.database.php +++ b/core/modules/system/tests/upgrade/drupal-7.field.database.php @@ -12,19 +12,19 @@ $value = array( 'view_modes' => array( 'teaser' => array( - 'status' => 1, + 'custom_settings' => 1, ), 'full' => array( - 'status' => 0, + 'custom_settings' => 0, ), 'rss' => array( - 'status' => 0, + 'custom_settings' => 0, ), 'search_index' => array( - 'status' => 0, + 'custom_settings' => 0, ), 'search_result' => array( - 'status' => 0, + 'custom_settings' => 0, ), ), 'extra_fields' => array( diff --git a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php index b5dc5c7..34b348b 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php @@ -213,6 +213,8 @@ function testRegistrationWithUserFields() { entity_get_form_display('user', 'user', 'default') ->setComponent('test_user_field', array('type' => 'test_field_widget')) ->save(); + entity_get_form_display('user', 'user', 'register') + ->save(); // Check that the field does not appear on the registration form. $this->drupalGet('user/register'); diff --git a/core/modules/user/user.install b/core/modules/user/user.install index 8253ba6..0739b2b 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -361,11 +361,11 @@ function user_update_dependencies() { * The 'Member for' extra field has moved one level up in the array. */ function user_update_8000() { - $settings = field_bundle_settings('user', 'user'); + $settings = update_variable_get('field_bundle_settings_user__user', array()); if (isset($settings['extra_fields']['display']['summary'])) { $settings['extra_fields']['display']['member_for'] = $settings['extra_fields']['display']['summary']; unset($settings['extra_fields']['display']['summary']); - field_bundle_settings('user', 'user', $settings); + update_variable_set('field_bundle_settings_user__user', $settings); } } @@ -740,7 +740,7 @@ function user_update_8011() { } // Assign form settings for the 'default' form mode. - $form_display = _update_8000_entity_get_form_display('user', 'user', 'default'); + $form_display = _update_8000_entity_get_form_display('user', 'user', 'default', TRUE); $form_display->set('content.user_picture', array( 'type' => $widget, 'settings' => array( @@ -749,6 +749,7 @@ function user_update_8011() { ), 'weight' => -1, )) + ->set('status', 1) ->save(); // Assign display settings for the 'default' and 'compact' view modes. @@ -762,6 +763,7 @@ function user_update_8011() { ), 'weight' => 0, )) + ->set('status', 1) ->save(); $display = _update_8000_entity_get_display('user', 'user', 'compact'); @@ -773,8 +775,9 @@ function user_update_8011() { 'image_link' => 'content', ), 'weight' => 0, - )); - $display->set('content.member_for', array( + )) + ->set('status', 1) + ->set('content.member_for', array( 'visible' => FALSE, )); $display->save(); diff --git a/core/profiles/standard/config/entity.display.node.article.default.yml b/core/profiles/standard/config/entity.display.node.article.default.yml index 330de2d..78c65cb 100644 --- a/core/profiles/standard/config/entity.display.node.article.default.yml +++ b/core/profiles/standard/config/entity.display.node.article.default.yml @@ -2,6 +2,7 @@ id: node.article.default targetEntityType: node bundle: article mode: default +status: 1 content: body: label: hidden diff --git a/core/profiles/standard/config/entity.display.node.article.teaser.yml b/core/profiles/standard/config/entity.display.node.article.teaser.yml index 44add7e..4c61317 100644 --- a/core/profiles/standard/config/entity.display.node.article.teaser.yml +++ b/core/profiles/standard/config/entity.display.node.article.teaser.yml @@ -2,6 +2,7 @@ id: node.article.teaser targetEntityType: node bundle: article mode: teaser +status: 1 content: body: label: hidden diff --git a/core/profiles/standard/config/entity.form_display.node.article.default.yml b/core/profiles/standard/config/entity.form_display.node.article.default.yml index ce4efbc..bee1ea2 100644 --- a/core/profiles/standard/config/entity.form_display.node.article.default.yml +++ b/core/profiles/standard/config/entity.form_display.node.article.default.yml @@ -2,6 +2,7 @@ id: node.article.default targetEntityType: node bundle: article mode: default +status: 1 content: body: type: text_textarea_with_summary