You are here

function panelizer_panels_cache_save in Panelizer 7.3

Same name and namespace in other branches
  1. 6 panelizer.module \panelizer_panels_cache_save()
  2. 7 panelizer.module \panelizer_panels_cache_save()
  3. 7.2 panelizer.module \panelizer_panels_cache_save()

Implements hook_panels_cache_save().

Save all changes made to a display using the Page Manager page cache.

File

./panelizer.module, line 1413
The Panelizer module attaches panels to entities, providing default panels and allowing each panel to be configured independently by privileged users.

Code

function panelizer_panels_cache_save($argument, $cache) {

  // If this is set, they clicked a button that saves a different panelizer
  // than was being edited, such as saving to default rather than customizing
  // an entity.
  $original = $argument;
  if (isset($cache->display->swap_cache_key)) {
    $argument = $cache->display->swap_cache_key;
  }
  list($entity_type, $key) = explode(':', $argument, 2);
  $type = $entity_type;
  if ($entity_type == 'default') {
    list($entity_type, $bundle, $name) = @explode(':', $key, 3);
    $get_default = TRUE;
  }
  $handler = panelizer_entity_plugin_get_handler($entity_type);
  if (!$handler) {
    return;
  }
  if (!empty($get_default)) {
    $panelizer = $handler
      ->get_default_panelizer_object($bundle, $name);
    $panelizer->display = $cache->display;
    ctools_include('export');
    ctools_export_crud_save('panelizer_defaults', $panelizer);
  }
  else {
    list($entity_id, $view_mode, $vid) = explode(':', $key);
    $entity = $cache->display->context['panelizer']->data;
    if ($entity->panelizer[$view_mode]) {
      $entity->panelizer[$view_mode]->display = $cache->display;
      $entity->panelizer[$view_mode]->display_is_modified = TRUE;
      $handler
        ->entity_save($entity);

      // The display may have been cloned in the save process, so we need
      // to be sure to put the old display back, and its contexts.
      $cache->display = $entity->panelizer[$view_mode]->display;
      $cache->display->context = $handler
        ->get_contexts($entity->panelizer[$view_mode], $entity);
    }
  }
  panelizer_panels_cache_clear($original, $cache);
}