View source
<?php
function borealis_sb_permission() {
return array(
'administer block semantics' => array(
'title' => t('Choose Block Semantics'),
'description' => t('Set the semantics for a given block.'),
),
);
}
function borealis_sb_form_alter(&$form, &$form_state, $form_id) {
if (user_access('administer block semantics')) {
if ($form_id == 'block_admin_configure' || $form_id == 'block_add_block_form') {
$form['semantics'] = array(
'#type' => 'fieldset',
'#title' => t('Semantic settings'),
'#description' => t('Specify the semantic wrapper for the block. Defaults to < div >'),
'#weight' => 1,
);
$wrapper = '';
if ($form_id == 'block_admin_configure') {
$block = block_load($form['module']['#value'], $form['delta']['#value']);
$wrapper = borealis_sb_get_wrapper($block->module, $block->delta);
}
else {
$wrapper = 'div';
}
$form['semantics']['wrapper'] = array(
'#type' => 'select',
'#title' => t('Wrapper'),
'#options' => array(
'div' => '<div>',
'article' => '<article>',
'aside' => '<aside>',
'nav' => '<nav>',
'span' => '<span>',
'none' => t('No Wrapper'),
),
'#default_value' => $wrapper,
);
$form['regions']['#weight'] = 2;
$form['visibility_title']['#weight'] = 3;
$form['visibility']['#weight'] = 4;
$form['#validate'][] = 'borealis_sb_admin_validate';
$form['#submit'][] = 'borealis_sb_admin_submit';
}
}
}
function borealis_sb_admin_validate($form, &$form_state) {
$wrapper_value = $form_state['complete form']['semantics']['wrapper']['#value'];
$wrapper_valid = array(
'div',
'article',
'aside',
'nav',
'span',
'none',
);
if (!in_array($wrapper_value, $wrapper_valid)) {
form_set_error('wrapper', t('What did you do!'));
}
}
function borealis_sb_admin_submit($form, &$form_state) {
$module = $form_state['values']['module'];
$delta = $form_state['values']['delta'];
$uid = $module . '_' . $delta;
$semantics = $form_state['complete form']['semantics']['wrapper']['#value'];
$query = db_select('borealis_sb', 'b')
->fields('b', array(
'semantics',
))
->condition('module', $module)
->condition('delta', $delta)
->execute()
->fetchField();
if (empty($query)) {
db_insert('borealis_sb')
->fields(array(
'uid' => $uid,
'module' => $module,
'delta' => $delta,
'semantics' => $semantics,
))
->execute();
}
else {
db_update('borealis_sb')
->fields(array(
'semantics' => $semantics,
))
->condition('uid', $uid)
->execute();
}
}
function borealis_sb_block_view_alter(&$data, $block) {
$query = borealis_sb_get_wrapper($block->module, $block->delta);
if (!empty($query)) {
$block->semantics = $query;
}
else {
$block->semantics = 'div';
}
return $block;
}
function borealis_sb_get_wrapper($module, $delta) {
ctools_include('export');
$uid = $module . '_' . $delta;
$block = ctools_export_load_object('borealis_sb', 'names', array(
$uid,
));
if (!empty($block)) {
return $block[$uid]->semantics;
}
else {
return 'div';
}
}
function borealis_sb_preprocess_block(&$vars) {
$block = $vars['elements']['#block'];
if (isset($block->semantics)) {
$markup = check_plain($block->semantics);
$vars['theme_hook_suggestions'][] = 'block__' . $markup;
}
}
function borealis_sb_theme_registry_alter(&$theme_registry) {
$mod_path = drupal_get_path('module', 'borealis_sb');
borealis_theme_registry_write($theme_registry, $mod_path);
}
function borealis_sb_ctools_plugin_api($owner, $api) {
if ($owner == 'borealis_sb' && $api == 'borealis_sb_default') {
return array(
'version' => 1,
);
}
}