Issue #171267 by tim.plunkett, chx, NROTC_Webmaster, dcam: Fixed form redirects removes get variables like sort and order.
parent
c6200e83f5
commit
50fce517e5
|
@ -1258,7 +1258,7 @@ function drupal_redirect_form($form_state) {
|
|||
$function($form_state['redirect']);
|
||||
}
|
||||
}
|
||||
drupal_goto($_GET['q']);
|
||||
drupal_goto(current_path(), array('query' => drupal_get_query_parameters()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1308,6 +1308,81 @@ class FormsRebuildTestCase extends DrupalWebTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests form redirection.
|
||||
*/
|
||||
class FormsRedirectTestCase extends DrupalWebTestCase {
|
||||
|
||||
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.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the programmatic form submission behavior.
|
||||
*/
|
||||
|
|
|
@ -151,6 +151,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',
|
||||
|
@ -1643,6 +1651,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.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue