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(
'<',
'>',
'<br>',
' ',
), $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[] = '<front>';
}
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;
}