You are here

function panels_ajax_tab_get_config in Panels Ajax Tabs 7

Get a list of all panels-ajax-tab configs.

This is used to build a list url suffixes to process at boot if so enabled.

1 call to panels_ajax_tab_get_config()
panels_ajax_tab_config_cache in ./panels_ajax_tab.module
Rebuild the URL cache.

File

./panels_ajax_tab.module, line 491
Allows users to create and manage Panels Ajax Tabs.

Code

function panels_ajax_tab_get_config() {
  $config = array();

  // Mini panels.
  if (module_exists('panels_mini')) {
    $panels = panels_mini_load_all();
    foreach ($panels as $panel) {
      if (!empty($panel->display->content)) {
        foreach ($panel->display->content as $pid => $pane) {
          if (in_array($pane->type, array(
            'panels_ajax_tab_tabs',
            'highwire_panel_tabs',
          ))) {
            $pane->configuration['plugin_type'] = $pane->type;
            $container_id = $pane->configuration['container_id'];
            $config[$container_id] = $pane->configuration;
          }
        }
      }
    }
  }

  // Page-manager pages.
  if (module_exists('page_manager')) {

    // Now check all panel pages and ignore all mini panels.
    ctools_include('page', 'page_manager', 'plugins/tasks');
    ctools_include('page_manager.admin', 'page_manager', '');
    ctools_include('export');
    $tasks = page_manager_get_tasks_by_type('page');
    $pages = array();
    foreach ($tasks as $task) {
      if ($task_pages = page_manager_load_task_handlers($task)) {
        $pages = array_merge($pages, $task_pages);
      }
      if ($subtasks = page_manager_get_task_subtasks($task)) {
        foreach ($subtasks as $subtask) {
          $task_pages = page_manager_load_task_handlers($subtask);
          $pages = array_merge($pages, $task_pages);
        }
      }
    }

    // Not all display objects are loaded, make sure to load them.
    foreach ($pages as $page) {
      if (empty($page->conf['display']) && !empty($page->conf['did'])) {
        $page->conf['display'] = panels_load_display($page->conf['did']);
      }
    }
    foreach ($pages as $page) {
      if (empty($page->disabled) && !empty($page->conf['display']->content)) {
        foreach ($page->conf['display']->content as $pid => $pane) {
          if (in_array($pane->type, array(
            'panels_ajax_tab_tabs',
            'highwire_panel_tabs',
          ))) {
            $pane->configuration['plugin_type'] = $pane->type;
            $container_id = $pane->configuration['container_id'];
            $config[$container_id] = $pane->configuration;
          }
        }
      }
    }
  }

  // Post-process the configurations.
  $old_settings = variable_get('panels_ajax_tab', array(
    'clean_url' => FALSE,
    'clean_url_delim' => '/',
    'panes' => array(),
  ));

  // Get the visibility settings, if available.
  $visibility_rules = variable_get('panels_ajax_tab_visibility_rules', array());
  foreach ($config as &$conf) {

    // Remove any unselected mini-panels from the config.
    foreach ($conf['mini_panels'] as $panel_id => $panel_conf) {
      if (!$panel_conf['selected']) {
        unset($conf['mini_panels'][$panel_id]);
      }
    }

    // Sort remaining panels.
    uasort($conf['mini_panels'], 'drupal_sort_weight');

    // Mix in any missing settings. Some settings could be missing due to
    // upgrade path.
    if (!isset($conf['clean_url'])) {
      $conf['clean_url'] = $old_settings['clean_url'];
    }
    if (!isset($conf['clean_url_delim'])) {
      $conf['clean_url_delim'] = $old_settings['clean_url_delim'];
    }

    // Add up visibility.
    $visibility_settings = !empty($visibility_rules[$conf['container_id']]) ? $visibility_rules[$conf['container_id']] : array();
    $conf['visibility_settings'] = !empty($conf['visibility_settings']) ? $conf['visibility_settings'] : $visibility_settings;
  }

  // This goes in an alter hook.
  $old_settings = variable_get('panels_ajax_tab', array(
    'clean_url' => FALSE,
    'clean_url_delim' => '/',
    'panes' => array(),
  ));
  foreach ($config as &$conf) {
    if (!isset($conf['highwire_panel_tab']) && !empty($old_settings['highwire_panel_tab'])) {
      $conf['highwire_panel_tab'] = $old_settings['highwire_panel_tab'];
    }
  }
  return $config;
}