You are here

function panels_layouts_ui::edit_form in Panels 7.3

Same name and namespace in other branches
  1. 6.3 plugins/export_ui/panels_layouts_ui.class.php \panels_layouts_ui::edit_form()

Provide the actual editing form.

Overrides ctools_export_ui::edit_form

File

plugins/export_ui/panels_layouts_ui.class.php, line 40
Contains the administrative UI for reusable layouts.

Class

panels_layouts_ui
@file Contains the administrative UI for reusable layouts.

Code

function edit_form(&$form, &$form_state) {
  ctools_include('plugins', 'panels');

  // If the plugin is not set, then it should be provided as an argument:
  if (!isset($form_state['item']->plugin)) {
    $form_state['item']->plugin = $form_state['function args'][2];
  }
  parent::edit_form($form, $form_state);
  $form['category'] = array(
    '#type' => 'textfield',
    '#title' => t('Category'),
    '#description' => t('What category this layout should appear in. If left blank the category will be "Miscellaneous".'),
    '#default_value' => $form_state['item']->category,
  );
  ctools_include('context');
  ctools_include('display-edit', 'panels');
  ctools_include('content');

  // Provide actual layout admin UI here.
  // Create a display for editing:
  $cache_key = 'builder-' . $form_state['item']->name;

  // Load the display being edited from cache, if possible.
  if (!empty($_POST) && is_object($cache = panels_edit_cache_get($cache_key))) {
    $display =& $cache->display;
  }
  else {
    $content_types = ctools_content_get_available_types();
    panels_cache_clear('display', $cache_key);
    $cache = new stdClass();
    $display = panels_new_display();
    $display->did = $form_state['item']->name;
    $display->layout = $form_state['item']->plugin;
    $display->layout_settings = $form_state['item']->settings;
    $display->cache_key = $cache_key;
    $display->editing_layout = TRUE;
    $display->storage_type = 'panels_layouts_ui';
    $display->storage_id = 'panels_layouts_ui';
    $cache->display = $display;
    $cache->content_types = $content_types;
    $cache->display_title = FALSE;
    panels_edit_cache_set($cache);
  }

  // Set up lipsum content in all of the existing panel regions:
  $display->content = array();
  $display->panels = array();
  $custom = ctools_get_content_type('custom');
  $layout = panels_get_layout($display->layout);
  $regions = panels_get_regions($layout, $display);
  foreach ($regions as $id => $title) {
    $pane = panels_new_pane('custom', 'custom');
    $pane->pid = $id;
    $pane->panel = $id;
    $pane->configuration = ctools_content_get_defaults($custom, 'custom');
    $pane->configuration['title'] = 'Lorem Ipsum';
    $pane->configuration['body'] = $this->lipsum;
    $display->content[$id] = $pane;
    $display->panels[$id] = array(
      $id,
    );
  }
  $form_state['display'] =& $display;

  // Tell the Panels form not to display buttons.
  $form_state['no buttons'] = TRUE;
  $form_state['no display settings'] = TRUE;
  $form_state['cache_key'] = $cache_key;
  $form_state['content_types'] = $cache->content_types;
  $form_state['display_title'] = FALSE;
  $form_state['renderer'] = panels_get_renderer_handler('editor', $cache->display);
  $form_state['renderer']->cache =& $cache;
  $form = panels_edit_display_form($form, $form_state);

  // If we leave the standard submit handler, it'll try to reconcile
  // content from the input, but we've not exposed that to the user. This
  // makes previews work with the content we forced in.
  $form['preview']['button']['#submit'] = array(
    'panels_edit_display_form_preview',
  );
}