| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 | <?php/** * Implementation of hook_help(). */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>';  }}/** * Implementation of hook_theme(). */function context_theme() {  $items = array();  if (!module_exists('block')) {    $items['block'] = array(      'render element' => 'elements',      'template' => 'block',      'path' => drupal_get_path('module', 'block'),      'file' => 'block.module',      'template' => 'block',    );  }  $items['context_block_form'] = array(    'render element' => 'form',    'path' => drupal_get_path('module', 'context') . '/theme',    'file' => 'context_reaction_block.theme.inc',  );  $items['context_block_regions_form'] = array(    'render element' => 'form',    'path' => drupal_get_path('module', 'context') . '/theme',    'file' => 'context_reaction_block.theme.inc',  );  $items['context_block_editor'] = array(    'render element' => 'form',    'path' => drupal_get_path('module', 'context') . '/theme',    'file' => 'context_reaction_block.theme.inc',  );  $items['context_block_browser'] = array(    'variables' => 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(    'variables' => array('block' => array()),    'path' => drupal_get_path('module', 'context') . '/theme',    'template' => 'context-block-browser-item',    'file' => 'context_reaction_block.theme.inc',  );  $items['context_block_script_placeholder'] = array(    'variables' => array('text' => NULL),    'path' => drupal_get_path('module', 'context') . '/theme',    'file' => 'context_reaction_block.theme.inc',  );  $items['context_block_edit_wrap'] = array(    'render element' => 'element',    'path' => drupal_get_path('module', 'context') . '/theme',    'file' => 'context_reaction_block.theme.inc',  );  return $items;}/** * Implementation of hook_theme_registry_alter(). */function context_theme_registry_alter(&$theme_registry) {  // Push theme_page() through a context_preprocess to provide  // context-sensitive menus and variables. Ensure that  // context_preprocess_page() comes immediately after  // template_preprocess_page().  $position = array_search('context_preprocess_page', $theme_registry['page']['preprocess functions']);  if ($position !== FALSE) {    unset($theme_registry['page']['preprocess functions'][$position]);  }  // Prevent conflict with i18n_menu.  if (module_exists('i18n_menu')) {    $position = array_search('i18n_menu_preprocess_page', $theme_registry['page']['preprocess functions']);  }  else {    $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');}/** * Implementation of hook_ctools_render_alter(). * Used to detect the presence of a page manager node view or node form. */function context_ctools_render_alter($info, $page, $data) {  extract($data);  // Check for page handlers.  if ($page) {    // Check for node page handler.    if (in_array($task['name'], array('node_view', 'node_edit'), TRUE)) {      foreach ($contexts as $ctools_context) {        if (in_array('node', $ctools_context->type) && !empty($ctools_context->data)) {          context_node_condition($ctools_context->data, $task['name'] === 'node_view' ? 'view' : 'form');          break;        }      }    }    // Check for taxonomy term page handler.    elseif (in_array($task['name'], array('term_view', 'term_edit'), TRUE)) {      foreach ($contexts as $ctools_context) {        if (in_array('taxonomy_term', $ctools_context->type) && !empty($ctools_context->data)) {          if ($plugin = context_get_plugin('condition', 'taxonomy_term')) {            $plugin->execute($ctools_context->data, $task['name'] === 'term_view' ? 'view' : 'form');          }          break;        }      }    }  }}/** * Implementation of hook_entity_prepare_view(). */function context_entity_prepare_view($prepare, $entity_type) {  if ($entity_type === 'taxonomy_term' && count($prepare) === 1) {    $term = reset($prepare);    $menu = menu_get_object('taxonomy_term', 2);    if ($menu && $term->tid == $menu->tid && $plugin = context_get_plugin('condition', 'taxonomy_term')) {      $plugin->execute($term, 'view');    }  }}/** * Implementation of hook_node_view(). */function context_node_view($node, $view_mode) {  $object = menu_get_object();  if (isset($object->nid) && $object->nid === $node->nid) {    context_node_condition($node, 'view');  }}/** * Implementation of hook_form_alter(). */function context_form_alter(&$form, $form_state, $form_id) {  // If the form is an admin for, flag it so that we can force a rebuild if needed.  if (path_is_admin($_GET['q'])) {    $form['#submit'][] = 'context_admin_form_submit';  }  // Trigger the condition in an after_build function to avoid being skipped  // when there are validation errors.  $form['#after_build'][] = 'context_form_alter_node_after_build';}/** * Form #after_build callback for context_form_alter(). */function context_form_alter_node_after_build($form, &$form_state) {  // Prevent this from firing on admin pages... damn form driven apis...  if (!empty($form['#node_edit_form']) && arg(0) != 'admin') {    context_node_condition($form['#node'], 'form');  }  return $form;}/** * Clear out block info cache when an admin area form is submitted. */function context_admin_form_submit(&$form, $form_state) {  if ($plugin = context_get_plugin('reaction', 'block')) {    $plugin->rebuild_needed(TRUE);  }}/** * Centralized node condition call function for the ever increasing number of * ways to get at a node view / node form. */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);    }  }  // Allow other plugins to easily be triggered on node-related events.  drupal_alter('context_node_condition', $node, $op);}/** * Implementation of hook_form_alter() for system_modules_form. */function context_form_system_modules_form_alter(&$form, $form_state) {  context_invalidate_cache();}/** * Implementation of hook_form_alter() for user_profile_form. */function context_form_user_profile_form_alter(&$form, $form_state) {  if ($plugin = context_get_plugin('condition', 'user_page')) {    $plugin->execute($form['#user'], 'form');  }}/** * Implementation of hook_form_alter() for user_register_form. */function context_form_user_register_form_alter(&$form, $form_state) {  if ($plugin = context_get_plugin('condition', 'user_page')) {    $plugin->execute($form['#user'], 'register');  }}/** * Implementation of hook_form_alter() for comment_form. */function context_form_comment_form_alter(&$form, $form_state) {  if ($nid = $form['nid']['#value']) {    $node = node_load($nid);    context_node_condition($node, 'comment');  }}/** * Implementation of hook_views_pre_view(). */function context_views_pre_view($view, $display) {  if ($plugin = context_get_plugin('condition', 'views')) {    $plugin->execute($view);  }  // Support Views overrides of specific entity paths.  if ($view->display_handler->has_path()) {    switch ($view->display_handler->get_option('path')) {      case 'taxonomy/term/%':        if (($term = taxonomy_term_load(arg(2))) && ($plugin = context_get_plugin('condition', 'taxonomy_term'))) {          $plugin->execute($term, 'view');        }        break;      case 'node/%':        if ($node = node_load(arg(1))) {          context_node_condition($node, 'view');        }        break;      case 'user/%':        if (($account = user_load(arg(1))) && ($plugin = context_get_plugin('condition', 'user_page'))) {          $plugin->execute($account, 'view');        }        break;    }  }}/** * Implementation of hook_user(). */function context_user_view($account, $view_mode) {  if ($view_mode === 'full' && $plugin = context_get_plugin('condition', 'user_page')) {    $plugin->execute($account, 'view');  }}/** * Implements hook_page_build(). */function context_page_build(&$page) {  module_invoke_all('context_page_condition');  module_invoke_all('context_page_reaction');  if ($plugin = context_get_plugin('reaction', 'block')) {    $plugin->execute($page);  }  // See block_page_build. Clear static cache b/c in overlay form submissions  // hook_page_build can get called more than once per page load.  drupal_static_reset('context_reaction_block_list');}/** * THEME FUNCTIONS & RELATED ========================================== *//** * Generates an array of links (suitable for use with theme_links) * to the node forms of types associated with current active contexts. */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)) {      // Iterate over active contexts      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_type_get_name($type))), 'href' => $add_url);        }      }    }    drupal_alter('context_links', $links);    uasort($links, 'element_sort');  }  return $links;}/** * Implementation of hook_context_page_condition(). */function context_context_page_condition() {  if ($plugin = context_get_plugin('condition', 'menu')) {    $plugin->execute();  }  if ($plugin = context_get_plugin('condition', 'default')) {    $plugin->execute(1);  }  if ($plugin = context_get_plugin('condition', 'context')) {    $plugin->execute();  }  if ($plugin = context_get_plugin('condition', 'context_all')) {    $plugin->execute();  }}/** * Implementation of hook_context_page_reaction(). */function context_context_page_reaction() {  if ($plugin = context_get_plugin('reaction', 'css_injector')) {    $plugin->execute();  }  if ($plugin = context_get_plugin('reaction', 'debug')) {    $plugin->execute();  }}/** * Implementation of hook_preprocess_page(). */function context_preprocess_page(&$vars) {  if ($plugin = context_get_plugin('reaction', 'theme')) {    $plugin->execute($vars);  }  if ($plugin = context_get_plugin('reaction', 'template_suggestions')) {    $plugin->execute($vars);  }  /*  if ($context_links = context_links()) {    $vars['context_links'] = theme('links', $context_links);  }  else {    $vars['context_links'] = '';  }  */}/*** Implementation of hook_delivery_callback_alter().* Based on menu_position's and menu_trail_by_path's implementations.*/function context_page_delivery_callback_alter() {  if ($plugin = context_get_plugin('reaction', 'menu')) {    $plugin->execute();  }  if ($plugin = context_get_plugin('reaction', 'breadcrumb')) {    $plugin->execute();  }}/** * Implementation of hook_preprocess_html(). */function context_preprocess_html(&$vars) {  if ($plugin = context_get_plugin('reaction', 'theme_html')) {    $plugin->execute($vars);  }}
 |