You are here

function panels_content_block in Panels 6.2

Same name and namespace in other branches
  1. 5.2 content_types/block.inc \panels_content_block()
  2. 5 content_types/block.inc \panels_content_block()

Output function for the 'block' content type. Outputs a block based on the module and delta supplied in the configuration.

1 string reference to 'panels_content_block'
panels_block_panels_content_types in content_types/block.inc
Callback function to supply a list of content types.

File

content_types/block.inc, line 26

Code

function panels_content_block($subtype, $conf) {
  $block = (object) module_invoke($conf['module'], 'block', 'view', $conf['delta']);
  if (empty($block)) {
    return;
  }
  $block->module = $conf['module'];
  $block->delta = $conf['delta'];
  if (user_access('administer blocks')) {
    $block->admin_links = array(
      array(
        'title' => t('Configure block'),
        'alt' => t("Configure this pane's 'block settings' in administer >> site building >> blocks"),
        'href' => "admin/build/block/configure/{$block->module}/{$block->delta}",
        'query' => drupal_get_destination(),
      ),
    );
  }

  // This seems extra but it prevents an unnecessary query sometimes.
  if (empty($conf['block_visibility']) && $block->module != 'block') {
    return $block;
  }

  // Test for block visibility
  $result = db_query("SELECT title, pages, visibility FROM {blocks} WHERE module = '%s' AND delta = '%s'", $block->module, $block->delta);
  $block_visibility = db_fetch_object($result);
  if ($block->module == 'block') {
    $block->title = $block_visibility->title;
  }
  if (empty($conf['block_visibility'])) {
    return $block;
  }
  if ($block_visibility && $block_visibility->pages) {
    if ($block_visibility->visibility < 2) {
      $path = drupal_get_path_alias($_GET['q']);
      $regexp = '/^(' . preg_replace(array(
        '/(\\r\\n?|\\n)/',
        '/\\\\\\*/',
        '/(^|\\|)\\\\<front\\\\>($|\\|)/',
      ), array(
        '|',
        '.*',
        '\\1' . preg_quote(variable_get('site_frontpage', 'node'), '/') . '\\2',
      ), preg_quote($block_visibility->pages, '/')) . ')$/';
      $page_match = !($block_visibility->visibility xor preg_match($regexp, $path));
    }
    else {
      $page_match = drupal_eval($block_visibility->pages);
    }
  }
  else {
    $page_match = TRUE;
  }
  if ($page_match) {
    return $block;
  }
}