View source
<?php
function block_visibility_vocabulary_form_block_add_block_form_alter(&$form, &$form_state) {
block_visibility_vocabulary_form_block_admin_configure_alter($form, $form_state);
}
function block_visibility_vocabulary_form_block_admin_configure_alter(&$form, &$form_state) {
$options = array();
foreach (taxonomy_vocabulary_get_names() as $vocabulary) {
$options[$vocabulary->vid] = $vocabulary->name;
}
if ($form['module']['#value'] && $form['delta']['#value']) {
$default_value = block_visibility_vocabulary_settings_get($form['module']['#value'], $form['delta']['#value']);
}
else {
$default_value = array();
}
$form['visibility']['vocabularies'] = array(
'#type' => 'fieldset',
'#title' => t('Vocabularies'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'visibility',
'#weight' => 20,
);
$form['visibility']['vocabularies']['vocabularies'] = array(
'#type' => 'checkboxes',
'#title' => t('Show block for specific vocabularies'),
'#default_value' => $default_value,
'#options' => $options,
'#description' => t('Show this block only on term pages of the given vocabulary. If you select no vocabulary, there will be no limitation.'),
);
$form['#submit'][] = 'block_visibility_vocabulary_form_block_admin_configure_submit';
}
function block_visibility_vocabulary_form_block_admin_configure_submit($form, &$form_state) {
$vocabularies = array_keys(array_filter($form_state['values']['vocabularies']));
$blocks_visibility_settings = block_visibility_vocabulary_settings_get();
$key = $form_state['values']['module'] . ':' . $form_state['values']['delta'];
$blocks_visibility_settings[$key] = $vocabularies;
if (!$vocabularies) {
unset($blocks_visibility_settings[$key]);
}
block_visibility_vocabulary_settings_save($blocks_visibility_settings);
}
function block_visibility_vocabulary_form_block_custom_block_delete_alter(&$form, &$form_state) {
$form['#submit'][] = 'block_visibility_vocabulary_form_block_custom_block_delete_submit';
}
function block_visibility_vocabulary_form_block_custom_block_delete_submit($form, &$form_state) {
$blocks_visibility_settings = block_visibility_vocabulary_settings_get();
$key = 'block:' . $form_state['values']['bid'];
if (isset($blocks_visibility_settings[$key])) {
unset($blocks_visibility_settings[$key]);
block_visibility_vocabulary_settings_save($blocks_visibility_settings);
}
}
function block_visibility_vocabulary_modules_uninstalled($modules) {
$blocks_visibility_settings = block_visibility_vocabulary_settings_get();
foreach ($modules as $module_name) {
foreach ($blocks_visibility_settings as $key => $vocabularies) {
if (strpos($key, $module_name . ':') === 0) {
unset($blocks_visibility_settings[$key]);
}
}
}
block_visibility_vocabulary_settings_save($blocks_visibility_settings);
}
function block_visibility_vocabulary_block_list_alter(&$blocks) {
$blocks_visibility_settings = block_visibility_vocabulary_settings_get();
$term = NULL;
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
$term = taxonomy_term_load(arg(2));
}
foreach ($blocks as $key => $block) {
if (!isset($block->theme) || !isset($block->status) || $block->theme != $GLOBALS['theme_key'] || $block->status != 1) {
continue;
}
$setting_key = $block->module . ':' . $block->delta;
if (!empty($blocks_visibility_settings[$setting_key]) && (!$term || !in_array($term->vid, $blocks_visibility_settings[$setting_key]))) {
unset($blocks[$key]);
}
}
}
function block_visibility_vocabulary_settings_get($block_module = NULL, $block_delta = NULL) {
$settings = variable_get('block_visibility_vocabulary', array());
if ($block_module && $block_delta) {
$key = $block_module . ':' . $block_delta;
if (isset($settings[$key])) {
return $settings[$key];
}
return array();
}
return $settings;
}
function block_visibility_vocabulary_settings_save($settings) {
variable_set('block_visibility_vocabulary', $settings);
}