/**
* Form builder; Configure clean URL settings.
*
* @ingroup forms
* @see system_settings_form()
*/
function system_clean_url_settings($form, &$form_state) {
global $base_url;
$available = FALSE;
$conflict = FALSE;
// If the request uri is a clean URL, clean URLs must be available.
// Otherwise, run a test.
if (strpos(request_uri(), '?q=') === FALSE) {
$available = TRUE;
}
else {
$request = drupal_http_request($base_url . '/admin/config/search/clean-urls/check');
// If the request returns HTTP 200, clean URLs are available.
if (isset($request->code) && $request->code == 200) {
$available = TRUE;
// If the user started the clean URL test, provide explicit feedback.
if (isset($form_state['input']['op']) && $form_state['input']['op'] == t('Run the clean URL test')) {
drupal_set_message(t('The clean URL test passed.'));
}
}
else {
// If the test failed while clean URLs are enabled, make sure clean URLs
// can be disabled.
if (variable_get('clean_url',0)) {
$conflict = TRUE;
// Warn the user of a conflicting situation, unless after processing
// a submitted form.
if (!isset($form_state['input']['op'])) {
drupal_set_message(t('Clean URLs are enabled, but the clean URL test failed. If needed, you can disable clean URLs now.'), 'warning');
}
}
// If the user started the clean URL test, provide explicit feedback.
else if (isset($form_state['input']['op']) && $form_state['input']['op'] == t('Run the clean URL test')) {
drupal_set_message(t('The clean URL test failed.'), 'warning');
}
}
}
if ($available || $conflict) {
$form['clean_url'] = array(
'#type' => 'checkbox',
'#title' => t('Enable clean URLs'),
'#default_value' => variable_get('clean_url', 0),
'#description' => t('Use URLs like example.com/user
instead of example.com/?q=user
.'),
);
$form = system_settings_form($form);
if ($conflict) {
$form_state['redirect'] = $base_url . '?q=/admin/config/search/clean-urls';
}
}
else {
drupal_add_js(drupal_get_path('module', 'system') . '/system.js');
$form_state['redirect'] = $base_url . '/admin/config/search/clean-urls';
$form['clean_url_description'] = array(
'#type' => 'markup',
'#markup' => '
' . t('Use URLs like example.com/user
instead of example.com/?q=user
.'),
);
$form['clean_url_test_result'] = array(
'#type' => 'markup',
'#markup' => '
' . t('Clean URLs cannot be enabled. If you are directed to this page or to a Page not found (404) error after testing for clean URLs, see the online handbook.', array('@handbook' => 'http://drupal.org/node/15365')) . '
', ); $form['clean_url_test'] = array( '#type' => 'submit', '#value' => t('Run the clean URL test'), ); } return $form; }