You are here

function panels_choose_layout in Panels 7.3

Same name and namespace in other branches
  1. 5.2 includes/display_edit.inc \panels_choose_layout()
  2. 6.3 includes/display-layout.inc \panels_choose_layout()
  3. 6.2 includes/display-layout.inc \panels_choose_layout()

Form definition for the display layout editor.

4 calls to panels_choose_layout()
panels_mini_ui::edit_form_layout in panels_mini/plugins/export_ui/panels_mini_ui.class.php
panels_page_wizard_add_layout in includes/page-wizard.inc
Add layout form helper for panels page wizards.
panels_panel_context_edit_choose in plugins/task_handlers/panel_context.inc
Choose a layout for this panel.
panels_panel_context_edit_layout in plugins/task_handlers/panel_context.inc
Change the layout for this panel.
1 string reference to 'panels_choose_layout'
_panels_edit_layout in includes/display-layout.inc
Handle calling and processing of the form for editing display layouts.

File

includes/display-layout.inc, line 72
Handle the forms for changing a display's layout.

Code

function panels_choose_layout($form, &$form_state) {
  $display =& $form_state['display'];
  ctools_include('common', 'panels');
  ctools_include('cleanstring');
  $layouts = panels_common_get_allowed_layouts($form_state['allowed_layouts']);
  $categories = array();
  $current = '';
  foreach ($layouts as $id => $layout) {
    $category = ctools_cleanstring($layout['category']);

    // Default category to first in case layout doesn't exist or there isn't one.
    if (empty($current)) {
      $current = $category;
    }
    $categories[$category] = $layout['category'];
    $options[$category][$id] = panels_print_layout_icon($id, $layout, check_plain($layout['title']));

    // Set current category to what is chosen.
    if ($id == $display->layout) {
      $current = $category;
    }
  }
  ctools_add_js('panels-base', 'panels');
  ctools_add_js('layout', 'panels');
  $form['categories'] = array(
    '#title' => t('Category'),
    '#type' => 'select',
    '#options' => $categories,
    '#default_value' => $current,
  );
  $form['layout'] = array(
    '#prefix' => '<div class="panels-choose-layout panels-layouts-checkboxes clearfix">',
    '#suffix' => '</div>',
  );

  // We set up the dependencies manually because these aren't really form
  // items. It's possible there's a simpler way to do this, but I could not
  // think of one at the time.
  $dependencies = array();
  foreach ($options as $category => $radios) {
    $dependencies['panels-layout-category-' . $category] = array(
      'values' => array(
        'edit-categories' => array(
          $category,
        ),
      ),
      'num' => 1,
      'type' => 'hide',
    );
    $form['layout'][$category] = array(
      '#prefix' => '<div id="panels-layout-category-' . $category . '-wrapper"><div id="panels-layout-category-' . $category . '" class="form-checkboxes clearfix"><div class="panels-layouts-category">' . $categories[$category] . '</div>',
      '#suffix' => '</div></div>',
    );
    foreach ($radios as $key => $choice) {

      // Set the first available layout as default value.
      if (empty($display->layout)) {
        $display->layout = $key;
      }

      // Generate the parents as the autogenerator does, so we will have a
      // unique id for each radio button.
      $form['layout'][$category][$key] = array(
        '#type' => 'radio',
        '#title' => $choice,
        '#parents' => array(
          'layout',
        ),
        '#id' => drupal_clean_css_identifier('edit-layout-' . $key),
        '#return_value' => check_plain($key),
        '#default_value' => in_array($display->layout, array_keys($layouts)) ? $display->layout : NULL,
      );
    }
  }
  ctools_add_js('dependent');
  $js['CTools']['dependent'] = $dependencies;
  drupal_add_js($js, 'setting');
  if (empty($form_state['no buttons'])) {
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Next'),
    );
  }
  return $form;
}