You are here

function access_filter_boot in Access Filter 7

Implements hook_boot().

File

./access_filter.module, line 76
Allows users to manage access filters.

Code

function access_filter_boot() {

  // Always allow access when running in CLI mode for Drush.
  if (drupal_is_cli()) {
    return;
  }
  global $conf;
  if (!empty($conf['access_filter_disabled'])) {
    return;
  }
  include_once DRUPAL_ROOT . '/includes/common.inc';
  include_once DRUPAL_ROOT . '/' . variable_get('path_inc', 'includes/path.inc');
  include_once DRUPAL_ROOT . '/includes/password.inc';
  include_once DRUPAL_ROOT . '/includes/session.inc';

  // Ensure $language_url for drupal_lookup_path().
  global $language_url;
  if (!$language_url) {
    include_once DRUPAL_ROOT . '/includes/locale.inc';
    include_once DRUPAL_ROOT . '/includes/language.inc';
    $languages = language_list();
    $saveq = $_GET['q'];
    $_GET['q'] = request_path();
    $language_code = locale_language_from_url($languages);
    $_GET['q'] = $saveq;
    if ($language_code) {
      $language_url = $languages[$language_code];
    }
  }
  if (!$language_url) {
    $language_url = language_default();
  }

  // Also ensure $language for check_markup().
  global $language;
  if (!$language) {
    $language = $language_url;
  }

  // Retrieve filters.
  global $_access_filter_fast_mode_enabled;
  $_access_filter_fast_mode_enabled = TRUE;
  $filters = NULL;
  if (isset($conf['access_filter_fast'])) {
    $filters = unserialize($conf['access_filter_fast']);
  }
  if (!$filters) {
    $filters = access_filter_load_all();
    $_access_filter_fast_mode_enabled = FALSE;
  }

  // Check access.
  foreach ($filters as $filter) {
    if (access_filter_check_access($filter)) {
      continue;
    }
    if ($filter->deny_action_settings->force_logout) {
      global $user;
      if ($user->uid) {
        watchdog('access_filter', 'Session closed for %name.', array(
          '%name' => $user->name,
        ));
        module_invoke_all('user_logout', $user);
        session_destroy();
      }
    }
    switch ($filter->deny_action_settings->type) {
      case ACCESS_FILTER_DENY_ACTION_403:
      case ACCESS_FILTER_DENY_ACTION_404:
      case ACCESS_FILTER_DENY_ACTION_200:
      default:

        // Replace response code.
        header('HTTP', TRUE, $filter->deny_action_settings->type);

        // Print formatted message.
        module_load_include('module', 'filter');
        $message = $filter->deny_action_settings->error_message;
        echo check_markup($message['value'], $message['format']);
        break;
      case ACCESS_FILTER_DENY_ACTION_301:
      case ACCESS_FILTER_DENY_ACTION_302:
        drupal_goto($filter->deny_action_settings->redirect_destination, array(), $filter->deny_action_settings->type);
        break;
    }
    drupal_exit();
  }
}