browscap_block.module in Browscap Block 7
Browscap Block. Block visibility options for mobile devices using Browscap detection.
File
browscap_block.moduleView source
<?php
/**
* @file Browscap Block.
* Block visibility options for mobile devices using Browscap detection.
*/
/**
* Implements hook_form_FORMID_alter().
* @see block_add_block_form()
*/
function browscap_block_form_block_add_block_form_alter(&$form, &$form_state) {
browscap_block_form_block_admin_configure_alter($form, $form_state);
}
/**
* Implements hook_form_FORMID_alter().
* Adds mobile specific visibility options to block configuration form.
* @see block_admin_configure()
*/
function browscap_block_form_block_admin_configure_alter(&$form, &$form_state) {
$result = db_query("SELECT ismobile FROM {browscap_block} WHERE module = :module AND delta = :delta", array(
':module' => $form['module']['#value'],
':delta' => $form['delta']['#value'],
))
->fetchCol();
$default_value = 0;
if (!empty($result)) {
$default_value = $result[0];
}
$form['visibility']['browscap_block'] = array(
'#type' => 'fieldset',
'#title' => t('Is Mobile'),
'#group' => 'visibility',
'#weight' => 6,
'#tree' => true,
'#attached' => array(
'js' => array(
drupal_get_path('module', 'browscap_block') . '/browscap_block.js',
),
),
);
$form['visibility']['browscap_block']['ismobile'] = array(
'#type' => 'radios',
'#title' => t('Hide or show this block in mobile devices'),
'#default_value' => $default_value,
'#options' => array(
0 => t('Not restricted'),
1 => t('Hide in mobile'),
2 => t('Show in mobile only'),
),
);
$form['#submit'][] = 'browscap_block_form_block_admin_configure_submit';
}
/**
* Form submit handler for block configuration form.
* @see browscap_block_form_block_admin_configure_alter()
*/
function browscap_block_form_block_admin_configure_submit($form, &$form_state) {
db_delete('browscap_block')
->condition('module', $form_state['values']['module'])
->condition('delta', $form_state['values']['delta'])
->execute();
$query = db_insert('browscap_block')
->fields(array(
'ismobile',
'module',
'delta',
));
$query
->values(array(
'ismobile' => $form_state['values']['browscap_block']['ismobile'],
'module' => $form_state['values']['module'],
'delta' => $form_state['values']['delta'],
));
$query
->execute();
}
/**
* Implements hook_block_list_alter().
* Check the mobile device specific visibilty settings.
* Remove the block if the visibility conditions are not met.
*/
function browscap_block_block_list_alter(&$blocks) {
global $theme_key;
$browser = browscap_get_browser();
$is_mobile = FALSE;
if (isset($browser['ismobiledevice'])) {
if ($browser['ismobiledevice'] == 1 || variable_get('mobile_switch_ismobiledevice', FALSE)) {
$is_mobile = TRUE;
}
}
$browscap_block = array();
$result = db_query('SELECT module, delta, ismobile FROM {browscap_block}');
foreach ($result as $record) {
$browscap_block[$record->module][$record->delta] = (int) $record->ismobile;
}
foreach ($blocks as $key => $block) {
if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
// This block was added by a contrib module, leave it in the list.
continue;
}
foreach ($browscap_block as $module => $delta) {
if ($module == $block->module) {
foreach ($delta as $delta_key => $delta_value) {
if ($delta_key == $block->delta) {
if ($delta_value == 2 && $is_mobile == FALSE) {
unset($blocks[$key]);
}
if ($delta_value == 1 && $is_mobile == TRUE) {
unset($blocks[$key]);
}
}
}
}
}
}
}
Functions
Name![]() |
Description |
---|---|
browscap_block_block_list_alter | Implements hook_block_list_alter(). Check the mobile device specific visibilty settings. Remove the block if the visibility conditions are not met. |
browscap_block_form_block_add_block_form_alter | Implements hook_form_FORMID_alter(). |
browscap_block_form_block_admin_configure_alter | Implements hook_form_FORMID_alter(). Adds mobile specific visibility options to block configuration form. |
browscap_block_form_block_admin_configure_submit | Form submit handler for block configuration form. |