You are here

function panels_renderer_editor::ajax_style_type in Panels 7.3

Same name and namespace in other branches
  1. 6.3 plugins/display_renderers/panels_renderer_editor.class.php \panels_renderer_editor::ajax_style_type()

AJAX entry point to select the style for a display, region or pane.

Parameters

string $type: Either display, region or pane

$pid: The pane id, if a pane. The region id, if a region.

File

plugins/display_renderers/panels_renderer_editor.class.php, line 973
Class file to control the main Panels editor.

Class

panels_renderer_editor
@file Class file to control the main Panels editor.

Code

function ajax_style_type($type, $pid = NULL) {

  // This lets us choose whether we're doing the display's cache or
  // a pane's.
  switch ($type) {
    case 'display':
      $style = isset($this->display->panel_settings['style']) ? $this->display->panel_settings['style'] : 'default';
      $title = t('Default style for this display');
      break;
    case 'region':
      $style = isset($this->display->panel_settings[$pid]['style']) ? $this->display->panel_settings[$pid]['style'] : '-1';

      // -1 signifies to use the default setting.
      $title = t('Panel style for region "!region"', array(
        '!region' => $this->plugins['layout']['regions'][$pid],
      ));
      break;
    case 'pane':
      ctools_include('content');
      $pane =& $this->display->content[$pid];
      $style = isset($pane->style['style']) ? $pane->style['style'] : 'default';
      $title = ctools_content_admin_title($pane->type, $pane->subtype, $pane->configuration, $this->display->context);
      if (!$title) {
        $title = $pane->type;
      }
      $title = t('Pane style for "!title"', array(
        '!title' => $title,
      ));
      break;
    default:
      ctools_modal_render(t('Error'), t('Invalid pane id.'));
  }
  $info = $this
    ->get_style($type, $pid);
  $style_plugin = $info[0];
  $style_settings = $info[1];

  // Backward compatibility: Translate old-style stylizer to new style
  // stylizer.
  if ($style == 'stylizer' && !empty($style_settings['style']) && $style_settings['style'] != '$') {
    $style = 'stylizer:' . $style_settings['style'];
  }
  $form_state = array(
    'display' => &$this->display,
    'style' => $style,
    'pane' => $type == 'pane' ? $this->display->content[$pid] : NULL,
    'title' => $title,
    'ajax' => TRUE,
    'type' => $type,
  );
  $output = ctools_modal_form_wrapper('panels_edit_style_type_form', $form_state);
  if (empty($form_state['executed'])) {
    $this->commands = $output;
    return;
  }

  // Preserve this; this way we don't actually change the method until they
  // have saved the form.
  $style = panels_get_style($form_state['style']);
  $function = panels_plugin_get_function('styles', $style, $type == 'pane' ? 'pane settings form' : 'settings form');
  if (!$function) {
    if (isset($this->cache->style)) {
      unset($this->cache->style);
    }

    // If there's no settings form, just change the style and exit.
    switch ($type) {
      case 'display':
        $this->display->panel_settings['style'] = $form_state['style'];
        if (isset($this->display->panel_settings['style_settings']['default'])) {
          unset($this->display->panel_settings['style_settings']['default']);
        }
        break;
      case 'region':
        $this->display->panel_settings[$pid]['style'] = $form_state['style'];
        if (isset($this->display->panel_settings['style_settings'][$pid])) {
          unset($this->display->panel_settings['style_settings'][$pid]);
        }
        break;
      case 'pane':
        $pane->style['style'] = $form_state['style'];
        if (isset($pane->style['settings'])) {
          $pane->style['settings'] = NULL;
        }
        break;
    }
    panels_edit_cache_set($this->cache);
    $this->commands[] = ctools_modal_command_dismiss();
    if ($type == 'pane') {
      $this
        ->command_update_pane($pane);
    }
    elseif ($type == 'region') {
      $this
        ->command_update_region_links($pid);
    }
    else {
      $this
        ->command_update_display_links();
    }
  }
  else {
    if ($form_state['style'] != $form_state['old_style']) {
      $this->cache->style = $form_state['style'];
      panels_edit_cache_set($this->cache);
    }

    // Send them to next form.
    return $this
      ->ajax_style_settings($type, $pid);
  }
}