1 layout.admin.inc | layout_settings_form_update_layout($form, &$form_state) |
Submit handler for layout_settings_form() that saves in-progress values.
File
- core/
modules/ layout/ layout.admin.inc, line 950 - Admin page callbacks for the Layout module.
Code
function layout_settings_form_update_layout($form, &$form_state) {
/* @var Layout $layout */
$layout = $form_state['layout'];
// Keep track of the original name.
if (isset($form_state['values']['name'])) {
if ($form_state['values']['name'] !== $layout->name && !isset($layout->original_name)) {
$layout->original_name = $layout->name;
}
}
// Update main properties.
if (isset($form_state['values']['title'])) {
$layout->title = $form_state['values']['title'];
}
if (isset($form_state['values']['name'])) {
$layout->name = $form_state['values']['name'];
}
if (isset($form_state['values']['layout_template'])) {
$old_template = $layout->layout_template;
$new_template = $form_state['values']['layout_template'];
if ($old_template != $new_template) {
$region_mapping = layout_get_legacy_region_mapping($old_template, $new_template);
// If there is no theme cache entry for this template, rebuild theme cache
// to ensure that the new template is loaded.
$theme_entries = theme_get_registry(FALSE);
if (empty($theme_entries['layout__' . $new_template])) {
backdrop_theme_rebuild();
}
$layout->setLayoutTemplate($new_template, $region_mapping);
}
if (!empty($layout->orphaned_blocks)) {
$orphaned_blocks_titles = array();
$layout_template_info = layout_get_layout_template_info($form_state['values']['layout_template']);
foreach ($layout->orphaned_blocks as $uuid) {
$orphaned_blocks_titles[] = $layout->content[$uuid]->getAdminTitle();
}
$message = t('The following blocks have been reassigned to the %new_region region. The regions they were placed in previously do not exist in the new layout template. You can move them to more appropriate regions:', array(
'%new_region' => $layout_template_info['regions'][$layout->refuge_region]));
$message .= theme('item_list', array('items' => $orphaned_blocks_titles));
backdrop_set_message($message, 'warning');
}
}
if (isset($form_state['values']['path'])) {
$layout->setPath($form_state['values']['path']);
}
// Update contexts.
// @todo: Provide methods/API for setting menu item arguments.
if ($layout->menu_item && isset($form_state['values']['context'])) {
$plugin_counts = array();
$arguments = array();
foreach ($layout->getContexts() as $position => $layout_context) {
if (isset($form_state['values']['context']['required'][$position]['plugin'])) {
$argument_config = $form_state['values']['context']['required'][$position];
$plugin = $argument_config['plugin'];
}
else {
$plugin = $layout_context->plugin;
}
// Keep track of all utilized plugins, both required and locked.
$plugin_counts[$plugin] = isset($plugin_counts[$plugin]) ? $plugin_counts[$plugin] + 1 : 1;
// Locked contexts are forced to be at this path, so they do not need to
// be saved in the menu item's argument configuration.
if ($layout_context->locked) {
continue;
}
// Give an automatically generated name such as "node" or "string2".
$name = $plugin . (($plugin_counts[$plugin] === 1) ? '' : $plugin_counts[$plugin]);
// Persist machine names if they already exists for this argument.
if (isset($layout->menu_item->arguments[$position])) {
$existing_argument = $layout->menu_item->arguments[$position];
if ($existing_argument['plugin'] === $plugin) {
$name = $existing_argument['name'];
}
}
$arguments[$position] = array(
'plugin' => $plugin,
'name' => $name,
'position' => $position,
);
}
$layout->menu_item->arguments = $arguments;
}
if (!empty($layout->is_new)) {
$_SESSION['layout_new_name'] = $layout->name;
}
else {
if ($form_state['values']['name'] !== $layout->name) {
$layout->original_name = $form_state['values']['name'];
}
}
layout_set_layout_tempstore($layout);
}