diff --git a/includes/field_ui.inc b/includes/field_ui.inc index 8561524c..bf613614 100644 --- a/includes/field_ui.inc +++ b/includes/field_ui.inc @@ -757,13 +757,18 @@ function _ds_field_ui_table_layouts($entity_type, $bundle, $view_mode, array &$f $display = $entity_form->getEntity(); if ($display->getThirdPartySetting('ds', 'layout')) { $layout_configuration = $display->getThirdPartySetting('ds', 'layout'); - $layout = (array) $ds_layouts[$layout_configuration['id']]; - $layout['layout'] = $layout_configuration['id']; - $layout['disable_css'] = $layout_configuration['disable_css']; - $layout['entity_classes'] = $layout_configuration['entity_classes']; - $layout['settings'] = $layout_configuration['settings'] ?: []; - $layout['regions'] = $display->getThirdPartySetting('ds', 'regions'); - $layout['fields'] = $display->getThirdPartySetting('ds', 'fields'); + if (isset($ds_layouts[$layout_configuration['id']])) { + $layout = (array) $ds_layouts[$layout_configuration['id']]; + $layout['layout'] = $layout_configuration['id']; + $layout['disable_css'] = $layout_configuration['disable_css']; + $layout['entity_classes'] = $layout_configuration['entity_classes']; + $layout['settings'] = $layout_configuration['settings'] ?: []; + $layout['regions'] = $display->getThirdPartySetting('ds', 'regions'); + $layout['fields'] = $display->getThirdPartySetting('ds', 'fields'); + } + else { + drupal_set_message(t('The configured layout (@layout) is missing, please select a new one', ['@layout' => $layout_configuration['id']]), 'error'); + } } if (!empty($layout) && isset($layout['layout']) && isset($ds_layouts[$layout['layout']])) { @@ -907,18 +912,21 @@ function _ds_field_ui_table_layouts_preview(array &$form, FormStateInterface $fo $layout_string = $form_state->hasValue('ds_layout') ? $form_state->getValue('ds_layout') : $layout['layout']; } + $suggestions_array = []; + if (!empty($layout_string)) { - /** @var \Drupal\Core\Layout\LayoutDefinition $chosen_layout */ - $chosen_layout = $ds_layouts[$layout_string]; - $selected = '' . $chosen_layout->getLabel() . ''; - $selected .= '
' . t('The default template can be found in %path', ['%path' => $chosen_layout->getPath() . '/' . $chosen_layout->getTemplate()]); - $suggestions_array = []; - $suggestions_array[0] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId(); - $suggestions_array[2] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle(); - $suggestions_array[4] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '--{id}'; - if ($display->getMode() != 'default') { - $suggestions_array[1] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getMode(); - $suggestions_array[3] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle() . '-' . $display->getMode(); + if (isset($ds_layouts[$layout_string])) { + /** @var \Drupal\Core\Layout\LayoutDefinition $chosen_layout */ + $chosen_layout = $ds_layouts[$layout_string]; + $selected = '' . $chosen_layout->getLabel() . ''; + $selected .= '
' . t('The default template can be found in %path', ['%path' => $chosen_layout->getPath() . '/' . $chosen_layout->getTemplate()]); + $suggestions_array[0] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId(); + $suggestions_array[2] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle(); + $suggestions_array[4] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '--{id}'; + if ($display->getMode() != 'default') { + $suggestions_array[1] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getMode(); + $suggestions_array[3] = $chosen_layout->getTemplate() . '--' . $display->getTargetEntityTypeId() . '-' . $display->getTargetBundle() . '-' . $display->getMode(); + } } ksort($suggestions_array); @@ -929,7 +937,7 @@ function _ds_field_ui_table_layouts_preview(array &$form, FormStateInterface $fo $suggestions_array[$key] = $suggestion_replace . '.html.twig'; } - if ($form_state->hasValue('ds_layout') || (!empty($layout) && isset($layout['regions']))) { + if ($form_state->hasValue('ds_layout') || (!empty($layout) && isset($layout['regions'])) && (!empty($chosen_layout))) { $fallback_image = drupal_get_path('module', 'ds') . '/images/preview.png'; $current_layout = $form_state->hasValue('ds_layout') && (!isset($layout->layout) || $form_state->getValue('ds_layout') != $layout->layout) ? t('Current layout (after save)') : t('Current layout'); $image = $chosen_layout->getIconPath();