You are here

function block_visibility_block_visibility in Block Visibility 7

Implements hook_block_visibility()

File

./block_visibility.module, line 68

Code

function block_visibility_block_visibility($block) {

  // Only load block_roles once.
  static $block_roles = array();
  if (empty($block_roles)) {
    $role_options = array_map('check_plain', user_roles());
    $result = db_query("SELECT * FROM {block_role}");
    foreach ($result as $record) {
      $block_roles[$record->module][$record->delta][$record->rid] = $role_options[$record->rid];
    }
  }

  // Only load block_node_type once.
  static $block_node_type = array();
  if (empty($block_node_type)) {
    $node_types = node_type_get_names();
    $result = db_query("SELECT * FROM {block_node_type}");
    foreach ($result as $record) {
      $block_node_type[$record->module][$record->delta][$record->type] = $node_types[$record->type];
    }
  }
  $visibilities = array();

  // If the pages column is set then there is a visibility setting for the block.
  if ($block->pages) {
    if ($block->visibility == 2) {
      $visibilities['page'] = array(
        '#title' => t('PHP'),
        '#description' => '<code>' . str_replace(array(
          '<',
          '>',
          "\r\n",
          " ",
        ), array(
          '&lt;',
          '&gt;',
          '<br>',
          '&nbsp;',
        ), $block->pages) . '</code>',
      );
    }
    else {

      // Rewrite pages to include aliases, if applicable.
      $final_pages = array();
      $pages = explode("\n", $block->pages);
      foreach ($pages as $url) {
        $url = trim($url);
        $path_alias = path_load(array(
          'alias' => $url,
        ));
        if ($url == '<front>') {
          $final_pages[] = '&lt;front&gt;';
        }
        elseif (strpos($url, '*') !== FALSE) {
          $final_pages[] = $url;
        }
        elseif (url($url) != '/' . $url) {
          $final_pages[] = substr(url($url), 1) . ' (' . $url . ')';
        }
        elseif ($path_alias) {
          $final_pages[] = $url . ' (' . $path_alias['source'] . ')';
        }
        else {
          $final_pages[] = $url;
        }
      }
      $visibilities['page'] = array(
        '#title' => $block->visibility ? t('Only the listed pages') : t('All pages except those listed'),
        '#description' => implode('<br>', $final_pages),
      );
    }
  }
  if (isset($block_node_type[$block->module][$block->delta])) {
    $visibilities['node_type'] = array(
      '#title' => t('By Content Type'),
      '#description' => implode('<br>', $block_node_type[$block->module][$block->delta]),
    );
  }
  if (isset($block_roles[$block->module][$block->delta])) {
    $visibilities['role'] = array(
      '#title' => t('By Role'),
      '#description' => implode('<br>', $block_roles[$block->module][$block->delta]),
    );
  }
  if ($block->custom) {
    $visibilities['custom'] = array(
      '#title' => ($block->custom = 1) ? t('Customizable, visible by default') : t('Customizable, hidden by default'),
      '#description' => '',
    );
  }

  // TODO: Add context
  return $visibilities;
}