Commit 5511cdda authored by catch's avatar catch

Issue #171267 by tim.plunkett, chx, NROTC_Webmaster: Fixed form redirects...

Issue #171267 by tim.plunkett, chx, NROTC_Webmaster: Fixed form redirects remove get variables like sort and order.
parent fd352bff
......@@ -1265,7 +1265,7 @@ function drupal_redirect_form($form_state) {
$function($form_state['redirect']);
}
}
drupal_goto(current_path());
drupal_goto(current_path(), array('query' => request()->query->all()));
}
}
......
<?php
/**
* @file
* Definition of Drupal\system\Tests\Form\RedirectTest.
*/
namespace Drupal\system\Tests\Form;
use Drupal\simpletest\WebTestBase;
/**
* Tests form redirection.
*/
class RedirectTest extends WebTestBase {
public static function getInfo() {
return array(
'name' => 'Form redirecting',
'description' => 'Tests functionality of drupal_redirect_form().',
'group' => 'Form API',
);
}
function setUp() {
parent::setUp(array('form_test'));
}
/**
* Tests form redirection.
*/
function testRedirect() {
$path = 'form-test/redirect';
$options = array('query' => array('foo' => 'bar'));
$options['absolute'] = TRUE;
// Test basic redirection.
$edit = array(
'redirection' => TRUE,
'destination' => $this->randomName(),
);
$this->drupalPost($path, $edit, t('Submit'));
$this->assertUrl($edit['destination'], array(), 'Basic redirection works.');
// Test without redirection.
$edit = array(
'redirection' => FALSE,
);
$this->drupalPost($path, $edit, t('Submit'));
$this->assertUrl($path, array(), 'When redirect is set to FALSE, there should be no redirection.');
// Test redirection with query parameters.
$edit = array(
'redirection' => TRUE,
'destination' => $this->randomName(),
);
$this->drupalPost($path, $edit, t('Submit'), $options);
$this->assertUrl($edit['destination'], array(), 'Redirection with query parameters works.');
// Test without redirection but with query parameters.
$edit = array(
'redirection' => FALSE,
);
$this->drupalPost($path, $edit, t('Submit'), $options);
$this->assertUrl($path, $options, 'When redirect is set to FALSE, there should be no redirection, and the query parameters should be passed along.');
// Test redirection back to the original path.
$edit = array(
'redirection' => TRUE,
'destination' => '',
);
$this->drupalPost($path, $edit, t('Submit'));
$this->assertUrl($path, array(), 'When using an empty redirection string, there should be no redirection.');
// Test redirection back to the original path with query parameters.
$edit = array(
'redirection' => TRUE,
'destination' => '',
);
$this->drupalPost($path, $edit, t('Submit'), $options);
$this->assertUrl($path, $options, 'When using an empty redirection string, there should be no redirection, and the query parameters should be passed along.');
}
}
......@@ -212,6 +212,14 @@ function form_test_menu() {
'type' => MENU_CALLBACK,
);
$items['form-test/redirect'] = array(
'title' => 'Redirect test',
'page callback' => 'drupal_get_form',
'page arguments' => array('form_test_redirect'),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
$items['form_test/form-labels'] = array(
'title' => 'Form label test',
'page callback' => 'drupal_get_form',
......@@ -2043,6 +2051,43 @@ function form_test_clicked_button_submit($form, &$form_state) {
drupal_set_message('Submit handler for form_test_clicked_button executed.');
}
/**
* Form builder to detect form redirect.
*/
function form_test_redirect($form, &$form_state) {
$form['redirection'] = array(
'#type' => 'checkbox',
'#title' => t('Use redirection'),
);
$form['destination'] = array(
'#type' => 'textfield',
'#title' => t('Redirect destination'),
'#states' => array(
'visible' => array(
':input[name="redirection"]' => array('checked' => TRUE),
),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
/**
* Form submit handler to test different redirect behaviours.
*/
function form_test_redirect_submit(&$form, &$form_state) {
if (!empty($form_state['values']['redirection'])) {
$form_state['redirect'] = !empty($form_state['values']['destination']) ? $form_state['values']['destination'] : NULL;
}
else {
$form_state['redirect'] = FALSE;
}
}
/**
* Implements hook_form_FORM_ID_alter() for the registration form.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment