function system_view_general

You are here

4.6 system.module system_view_general()
4.7 system.module system_view_general()
1 call to system_view_general()
system_site_settings in modules/system.module
Menu callback; displays a module's settings page.

File

modules/system.module, line 248
Configuration system that lets administrators modify the workings of the site.

Code

function system_view_general() {
  // General settings:
  $form['general'] = array(
    '#type' => 'fieldset',
    '#title' => t('General settings'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['general']['site_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#default_value' => variable_get('site_name', 'drupal'),
    '#description' => t('The name of this web site.'),
    '#required' => TRUE,
  );
  $form['general']['site_mail'] = array(
    '#type' => 'textfield',
    '#title' => t('E-mail address'),
    '#default_value' => variable_get('site_mail', ini_get('sendmail_from')),
    '#description' => t('A valid e-mail address for this website, used by the auto-mailer during registration, new password requests, notifications, etc.'),
  );
  $form['general']['site_slogan'] = array(
    '#type' => 'textfield',
    '#title' => t('Slogan'),
    '#default_value' => variable_get('site_slogan', ''),
    '#description' => t('The slogan of this website. Some themes display a slogan when available.'),
  );

  $form['general']['site_mission'] = array(
    '#type' => 'textarea',
    '#title' => t('Mission'),
    '#default_value' => variable_get('site_mission', ''),
    '#description' => t('Your site\'s mission statement or focus.'),
  );
  $form['general']['site_footer'] = array(
    '#type' => 'textarea',
    '#title' => t('Footer message'),
    '#default_value' => variable_get('site_footer', ''),
    '#description' => t('This text will be displayed at the bottom of each page.  Useful for adding a copyright notice to your pages.'),
  );
  $form['general']['anonymous'] = array(
    '#type' => 'textfield',
    '#title' => t('Anonymous user'),
    '#default_value' => variable_get('anonymous', 'Anonymous'),
    '#description' => t('The name used to indicate anonymous users.'),
  );
  $form['general']['site_frontpage'] = array(
    '#type' => 'textfield',
    '#title' => t('Default front page'),
    '#default_value' => variable_get('site_frontpage', 'node'),
    '#description' => t('The home page displays content from this relative URL.  Use an existing system path, for example: node/28, forum/1, taxonomy/term/1+2.  If unsure, specify "node".'),
  );

  // We check for clean URL support using an image on the client side.
  $form['general']['clean_url'] = array(
    '#type' => 'radios',
    '#title' => t('Clean URLs'),
    '#default_value' => variable_get('clean_url', 0),
    '#options' => array(t('Disabled'), t('Enabled')),
    '#description' => t('This option makes Drupal emit "clean" URLs (i.e. without <code>?q=</code> in the URL.)'),
  );

  if (!variable_get('clean_url', 0)) {
    if (strpos(request_uri(), '?q=') !== FALSE) {
      $form['general']['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 <a href="%handbook">handbook page on Clean URLs</a> has additional troubleshooting information. %run-test', array('%handbook' => 'http://drupal.org/node/15365', '%run-test' => '<a href ="' . base_path() . 'admin/settings">' . t('Run the clean URL test') . '</a>'));
      $form['general']['clean_url']['#attributes'] = array('disabled' => 'disabled');
    }
    else {
      $form['general']['clean_url']['#description'] .= t(' You have successfully demonstrated that clean URLs work on your server. You are welcome to enable/disable them as you wish.');
      $form['general']['#collapsed'] = FALSE;
    }
  }

  // Error handling:

  $form['errors'] = array(
    '#type' => 'fieldset',
    '#title' => t('Error handling'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['errors']['site_403'] = array(
    '#type' => 'textfield',
    '#title' => t('Default 403 (access denied) page'),
    '#default_value' => variable_get('site_403', ''),
    '#description' => t('This page is displayed when the requested document is denied to the current user.  Use an existing system path, for example: node/28, forum/1, taxonomy/term/1+2. If unsure, specify nothing.'),
  );

  $form['errors']['site_404'] = array(
    '#type' => 'textfield',
    '#title' => t('Default 404 (not found) page'),
    '#default_value' => variable_get('site_404', ''),
    '#description' => t('This page is displayed when no other content matches the requested document.  Use an existing system path, for example: node/28, forum/1, taxonomy/term/1+2. If unsure, specify nothing.'),
  );

  $form['errors']['error_level'] = array(
    '#type' => 'select',
    '#title' => t('Error reporting'),
    '#default_value' => variable_get('error_level', 1),
    '#options' => array(t('Write errors to the log'), t('Write errors to the log and to the screen')),
    '#description' => t('Where Drupal, PHP and SQL errors are logged. On a production server it is recommended that errors are only written to the error log. On a test server it can be helpful to write logs to the screen.'),
  );

  $period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
  $period['1000000000'] = t('Never');
  $form['errors']['watchdog_clear'] = array(
    '#type' => 'select',
    '#title' => t('Discard log entries older than'),
    '#default_value' => variable_get('watchdog_clear', 604800),
    '#options' => $period,
    '#description' => t('The time log entries should be kept.  Older entries will be automatically discarded.  Requires crontab.'),
  );


  // Caching:
  $form['cache'] = array(
    '#type' => 'fieldset',
    '#title' => t('Cache settings'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );

  $form['cache']['cache'] = array(
    '#type' => 'radios',
    '#title' => t('Page cache'),
    '#default_value' => variable_get('cache', CACHE_DISABLED),
    '#options' => array(
      CACHE_DISABLED => t('Disabled'),
      CACHE_ENABLED => t('Enabled'),
    ),
    '#description' => t("Drupal has a caching mechanism which stores dynamically generated web pages in a database.  By caching a web page, Drupal does not have to create the page each time someone wants to view it, instead it takes only one SQL query to display it, reducing response time and the server's load.  Only pages requested by \"anonymous\" users are cached.  In order to reduce server load and save bandwidth, Drupal stores and sends compressed cached pages."),
  );

  $period = drupal_map_assoc(array(0, 60, 180, 300, 600, 900, 1800, 2700, 3600, 10800, 21600, 32400, 43200, 86400), 'format_interval');
  $period[0] = t('none');
  $form['cache']['cache_lifetime'] = array(
    '#type' => 'select',
    '#title' => t('Minimum cache lifetime'),
    '#default_value' => variable_get('cache_lifetime', 0),
    '#options' => $period,
    '#description' => t('Enabling the cache will offer a sufficient performance boost for most low-traffic and medium-traffic sites.  On high-traffic sites it can become necessary to enforce a minimum cache lifetime.  The minimum cache lifetime is the minimum amount of time that will go by before the cache is emptied and recreated.  A larger minimum cache lifetime offers better performance, but users will not see new content for a longer period of time.'),
  );


  // File system:
  $form['files'] = array(
    '#type' => 'fieldset',
    '#title' => t('File system settings'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );

  $form['files']['file_directory_path'] = array(
    '#type' => 'textfield',
    '#title' => t('File system path'),
    '#default_value' => file_directory_path(),
    '#maxlength' => 255,
    '#description' => t('A file system path where the files will be stored. This directory has to exist and be writable by Drupal. If the download method is set to public this directory has to be relative to Drupal installation directory, and be accessible over the web. When download method is set to private this directory should not be accessible over the web. Changing this location after the site has been in use will cause problems so only change this setting on an existing site if you know what you are doing.'),
    '#after_build' => array('system_check_directory'),
  );

  $form['files']['file_directory_temp'] = array(
    '#type' => 'textfield',
    '#title' => t('Temporary directory'),
    '#default_value' => file_directory_temp(),
    '#maxlength' => 255,
    '#description' => t('Location where uploaded files will be kept during previews. Relative paths will be resolved relative to the Drupal installation directory.'),
    '#after_build' => array('system_check_directory'),
  );

  $form['files']['file_downloads'] = array(
    '#type' => 'radios',
    '#title' => t('Download method'),
    '#default_value' => variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC),
    '#options' => array(
      FILE_DOWNLOADS_PUBLIC => t('Public - files are available using http directly.'),
      FILE_DOWNLOADS_PRIVATE => t('Private - files are transferred by Drupal.'),
    ),
    '#description' => t('If you want any sort of access control on the downloading of files, this needs to be set to <em>private</em>. You can change this at any time, however all download URLs will change and there may be unexpected problems so it is not recommended.'),
  );

  // Image handling:
  $toolkits_available = image_get_available_toolkits();
  if (count($toolkits_available) > 1) {
    $form['image'] = array(
      '#type' => 'fieldset',
      '#title' => t('Image handling'),
      '#collapsible' => TRUE,
      '#collapsed' => true,
    );
    $form['image']['image_toolkit'] = array(
      '#type' => 'radios',
      '#title' => t('Select an image processing toolkit'),
      '#default_value' => variable_get('image_toolkit', image_get_toolkit()),
      '#options' => $toolkits_available,
      '#validate' => array('image_toolkit_validate' => array('image_toolkit', 'image_toolkit')),
    );
    $form['image']['settings'] = image_toolkit_invoke('settings');
  }

  // Feed settings
  $form['feed'] = array(
    '#type' => 'fieldset',
    '#title' => t('RSS feed settings'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['feed']['feed_default_items'] = array(
    '#type' => 'select',
    '#title' => t('Number of items per feed'),
    '#default_value' => variable_get('feed_default_items', 10),
    '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30)),
    '#description' => t('The default number of items to include in a feed.'),
  );
  $form['feed']['feed_item_length'] = array(
    '#type' => 'select',
    '#title' => t('Display of XML feed items'),
    '#default_value' => variable_get('feed_item_length', 'teaser'),
    '#options' => array(
      'title' => t('Titles only'),
      'teaser' => t('Titles plus teaser'),
      'fulltext' => t('Full text'),
    ),
    '#description' => t('Global setting for the length of XML feed items that are output by default.'),
  );

  // Date settings:
  $zones = _system_zonelist();

  // Date settings: possible date formats
  $dateshort = array(
    'Y-m-d H:i',
    'm/d/Y - H:i',
    'd/m/Y - H:i',
    'Y/m/d - H:i',
    'd.m.Y - H:i',
    'm/d/Y - g:ia',
    'd/m/Y - g:ia',
    'Y/m/d - g:ia',
    'M j Y - H:i',
    'j M Y - H:i',
    'Y M j - H:i',
    'M j Y - g:ia',
    'j M Y - g:ia',
    'Y M j - g:ia',
  );
  $datemedium = array(
    'D, Y-m-d H:i',
    'D, m/d/Y - H:i',
    'D, d/m/Y - H:i',
    'D, Y/m/d - H:i',
    'F j, Y - H:i',
    'j F, Y - H:i',
    'Y, F j - H:i',
    'D, m/d/Y - g:ia',
    'D, d/m/Y - g:ia',
    'D, Y/m/d - g:ia',
    'F j, Y - g:ia',
    'j F Y - g:ia',
    'Y, F j - g:ia',
    'j. F Y - G:i',
  );
  $datelong = array(
    'l, F j, Y - H:i',
    'l, j F, Y - H:i',
    'l, Y,  F j - H:i',
    'l, F j, Y - g:ia',
    'l, j F Y - g:ia',
    'l, Y,  F j - g:ia',
    'l, j. F Y - G:i',
  );

  // Date settings: construct choices for user
  foreach ($dateshort as $f) {
    $dateshortchoices[$f] = format_date(time(), 'custom', $f);
  }
  foreach ($datemedium as $f) {
    $datemediumchoices[$f] = format_date(time(), 'custom', $f);
  }
  foreach ($datelong as $f) {
    $datelongchoices[$f] = format_date(time(), 'custom', $f);
  }

  $form['dates'] = array(
    '#type' => 'fieldset',
    '#title' => t('Date settings'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['dates']['date_default_timezone'] = array(
    '#type' => 'select',
    '#title' => t('Default time zone'),
    '#default_value' => variable_get('date_default_timezone', 0),
    '#options' => $zones,
    '#description' => t('Select the default site time zone.'),
  );

  $form['dates']['configurable_timezones'] = array(
    '#type' => 'radios',
    '#title' => t('Configurable time zones'),
    '#default_value' => variable_get('configurable_timezones', 1),
    '#options' => array(t('Disabled'), t('Enabled')),
    '#description' => t('Enable or disable user-configurable time zones.  When enabled, users can set their own time zone and dates will be updated accordingly.'),
  );

  $form['dates']['date_format_short'] = array(
    '#type' => 'select',
    '#title' => t('Short date format'),
    '#default_value' => variable_get('date_format_short', $dateshort[0]),
    '#options' => $dateshortchoices,
    '#description' => t('The short format of date display.'),
  );

  $form['dates']['date_format_medium'] = array(
    '#type' => 'select',
    '#title' => t('Medium date format'),
    '#default_value' => variable_get('date_format_medium', $datemedium[0]),
    '#options' => $datemediumchoices,
    '#description' => t('The medium sized date display.'),
  );

  $form['dates']['date_format_long'] = array(
    '#type' => 'select',
    '#title' => t('Long date format'),
    '#default_value' => variable_get('date_format_long', $datelong[0]),
    '#options' => $datelongchoices,
    '#description' => t('Longer date format used for detailed display.'),
  );

  $form['dates']['date_first_day'] = array(
    '#type' => 'select',
    '#title' => t('First day of week'),
    '#default_value' => variable_get('date_first_day', 0),
    '#options' => array(
      0 => t('Sunday'),
      1 => t('Monday'),
      2 => t('Tuesday'),
      3 => t('Wednesday'),
      4 => t('Thursday'),
      5 => t('Friday'),
      6 => t('Saturday'),
    ),
    '#description' => t('The first day of the week for calendar views.'),
  );


  // Site off-line/maintenance settings
  $form['site_status'] = array(
    '#type' => 'fieldset',
    '#title' => t('Site maintenance'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );

  $form['site_status']['site_offline'] = array(
    '#type' => 'radios',
    '#title' => t('Site status'),
    '#default_value' => variable_get('site_offline', 0),
    '#options' => array(t('Online'), t('Off-line')),
    '#description' => t('When set to "Online", all visitors will be able to browse your site normally. When set to "Off-line", only users with the "administer site configuration" permission will be able to access your site to perform maintenance; all other visitors will see the site off-line message configured below. Authorized users can log in during "Off-line" mode directly via the <a href="%user-login">user login</a> page.', array('%user-login' => url('user'))),
  );

  $form['site_status']['site_offline_message'] = array(
    '#type' => 'textarea',
    '#title' => t('Site off-line message'),
    '#default_value' => variable_get('site_offline_message', t('%site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('%site' => variable_get('site_name', t('This Drupal site'))))),
    '#description' => t('Message to show visitors when the site is in off-line mode.'),
  );

  // String handling: report status and errors.
  $form['strings'] = array(
    '#type' => 'fieldset',
    '#title' => t('String handling'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['strings'] = array_merge($form['strings'], unicode_settings());

  // Cron: report status and errors.
  $form['cron'] = array(
    '#type' => 'fieldset',
    '#title' => t('Cron jobs'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['cron'] = array_merge($form['cron'], system_cron_settings());

  // Check database setup if necessary
  if (function_exists('db_check_setup') && empty($_POST)) {
    db_check_setup();
  }
  return $form;
}