From ccd093b15d7df88039b80c5a70a00762e34b51cd Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Fri, 29 May 2009 19:51:43 +0000 Subject: - Patch #423196 by frega, Xano, alienbrain et al: clean up the URL settings page. --- modules/system/system.admin.inc | 57 ++++++++++++++++++++++++++--------------- modules/system/system.js | 13 ++-------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index 55233f328..83cca4ad2 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -1723,36 +1723,53 @@ function system_site_maintenance_mode() { } /** - * Form builder; Configure Clean URL settings. + * Form builder; Configure clean URL settings. * * @ingroup forms * @see system_settings_form() */ function system_clean_url_settings() { - $form['clean_url'] = array( - '#type' => 'radios', - '#title' => t('Clean URLs'), - '#default_value' => 0, - '#options' => array(t('Disabled'), t('Enabled')), - '#description' => t('This option makes Drupal emit "clean" URLs (i.e. without ?q= in the URL).'), - ); + global $base_url; - if (!variable_get('clean_url', 0)) { - if (strpos(request_uri(), '?q=') !== FALSE) { - drupal_add_js(drupal_get_path('module', 'system') . '/system.js'); + // When accessing this form using a non-clean URL, allow a re-check to make + // sure clean URLs can be disabled at all times. + $available = FALSE; + if (strpos(request_uri(), '?q=') === FALSE || drupal_get_session('clean_url')) { + $available = TRUE; + } + else { + $request = drupal_http_request($base_url . '/admin/settings/clean-urls/check'); + if (isset($request->code) && $request->code == 200) { + $available = TRUE; + } + } - $form['clean_url']['#description'] .= ' ' . t('Before enabling clean URLs, you must perform a test to determine if your server is properly configured. If you are able to see this page again after clicking the "Run the clean URL test" link, the test has succeeded and the radio buttons above will be available. If instead you are directed to a "Page not found" error, you will need to change the configuration of your server. The handbook page on Clean URLs has additional troubleshooting information.', array('@handbook' => 'http://drupal.org/node/15365')) . ''; + if ($available) { + drupal_set_session('clean_url', TRUE); - $form['clean_url']['#disabled'] = TRUE; - $form['clean_url']['#prefix'] = '
'; - $form['clean_url']['#suffix'] = '

' . t('Run the clean url test.', array('@clean_url' => base_path() . 'admin/settings/clean-urls')) . '

'; - } - else { - $form['clean_url']['#description'] .= '
' . t('Your server has been successfully tested to support this feature.') . '
'; - } + $form['clean_url'] = array( + '#type' => 'checkbox', + '#title' => t('Enable clean URLs'), + '#default_value' => 0, + '#description' => t('Use URLs like example.com/user instead of example.com/?q=user.'), + ); + $form = system_settings_form($form); } + else { + drupal_add_js(drupal_get_path('module', 'system') . '/system.js'); - return system_settings_form($form, TRUE); + $form['#redirect'] = $base_url . '/admin/settings/clean-urls'; + $form['clean_url_description'] = array( + '#type' => 'markup', + '#markup' => '

' . t('Use URLs like example.com/user instead of example.com/?q=user.') . ' ' . t('If you are directed 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; } /** diff --git a/modules/system/system.js b/modules/system/system.js index 876537783..d589af166 100644 --- a/modules/system/system.js +++ b/modules/system/system.js @@ -17,21 +17,12 @@ Drupal.behaviors.cleanURLsSettingsCheck = { return; } var url = settings.basePath + 'admin/settings/clean-urls/check'; - $('#clean-url .description span').html('
' + Drupal.t('Testing clean URLs...') + '
'); - $('#clean-url p').hide(); $.ajax({ url: location.protocol + '//' + location.host + url, dataType: 'json', success: function () { - // Check was successful. - $('#clean-url input.form-radio').attr('disabled', false); - $('#clean-url .description span').append('
' + Drupal.t('Your server has been successfully tested to support this feature.') + '
'); - $('#testing').hide(); - }, - error: function () { - // Check failed. - $('#clean-url .description span').append('
' + Drupal.t('Your system configuration does not currently support this feature. The handbook page on Clean URLs has additional troubleshooting information.') + '
'); - $('#testing').hide(); + // Check was successful. Redirect using a "clean URL". This will force the form that allows enabling clean URLs. + location = settings.basePath +"admin/settings/clean-urls"; } }); $('#clean-url').addClass('clean-url-processed'); -- cgit v1.2.3