You are here

function context_respect_reaction_block::block_list in Context Respect 7

Same name and namespace in other branches
  1. 6 plugins/context_respect_reaction_block.inc \context_respect_reaction_block::block_list()

Override of block_list(). An alternative version of block_list() that provides any context enabled blocks.

Overrides context_reaction_block::block_list

File

plugins/context_respect_reaction_block.inc, line 17
Context Respect reaction plugin file.

Class

context_respect_reaction_block
Expose permissions as context reactions.

Code

function block_list($region) {
  module_load_include('module', 'block', 'block');
  $context_blocks =& drupal_static('context_reaction_block_list');
  $contexts = context_active_contexts();
  if (!isset($context_blocks)) {
    $info = $this
      ->get_blocks();
    $context_blocks = array();
    foreach ($contexts as $context) {
      $options = $this
        ->fetch_from_context($context);
      if (!empty($options['blocks'])) {
        foreach ($options['blocks'] as $block) {
          $bid = $block['module'] . '-' . $block['delta'];
          if (!isset($info[$bid])) {
            continue;
          }

          // Copy general block settings.
          $block = (object) array_merge((array) $info[$bid], $block);

          // Set context name and others.
          $block->context = $context->name;
          $block->title = isset($info[$block->bid]->title) ? $info[$block->bid]->title : NULL;
          $block->cache = isset($info[$block->bid]->cache) ? $info[$block->bid]->cache : DRUPAL_NO_CACHE;

          // Check role access
          $role_match = $this
            ->check_role_match($block);

          // Check path access
          $page_match = $this
            ->check_page_match($block);
          if ($page_match && $role_match) {
            $context_blocks[$block->region][$block->bid] = $block;
          }
        }
      }
    }
    $this
      ->is_editable_check($context_blocks);
    foreach ($context_blocks as $r => $blocks) {
      $context_blocks[$r] = _block_render_blocks($blocks);

      // Make blocks editable if allowed.
      if ($this
        ->is_editable_region($r)) {
        foreach ($context_blocks[$r] as $key => $block) {
          $context_blocks[$r][$key] = $this
            ->editable_block($block);
        }
      }

      // Sort blocks.
      uasort($context_blocks[$r], array(
        'context_reaction_block',
        'block_sort',
      ));
    }
  }
  return isset($context_blocks[$region]) ? $context_blocks[$region] : array();
}