You are here

context_respect.module in Context Respect 7

Same filename and directory in other branches
  1. 6 context_respect.module

Context Respect module file.

File

context_respect.module
View source
<?php

/**
 * @file
 * Context Respect module file.
 */

/*
 * Implements hook_ctools_plugin_api().
 */
function context_respect_ctools_plugin_api($module, $api) {
  if ($module == 'context' && $api == 'plugins') {
    return array(
      'version' => 3,
    );
  }
}

/**
 * Implements hook_context_plugins().
 */
function context_respect_context_plugins() {
  $plugins['context_respect_reaction_block'] = array(
    'handler' => array(
      'path' => drupal_get_path('module', 'context_respect') . '/plugins',
      'file' => 'context_respect_reaction_block.inc',
      'class' => 'context_respect_reaction_block',
      'parent' => 'context_reaction_block',
    ),
  );
  $plugins['context_respect_layouts_reaction_block'] = array(
    'handler' => array(
      'path' => drupal_get_path('module', 'context_respect') . '/plugins',
      'file' => 'context_respect_layouts_reaction_block.inc',
      'class' => 'context_respect_layouts_reaction_block',
      'parent' => 'context_respect_reaction_block',
    ),
  );
  return $plugins;
}

/**
 * Implements hook_context_registry_alter().
 */
function context_respect_context_registry_alter(&$registry) {
  if (!empty($registry['reactions']['block'])) {
    $registry['reactions']['block']['plugin'] = 'context_respect_reaction_block';
    if (module_exists('context_layouts')) {
      $registry['reactions']['block']['plugin'] = 'context_respect_layouts_reaction_block';
    }
  }
}

/**
 * Implements hook_form_alter()
 *
 * By default, when context respect is installed all core block display settings will be
 * followed. This setting allows them to be ignored on a block-by-block level as there are use
 * cases where context should determine display options and "disrespect" context respect.
 */
function context_respect_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id != 'block_admin_configure') {
    return;
  }
  $block = new stdClass();
  $block->bid = "{$form['module']['#value']}-{$form['delta']['#value']}";
  $ignore_page = _context_respect_get_override('context_respect_override_page', $block);
  $ignore_role = _context_respect_get_override('context_respect_override_role', $block);
  $form['visiblity']['context_respect'] = array(
    '#type' => 'fieldset',
    '#title' => t('Context Respect'),
    '#collapsible' => 1,
    '#collapsed' => 1,
    '#weight' => 5,
    '#group' => 'visibility',
  );
  $form['visiblity']['context_respect']['ignore_page'] = array(
    '#type' => 'checkbox',
    '#title' => t('Context Ignore Pages'),
    '#description' => t('Block page display settings will be ignored by context (overriding context respect).'),
    '#default_value' => $ignore_page,
  );
  $form['visiblity']['context_respect']['ignore_role'] = array(
    '#type' => 'checkbox',
    '#title' => t('Context Ignore Roles'),
    '#description' => t('Block role display settings will be ignored by context (overriding context respect).'),
    '#default_value' => $ignore_role,
  );
  $form['#submit'][] = 'context_respect_form_submit';
}

/**
 * Implements hook_form_submit().
 */
function context_respect_form_submit($form, &$form_state) {
  $block = new stdClass();
  $block->bid = "{$form['module']['#value']}-{$form['delta']['#value']}";
  $page_value = isset($form_state['values']['ignore_page']) ? $form_state['values']['ignore_page'] : FALSE;
  $role_value = isset($form_state['values']['ignore_role']) ? $form_state['values']['ignore_role'] : FALSE;
  if ($page_value) {
    _context_respect_set_override('context_respect_override_page', $block, 1);
  }
  else {
    _context_respect_del_override('context_respect_override_page', $block);
  }
  if ($role_value) {
    _context_respect_set_override('context_respect_override_role', $block, 1);
  }
  else {
    _context_respect_del_override('context_respect_override_role', $block);
  }
}

/**
 * Returns the context_respect_override_role values of a block
 * @param $name
 *  - The override name (context_respect_override_role, context_respect_override_page)
 * @param $block
 *   - A block object
 * @return bool|mixed
 */
function _context_respect_get_override($name, $block) {
  $overrides = variable_get($name, false);
  return isset($overrides[$block->bid]) ? $overrides[$block->bid] : FALSE;
}

/**
 * Saves a context_respect_override_page value
 * @param $name
 *  - The override name (context_respect_override_role, context_respect_override_page)
 * @param $block
 *  - The block to save
 * @param $value
 *  - The overriden value. Typically set to 1
 */
function _context_respect_set_override($name, $block, $value) {
  $overrides = variable_get($name, array());
  $overrides[$block->bid] = $value;
  variable_set($name, $overrides);
}

/**
 * Removes an array element from the context respect variable
 *  * @param $name
 *  - The override name (context_respect_override_role, context_respect_override_page)
 * @param $block
 *   - A block object
 */
function _context_respect_del_override($name, $block) {
  $overrides = variable_get($name, array());
  unset($overrides[$block->bid]);
  variable_set($name, $overrides);
}

Functions

Namesort descending Description
context_respect_context_plugins Implements hook_context_plugins().
context_respect_context_registry_alter Implements hook_context_registry_alter().
context_respect_ctools_plugin_api
context_respect_form_alter Implements hook_form_alter()
context_respect_form_submit Implements hook_form_submit().
_context_respect_del_override Removes an array element from the context respect variable
_context_respect_get_override Returns the context_respect_override_role values of a block
_context_respect_set_override Saves a context_respect_override_page value