You are here

borealis_sb.module in Borealis 7.2

Same filename and directory in other branches
  1. 7 borealis_sb/borealis_sb.module

File

borealis_sb/borealis_sb.module
View source
<?php

/**
 * Implements hook_permission
 */
function borealis_sb_permission() {
  return array(
    'administer block semantics' => array(
      'title' => t('Choose Block Semantics'),
      'description' => t('Set the semantics for a given block.'),
    ),
  );
}

/**
 * Implements hook_form_alter
 */
function borealis_sb_form_alter(&$form, &$form_state, $form_id) {
  if (user_access('administer block semantics')) {

    // Only want this showing up on Block Add and Congigure plages
    if ($form_id == 'block_admin_configure' || $form_id == 'block_add_block_form') {

      // Semantics region.
      $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';
      }

      // Semantics options
      $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,
      );

      // Reweight others.
      $form['regions']['#weight'] = 2;
      $form['visibility_title']['#weight'] = 3;
      $form['visibility']['#weight'] = 4;

      // Custom Validation
      $form['#validate'][] = 'borealis_sb_admin_validate';

      // Custom Submit
      $form['#submit'][] = 'borealis_sb_admin_submit';
    }
  }
}

/**
 * Custom Block Validation
 */
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!'));
  }
}

/**
 * Custom Block Submit Handler
 */
function borealis_sb_admin_submit($form, &$form_state) {

  // Get the Module and Delta
  $module = $form_state['values']['module'];
  $delta = $form_state['values']['delta'];
  $uid = $module . '_' . $delta;

  // // Get the wrapper
  $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 the DB Query turns up nothing, insert, otherwise, update.
  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();
  }
}

/**
 * Implements hook_block_view_alter().
 */
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;
}

/**
 * DB Query for Wrapper
 */
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';
  }
}

/**
 * Implements hook_preprocess_block()
 */
function borealis_sb_preprocess_block(&$vars) {

  // Get block
  $block = $vars['elements']['#block'];

  // dsm($block);
  // If the block has a semantics option, make a template suggestion.
  if (isset($block->semantics)) {
    $markup = check_plain($block->semantics);
    $vars['theme_hook_suggestions'][] = 'block__' . $markup;
  }

  // dsm($vars);
}

/**
 * Implements hook_theme_registry_alter()
**/
function borealis_sb_theme_registry_alter(&$theme_registry) {
  $mod_path = drupal_get_path('module', 'borealis_sb');
  borealis_theme_registry_write($theme_registry, $mod_path);
}

/**
 * Implements hook_ctools_plugin_api
 */
function borealis_sb_ctools_plugin_api($owner, $api) {
  if ($owner == 'borealis_sb' && $api == 'borealis_sb_default') {
    return array(
      'version' => 1,
    );
  }
}

/**
 * Implements hook_
 */

// function borealis_sb_plugin_directory

Functions

Namesort descending Description
borealis_sb_admin_submit Custom Block Submit Handler
borealis_sb_admin_validate Custom Block Validation
borealis_sb_block_view_alter Implements hook_block_view_alter().
borealis_sb_ctools_plugin_api Implements hook_ctools_plugin_api
borealis_sb_form_alter Implements hook_form_alter
borealis_sb_get_wrapper DB Query for Wrapper
borealis_sb_permission Implements hook_permission
borealis_sb_preprocess_block Implements hook_preprocess_block()
borealis_sb_theme_registry_alter Implements hook_theme_registry_alter()