You are here

function _18n_panels_fetch_all_panel_displays in Panels 7.3

Returns a list of really all available panel displays.

The list is statically cached. Use the parameter $reset to refresh the list during the same request. Probably returns the same display twice - once with the db based and once the exported one.

@todo I bet there are better ways to solve this mess.

Parameters

bool $reset: Reset the static cache.

Return value

array List of all panel displays.

1 call to _18n_panels_fetch_all_panel_displays()
i18n_panels_i18n_string_list in i18n_panels/i18n_panels.module
Implements hook_i18n_string_list().

File

i18n_panels/i18n_panels.module, line 418
Internationalization (i18n) submodule: Panels translation.

Code

function _18n_panels_fetch_all_panel_displays($reset = FALSE) {
  $displays =& drupal_static(__FUNCTION__, array());
  if (!empty($displays) && !$reset) {
    return $displays;
  }

  // Fetch db based displays.
  $dids = db_select('panels_display')
    ->fields('panels_display', array(
    'did',
  ))
    ->execute()
    ->fetchCol();
  $displays = panels_load_displays($dids);

  // Fetch exported displays.
  ctools_include('export');
  foreach (ctools_export_crud_load_all('panels_display') as $panels_display) {
    if (!empty($panels_display->uuid)) {
      $displays['exported-' . $panels_display->uuid] = $panels_display;
    }
  }

  // Fetch mini panels.
  $mini_panels = ctools_export_crud_load_all('panels_mini');
  foreach ($mini_panels as $pane) {
    if (!empty($pane->display->uuid)) {
      $displays['exported-' . $pane->display->uuid] = $pane->display;
    }
  }

  // Fetch in page manager embedded displays.
  if (module_exists('page_manager')) {
    module_load_include('inc', 'page_manager', 'page_manager.admin');
    $tasks = page_manager_get_tasks_by_type('page');
    $pages = array(
      'operations' => array(),
      'tasks' => array(),
    );
    page_manager_get_pages($tasks, $pages);
    foreach ($pages['tasks'] as $task) {
      $page = page_manager_cache_load($task);
      $task_info = page_manager_get_task_subtasks($page->task);
      foreach ($page->handler_info as $id => $info) {
        $page_manager_handler = $page->handlers[$id];
        if ($page_manager_handler->handler == 'panel_context') {

          // @todo Is there really no better way to check this?
          $is_exported = $page_manager_handler->export_type == (EXPORT_IN_CODE | EXPORT_IN_DATABASE) || isset($page->subtask['storage']) && $page->subtask['storage'] == t('Overridden');
          if (!empty($page_manager_handler->conf['display'])) {
            $panels_display = $page_manager_handler->conf['display'];
            $displays['exported-' . $panels_display->uuid] = $panels_display;
          }
          elseif ($is_exported && isset($page_manager_handler->conf['did'])) {
            $panels_display = panels_load_display($page_manager_handler->conf['did']);
            if (isset($panels_display->uuid)) {
              $displays['exported-' . $panels_display->uuid] = $panels_display;
            }
          }
        }
      }
    }
  }

  // Fetch panelizer displays.
  if (module_exists('panelizer')) {

    // Fetch all default handlers.
    $panelizer_defaults = ctools_export_crud_load_all('panelizer_defaults');
    foreach ($panelizer_defaults as $panelizer_default) {
      $displays['exported-' . $panelizer_default->display->uuid] = $panelizer_default->display;
    }
  }
  return $displays;
}