You are here

function panels_ajax_tab_settings in Panels Ajax Tabs 7

Panels AJAX tabs settings form.

1 string reference to 'panels_ajax_tab_settings'
panels_ajax_tab_menu in ./panels_ajax_tab.module
Implements hook_menu().

File

./panels_ajax_tab.admin.inc, line 73
Administration page callbacks for the Panels AJAX tabs module.

Code

function panels_ajax_tab_settings($form, $form_state, $panels_ajax_tab) {

  // Get the access/visibility rules.
  ctools_include('plugins');
  ctools_include('context');
  $contexts = _panels_ajax_tab_get_contexts($panels_ajax_tab['context']);
  $access_plugins = ctools_get_relevant_access_plugins($contexts);
  $access_options = array(
    'none' => 'Choose visibility rule',
  );
  foreach ($access_plugins as $id => $access_plugin) {
    $access_options[$id] = $access_plugin['title'];
  }
  asort($access_options);
  $mini_panels = $panels_ajax_tab['mini_panels'];
  $container_id = $panels_ajax_tab['container_id'];

  // Get the visibility rule, if available.
  $default_visibility_rules = _panels_ajax_tab_get_container_visibility_settings($container_id);
  $form['container_id'] = array(
    '#type' => 'hidden',
    '#value' => $container_id,
  );
  foreach ($mini_panels as $name => $mini_panel) {
    $title = !empty($mini_panel['tab_title']) ? $mini_panel['tab_title'] : $name;
    $form[$name] = array(
      '#type' => 'fieldset',
      '#title' => t('Visibility settings for @title', array(
        '@title' => $title,
      )),
      '#tree' => TRUE,
    );
    $form[$name]['visibility_rule'] = array(
      '#type' => 'select',
      '#title' => t('Visibility/Access Rule'),
      '#options' => $access_options,
      '#ajax' => array(
        'wrapper' => 'visibility-settings-wrapper-' . $name,
        'callback' => 'ajax_example_dynamic_sections_select_callback_new',
        'callback' => 'panels_ajax_tab_visibility_select_callback',
        'mini-name' => $name,
      ),
      '#default_value' => !empty($default_visibility_rules) ? $default_visibility_rules[$name]['visibility_rule'] : 'none',
    );

    // This fieldset just serves as a container for the part of the form
    // that gets rebuilt.
    $form[$name]['visibility_settings'] = array(
      '#type' => 'fieldset',
      // These provide the wrapper referred to in #ajax['wrapper'] above.
      '#prefix' => '<div id="visibility-settings-wrapper-' . $name . '">',
      '#suffix' => '</div>',
      '#tree' => TRUE,
    );
    $form_state_values = !empty($form_state['values']) ? $form_state['values'] : array();

    // Decide the visibility rule.
    $visibility_rule = '';
    $conf = array();
    if (!empty($form_state_values)) {
      $visibility_rule = $form_state_values[$name]['visibility_rule'];
      $conf = $form_state_values[$name]['visibility_settings'];
    }
    elseif (!empty($default_visibility_rules)) {
      $visibility_rule = $default_visibility_rules[$name]['visibility_rule'];
      $conf = !empty($default_visibility_rules[$name]['visibility_settings']) ? $default_visibility_rules[$name]['visibility_settings'] : array();
    }
    if (!empty($visibility_rule) && $visibility_rule != 'none') {
      $form[$name]['visibility_settings']['#title'] = t('Settings');
      $plugin = ctools_get_access_plugin($visibility_rule);
      if ($function = ctools_plugin_get_function($plugin, 'settings form')) {
        $test_form = array();
        $test_form['settings'] = array(
          '#tree' => TRUE,
        );
        $form_state['plugin'] = $plugin;
        $test_form = $function($test_form, $form_state, $conf);
        if (!empty($test_form['settings'])) {
          $form[$name]['visibility_settings'] += $test_form['settings'];
        }
      }
      $form[$name]['visibility_settings']['not'] = array(
        '#type' => 'checkbox',
        '#title' => t('Reverse (NOT)'),
        '#default_value' => !empty($conf['not']),
      );
    }
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Save',
  );
  return $form;
}