diff --git a/core/includes/entity.inc b/core/includes/entity.inc index 15a2509..11f5015 100644 --- a/core/includes/entity.inc +++ b/core/includes/entity.inc @@ -83,19 +83,18 @@ function entity_get_info($entity_type = NULL) { } } - // Add custom view modes. - $custom_view_modes = config('view_modes')->get(); - if (!empty($custom_view_modes)) { - foreach ($custom_view_modes as $view_mode => $view_mode_info) { - $definition = array( - 'label' => check_plain($view_mode_info['label']), + // Add view modes. + $view_modes = drupal_container()->get('config.storage')->listAll('view_modes.'); + foreach ($view_modes as $config_name) { + $view_mode_config = config($config_name)->get(); + strtok($config_name, '.'); + $view_mode = strtok('.'); + foreach (array_filter($view_mode_config) as $key => $definition) { + $definition += array( 'custom settings' => FALSE, ); - foreach ($view_mode_info['entity_types'] as $key => $value) { - if ($key === $value) { - $entity_info[$key]['view modes'][$view_mode] = $definition; - } - } + $definition['label'] = check_plain($definition['label']); + $entity_info[$key]['view modes'][$view_mode] = $definition; } } diff --git a/core/modules/view_mode/view_mode.admin.inc b/core/modules/view_mode/view_mode.admin.inc index f8e572c..81af113 100644 --- a/core/modules/view_mode/view_mode.admin.inc +++ b/core/modules/view_mode/view_mode.admin.inc @@ -11,16 +11,17 @@ function view_mode_list() { $build = $rows = array(); $entity_info = entity_get_info(); - $custom_view_modes = config('view_modes')->get(); + $config_names = drupal_container()->get('config.storage')->listAll('view_modes.'); - foreach ($custom_view_modes as $view_mode => $view_mode_info) { + foreach ($config_names as $config_name) { + $view_mode_config = config($config_name)->get(); + strtok($config_name, '.'); + $view_mode = strtok('.'); - $rows[$view_mode]['label'] = check_plain($view_mode_info['label']); $entity_types = array(); - foreach ($view_mode_info['entity_types'] as $key => $value) { - if ($key === $value) { - $entity_types[] = $entity_info[$key]['label']; - } + foreach (array_filter($view_mode_config) as $key => $view_mode_info) { + $rows[$view_mode]['label'] = check_plain($view_mode_info['label']); + $entity_types[] = $entity_info[$key]['label']; } $rows[$view_mode]['custom_settings'] = implode(', ', $entity_types); @@ -42,13 +43,6 @@ function view_mode_list() { ); } - if (empty($rows)) { - $rows[] = array(array( - 'data' => t('No custom view modes available.') . ' ' . l(t('Add new view mode.'), "admin/config/system/view-modes/add"), - 'colspan' => 4, - )); - } - $build['view_modes'] = array( '#theme' => 'table', '#header' => array( @@ -57,6 +51,7 @@ function view_mode_list() { t('Operations'), ), '#rows' => $rows, + '#empty' => t('No custom view modes available.') . ' ' . l(t('Add new view mode.'), "admin/config/system/view-modes/add"), ); return $build; @@ -66,7 +61,6 @@ function view_mode_list() { * Form builder; add or edit a view mode. */ function view_mode_edit_form($form, &$form_state, $view_mode = NULL) { - $form['is_new'] = array( '#type' => 'value', '#value' => empty($view_mode) @@ -83,7 +77,7 @@ function view_mode_edit_form($form, &$form_state, $view_mode = NULL) { '#type' => 'machine_name', '#machine_name' => array( 'source' => array('label'), - 'exists' => 'view_mode_exists', + 'exists' => 'view_mode_load', ), '#default_value' => !empty($view_mode['machine_name']) ? $view_mode['machine_name'] : '', '#disabled' => !empty($view_mode['label']), @@ -102,7 +96,7 @@ function view_mode_edit_form($form, &$form_state, $view_mode = NULL) { '#type' => 'checkboxes', '#title' => t('Enable this view mode for the following types'), '#options' => $options, - '#default_value' => !empty($view_mode['entity_types']) ? $view_mode['entity_types'] : array(), + '#default_value' => !empty($view_mode['entity_types']) ? drupal_map_assoc(array_keys($view_mode['entity_types'])) : array(), ); $form['actions'] = array('#type' => 'actions'); @@ -115,23 +109,6 @@ function view_mode_edit_form($form, &$form_state, $view_mode = NULL) { } /** - * Check whether a view mode already exists or not. - */ -function view_mode_exists($machine_name, $element, $form_state) { - $entity_info = entity_get_info(); - - foreach ($entity_info as $entity_type => $info) { - foreach (array_keys($info['view modes']) as $view_mode) { - if ($view_mode === $machine_name) { - return TRUE; - } - } - } - - return FALSE; -} - -/** * Submit handler: save a view mode. */ function view_mode_edit_form_submit($form, &$form_state) { diff --git a/core/modules/view_mode/view_mode.module b/core/modules/view_mode/view_mode.module index 058b210..92f764f 100644 --- a/core/modules/view_mode/view_mode.module +++ b/core/modules/view_mode/view_mode.module @@ -57,9 +57,13 @@ function view_mode_menu() { * Load a custom view mode by machine name. */ function view_mode_load($machine_name) { + $view_mode['entity_types'] = array_filter(config("view_modes.$machine_name")->get()); + if (!empty($view_mode['entity_types'])) { + // @todo Labels should be configurable per entity type, but the UI + // assumes that there is one for the view mode itself. + $label = reset($view_mode['entity_types']); + $view_mode['label'] = $label['label']; - $view_mode = config('view_modes')->get($machine_name); - if (!empty($view_mode)) { $view_mode['machine_name'] = $machine_name; return $view_mode; } @@ -72,11 +76,11 @@ function view_mode_load($machine_name) { */ function view_mode_save($view_mode) { $is_new = FALSE; - $view_mode_name = $view_mode['machine_name']; + $machine_name = $view_mode['machine_name']; // Determine if we will be inserting a new view mode. if (!isset($view_mode['is_new'])) { - $existing = view_mode_load($view_mode_name); + $existing = view_mode_load($machine_name); $is_new = empty($existing); } @@ -84,8 +88,10 @@ function view_mode_save($view_mode) { module_invoke_all('view_mode_presave', $view_mode); // Save the view mode. - $view_mode = array_intersect_key($view_mode, drupal_map_assoc(array('label', 'entity_types'))); - config('view_modes')->set($view_mode_name, $view_mode)->save(); + foreach ($view_mode['entity_types'] as $entity_type => $is_set) { + $data = $is_set ? array('label' => $view_mode['label']) : array(); + config("view_modes.$machine_name")->set($entity_type, $data)->save(); + } // Allow modules to respond after the view mode is saved. if ($is_new) { @@ -97,7 +103,7 @@ function view_mode_save($view_mode) { // Clear the static entity info cache and rebuild the menu. entity_info_cache_clear(); - variable_set('menu_rebuild_needed', TRUE); + state()->set('menu_rebuild_needed', TRUE); } /** @@ -107,13 +113,10 @@ function view_mode_delete($machine_name) { if ($view_mode = view_mode_load($machine_name)) { module_invoke_all('view_mode_delete', $view_mode); - $view_modes = config('view_modes')->get(); - unset($view_modes[$machine_name]); - config('view_modes')->setData($view_modes)->save(); + config("view_modes.$machine_name")->delete(); // Clear the static entity info cache and rebuild the menu. entity_info_cache_clear(); - variable_set('menu_rebuild_needed', TRUE); + state()->set('menu_rebuild_needed', TRUE); } } -