View source
<?php
function context_help($path, $arg) {
switch ($path) {
case 'admin/help#context':
$output = file_get_contents(drupal_get_path('module', 'context') . '/README.txt');
return module_exists('markdown') ? filter_xss_admin(module_invoke('markdown', 'filter', 'process', 0, -1, $output)) : '<pre>' . check_plain($output) . '</pre>';
}
}
function context_menu_alter(&$items) {
if (variable_get('context_reaction_block_disable_core', FALSE)) {
foreach ($items as $path => $item) {
if (strpos($path, 'admin/build/block') === 0) {
unset($items[$path]);
}
}
}
}
function context_theme() {
$items = array();
$items['context_block_form'] = array(
'arguments' => array(
'form' => array(),
),
'path' => drupal_get_path('module', 'context') . '/theme',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_regions_form'] = array(
'arguments' => array(
'form' => array(),
),
'path' => drupal_get_path('module', 'context') . '/theme',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_editor'] = array(
'arguments' => array(
'form' => array(),
),
'path' => drupal_get_path('module', 'context') . '/theme',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_browser'] = array(
'arguments' => array(
'blocks' => array(),
'context' => array(),
),
'path' => drupal_get_path('module', 'context') . '/theme',
'template' => 'context-block-browser',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_browser_item'] = array(
'arguments' => array(
'block' => array(),
),
'path' => drupal_get_path('module', 'context') . '/theme',
'template' => 'context-block-browser-item',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_editable_block'] = array(
'arguments' => array(
'block' => array(),
),
'path' => drupal_get_path('module', 'context') . '/theme',
'template' => 'context-block-editable-block',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_editable_region'] = array(
'arguments' => array(
'region' => '',
'blocks' => array(),
'editable' => FALSE,
),
'path' => drupal_get_path('module', 'context') . '/theme',
'template' => 'context-block-editable-region',
'file' => 'context_reaction_block.theme.inc',
);
$items['context_block_script_placeholder'] = array(
'arguments' => array(
'text' => NULL,
),
'path' => drupal_get_path('module', 'context') . '/theme',
'file' => 'context_reaction_block.theme.inc',
);
return $items;
}
function context_theme_registry_alter(&$theme_registry) {
$position = array_search('context_preprocess_page', $theme_registry['page']['preprocess functions']);
if ($position !== FALSE) {
unset($theme_registry['page']['preprocess functions'][$position]);
}
$position = array_search('template_preprocess_page', $theme_registry['page']['preprocess functions']);
$position = $position ? $position + 1 : 2;
array_splice($theme_registry['page']['preprocess functions'], $position, 0, 'context_preprocess_page');
if (!in_array('context_page_alter', $theme_registry['page']['preprocess functions'])) {
array_unshift($theme_registry['page']['preprocess functions'], 'context_page_alter');
}
if (!isset($theme_registry['blocks']['type']) || !in_array($theme_registry['blocks']['type'], array(
'base_theme_engine',
'theme_engine',
)) && !isset($theme_registry['blocks']['file'])) {
unset($theme_registry['blocks']['preprocess functions']);
$theme_registry['blocks']['function'] = 'context_blocks';
}
}
function context_ctools_render_alter($info, $page, $args, $contexts, $task, $subtask) {
if ($page && in_array($task['name'], array(
'node_view',
'node_edit',
), TRUE)) {
foreach ($contexts as $ctools_context) {
if ($ctools_context->type === 'node' && !empty($ctools_context->data)) {
context_node_condition($ctools_context->data, $task['name'] === 'node_view' ? 'view' : 'form');
break;
}
}
}
}
function context_nodeapi(&$node, $op, $teaser, $page) {
if ($op == 'view' && $page) {
$object = menu_get_object();
if (isset($object->nid) && $object->nid === $node->nid) {
context_node_condition($node, 'view');
}
}
}
function context_form_alter(&$form, $form_state, $form_id) {
if ($form['#id'] === 'node-form' && arg(0) != 'admin') {
context_node_condition($form['#node'], 'form');
$form['#validate'][] = 'context_form_alter_node_validate';
}
else {
if ($form_id == 'system_modules') {
context_invalidate_cache();
}
}
if (arg(0) === 'admin' && !empty($form_state['post']) && (!isset($form_state['method']) || $form_state['method'] !== 'get')) {
if ($plugin = context_get_plugin('reaction', 'block')) {
$plugin
->rebuild_needed(TRUE);
}
}
}
function context_node_condition(&$node, $op) {
if ($plugin = context_get_plugin('condition', 'node')) {
$plugin
->execute($node, $op);
}
if (module_exists('taxonomy')) {
if ($plugin = context_get_plugin('condition', 'node_taxonomy')) {
$plugin
->execute($node, $op);
}
}
if (module_exists('book')) {
if ($plugin = context_get_plugin('condition', 'book')) {
$plugin
->execute($node, $op);
}
if ($plugin = context_get_plugin('condition', 'bookroot')) {
$plugin
->execute($node, $op);
}
}
drupal_alter('context_node_condition', $node, $op);
}
function context_form_alter_node_validate($form, &$form_state) {
context_node_condition($form['#node'], 'form');
}
function context_form_comment_form_alter(&$form, $form_state) {
if ($nid = $form['nid']['#value']) {
$node = node_load($nid);
context_node_condition($node, 'comment');
}
}
function context_views_pre_view($view, $args) {
if ($plugin = context_get_plugin('condition', 'views')) {
$plugin
->execute($view);
}
}
function context_user($op, &$edit, &$account, $category = NULL) {
if (in_array($op, array(
'view',
'form',
'register',
))) {
if ($plugin = context_get_plugin('condition', 'user_page')) {
$plugin
->execute($account, $op);
}
}
}
function context_blocks($region) {
if ($plugin = context_get_plugin('reaction', 'block')) {
return $plugin
->execute($region);
}
}
function context_links($reset = FALSE) {
static $links;
if (!$links || $reset) {
$contexts = context_active_contexts();
$active_types = array();
$conditions = array(
'node',
'bookroot',
);
foreach ($conditions as $condition) {
foreach ($contexts as $k => $v) {
if (!empty($v->conditions[$condition]['values'])) {
$active_types = array_merge($active_types, array_filter($v->conditions[$condition]['values']));
}
}
}
$links = array();
if (!empty($active_types)) {
foreach ($active_types as $type) {
$add_url = 'node/add/' . str_replace('_', '-', $type);
$item = menu_get_item($add_url);
if ($item && $item['access'] && strpos($_GET['q'], $add_url) !== 0) {
$links[$type] = array(
'title' => t('Add @type', array(
'@type' => node_get_types('name', $type),
)),
'href' => $add_url,
);
}
}
}
drupal_alter('context_links', $links);
uasort($links, 'element_sort');
}
return $links;
}
function context_page_alter(&$vars) {
module_invoke_all('context_page_condition');
module_invoke_all('context_page_reaction');
}
function context_context_page_condition() {
if ($plugin = context_get_plugin('condition', 'menu')) {
$plugin
->execute();
}
if ($plugin = context_get_plugin('condition', 'sitewide')) {
$plugin
->execute(1);
}
if ($plugin = context_get_plugin('condition', 'context')) {
$plugin
->execute();
}
}
function context_context_page_reaction() {
if ($plugin = context_get_plugin('reaction', 'breadcrumb')) {
$plugin
->execute();
}
if ($plugin = context_get_plugin('reaction', 'css_injector')) {
$plugin
->execute();
}
if ($plugin = context_get_plugin('reaction', 'debug')) {
$plugin
->execute();
}
}
function context_preprocess_page(&$vars) {
if ($plugin = context_get_plugin('reaction', 'menu')) {
$plugin
->execute($vars);
}
if ($plugin = context_get_plugin('reaction', 'theme')) {
$plugin
->execute($vars);
}
if ($context_links = context_links()) {
$vars['context_links'] = theme('links', $context_links);
}
else {
$vars['context_links'] = '';
}
}