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;
}