View source
<?php
$plugin = array(
'task type' => 'page',
'title' => t('Default site template'),
'admin title' => t('Default site template'),
'admin description' => t('When enabled, the site template allows templates to be selectively applied to all pages.'),
'admin path' => FALSE,
'handler type' => 'context',
'get arguments' => 'panels_everywhere_site_template_get_arguments',
'get context placeholders' => 'panels_everywhere_site_template_get_contexts',
'get base contexts' => 'panels_everywhere_site_template_get_base_contexts',
'disabled' => !variable_get('panels_everywhere_site_template_enabled', FALSE),
'enable callback' => 'panels_everywhere_site_template_enable',
'tab title' => t('Edit site template'),
);
function panels_everywhere_site_template_get_arguments($task, $subtask_id) {
$arguments = array();
$arguments[] = array(
'keyword' => 'content',
'identifier' => t('Page content'),
'id' => 1,
'name' => 'page_content',
'settings' => array(),
);
return $arguments;
}
function panels_everywhere_site_template_get_base_contexts($task, $subtask, $placeholders) {
$contexts = array();
$load_taxonomy = FALSE;
if (module_exists('taxonomy')) {
$load_taxonomy = TRUE;
}
if ($placeholders) {
$managed_page = ctools_context_create_empty('managed_page');
$url = ctools_context_create_empty('string');
$alias = ctools_context_create_empty('string');
$node = ctools_context_create_empty('node');
$account = ctools_context_create_empty('user');
if ($load_taxonomy) {
$term = ctools_context_create_empty('entity:taxonomy_term');
}
}
else {
$page = page_manager_get_current_page();
$managed_page = ctools_context_create('managed_page', $page);
$url = ctools_context_create('string', $_GET['q']);
$alias = ctools_context_create('string', drupal_get_path_alias($_GET['q']));
if ($page) {
$node = _panels_everywhere_find_context($page['contexts'], 'node');
$account = _panels_everywhere_find_context($page['contexts'], 'user');
if (isset($account->data->logged_in_user)) {
$account = ctools_context_create_empty('user');
}
if ($load_taxonomy) {
$term = _panels_everywhere_find_context($page['contexts'], 'entity:taxonomy_term');
}
}
else {
$raw_node = _panels_everywhere_find_node_context();
$node = !empty($raw_node) ? ctools_context_create('node', $raw_node) : ctools_context_create_empty('node');
$raw_user = _panels_everywhere_find_user_context();
$account = !empty($raw_user) ? ctools_context_create('user', $raw_user) : ctools_context_create_empty('user');
if ($load_taxonomy) {
$raw_term = _panels_everywhere_find_term_context();
$term = !empty($raw_term) ? ctools_context_create('entity:taxonomy_term', $raw_term) : ctools_context_create_empty('entity:taxonomy_term');
}
}
}
$user_object = user_is_logged_in() ? user_load($GLOBALS['user']->uid) : $GLOBALS['user'];
$user = ctools_context_create('user', $user_object);
panels_everywhere_site_template_add_context($contexts, $url, t('Internal URL'), 'url', 'argument_string_1');
panels_everywhere_site_template_add_context($contexts, $alias, t('Aliased URL'), 'alias', 'alias');
panels_everywhere_site_template_add_context($contexts, $managed_page, t('Managed page'), 'page', 'argument_managed_page_1');
panels_everywhere_site_template_add_context($contexts, $user, t('Logged in user'), 'user', 'logged-in-user');
panels_everywhere_site_template_add_context($contexts, $node, t('Node being viewed'), 'node', 'node');
panels_everywhere_site_template_add_context($contexts, $account, t('User being viewed'), 'account', 'account');
if ($load_taxonomy) {
panels_everywhere_site_template_add_context($contexts, $term, t('Taxonomy term being viewed'), 'term', 'term');
}
drupal_alter('panels_everywhere_contexts', $contexts, $placeholders);
return $contexts;
}
function panels_everywhere_site_template_add_context(&$contexts, &$context, $identifier, $keyword, $id) {
$context->page_title = '';
$context->identifier = $identifier;
$context->keyword = $keyword;
$context->id = $id;
$contexts[$id] = $context;
}
function _panels_everywhere_find_context($contexts, $type) {
$list = ctools_context_filter($contexts, new ctools_context_required('', $type));
if ($list) {
return clone array_shift($list);
}
return ctools_context_create_empty($type);
}
function _panels_everywhere_find_node_context() {
foreach (range(1, 3) as $i) {
$node = menu_get_object('node', $i);
if (!empty($node)) {
return $node;
}
}
if (arg(0) == 'node' && is_numeric(arg(1))) {
return node_load(arg(1));
}
}
function _panels_everywhere_find_user_context() {
foreach (range(1, 3) as $i) {
$user = menu_get_object('user', $i);
if (!empty($user)) {
return $user;
}
}
foreach (range(1, 3) as $i) {
$user = menu_get_object('user_uid_optional', $i);
if (!empty($user)) {
return $user;
}
}
if (arg(0) == 'user' && is_numeric(arg(1))) {
return user_load(arg(1));
}
}
function _panels_everywhere_find_term_context() {
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
return taxonomy_term_load(arg(2));
}
}
function panels_everywhere_site_template_get_contexts($task, $subtask_id) {
return ctools_context_get_placeholders_from_argument(panels_everywhere_site_template_get_arguments($task, $subtask_id));
}
function panels_everywhere_site_template_enable($cache, $status) {
variable_set('panels_everywhere_site_template_enabled', !$status);
}