rules_action_drupal_goto

6 system.rules.inc rules_action_drupal_goto($settings)
7 system.eval.inc rules_action_drupal_goto($url, $force = FALSE, $destination = FALSE)

Action Implementation: Page redirect.

Related topics

File

contributions/rules/rules/modules/system.rules.inc, line 170
rules integration for the system module

Code

<?php
function rules_action_drupal_goto($settings) {
  // For settings backward compatibility respect the override setting as default
  $settings += array('immediate' => isset($settings['override']) && !$settings['override']);
  extract($settings);

  if ($force) {
    if (strpos($query, 'destination') === FALSE) {
      if (!empty($query)) {
        $query .= '&';
      }
      // Keep the current destination parameter if there is one.
      $query .= isset($_REQUEST['destination']) ? 'destination=' . urlencode($_REQUEST['destination']) : NULL;
    }
    unset($_REQUEST['destination']);
  }
  if ($immediate) {
    drupal_goto($path, $query ? $query : NULL, $fragment ? $fragment : NULL);
  }
  else {
    // If someone else issues a drupal_goto(), we hijack it by setting the destination parameter
    // But obey any already set destination parameter.
    if (!isset($_REQUEST['destination'])) {
      $_REQUEST['destination'] = urlencode($path) . ($query ? '?' . urlencode($query) : '') . ($fragment ? '#' . urlencode($fragment) : '');
    }
    // This lets _rules_action_drupal_goto_handler() invoke drupal_goto before the page is output.
    $GLOBALS['_rules_action_drupal_goto_do'] = TRUE;
  }
}
?>