You are here

function system_themes_form in Drupal 6

Menu callback; displays a listing of all themes.

See also

system_themes_form_submit()

Related topics

2 string references to 'system_themes_form'
system_menu in modules/system/system.module
Implementation of hook_menu().
update_form_alter in modules/update/update.module
Implementation of hook_form_alter().

File

modules/system/system.admin.inc, line 188
Admin page callbacks for the system module.

Code

function system_themes_form() {
  $themes = system_theme_data();
  uasort($themes, 'system_sort_modules_by_info_name');
  $status = array();
  $incompatible_core = array();
  $incompatible_php = array();
  foreach ($themes as $theme) {
    $screenshot = NULL;

    // Create a list which includes the current theme and all its base themes.
    if (isset($themes[$theme->name]->base_themes)) {
      $theme_keys = array_keys($themes[$theme->name]->base_themes);
      $theme_keys[] = $theme->name;
    }
    else {
      $theme_keys = array(
        $theme->name,
      );
    }

    // Look for a screenshot in the current theme or in its closest ancestor.
    foreach (array_reverse($theme_keys) as $theme_key) {
      if (isset($themes[$theme_key]) && file_exists($themes[$theme_key]->info['screenshot'])) {
        $screenshot = $themes[$theme_key]->info['screenshot'];
        break;
      }
    }
    $screenshot = $screenshot ? theme('image', $screenshot, t('Screenshot for %theme theme', array(
      '%theme' => $theme->info['name'],
    )), '', array(
      'class' => 'screenshot',
    ), FALSE) : t('no screenshot');
    $form[$theme->name]['screenshot'] = array(
      '#value' => $screenshot,
    );
    $form[$theme->name]['info'] = array(
      '#type' => 'value',
      '#value' => $theme->info,
    );
    $options[$theme->name] = '';
    if (!empty($theme->status) || $theme->name == variable_get('admin_theme', '0')) {
      $form[$theme->name]['operations'] = array(
        '#value' => l(t('configure'), 'admin/build/themes/settings/' . $theme->name),
      );
    }
    else {

      // Dummy element for drupal_render. Cleaner than adding a check in the theme function.
      $form[$theme->name]['operations'] = array();
    }
    if (!empty($theme->status)) {
      $status[] = $theme->name;
    }
    else {

      // Ensure this theme is compatible with this version of core.
      if (!isset($theme->info['core']) || $theme->info['core'] != DRUPAL_CORE_COMPATIBILITY) {
        $incompatible_core[] = $theme->name;
      }
      if (version_compare(phpversion(), $theme->info['php']) < 0) {
        $incompatible_php[$theme->name] = $theme->info['php'];
      }
    }
  }
  $form['status'] = array(
    '#type' => 'checkboxes',
    '#options' => $options,
    '#default_value' => $status,
    '#incompatible_themes_core' => drupal_map_assoc($incompatible_core),
    '#incompatible_themes_php' => $incompatible_php,
  );
  $form['theme_default'] = array(
    '#type' => 'radios',
    '#options' => $options,
    '#default_value' => variable_get('theme_default', 'garland'),
  );
  $form['buttons']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
  );
  $form['buttons']['reset'] = array(
    '#type' => 'submit',
    '#value' => t('Reset to defaults'),
  );
  return $form;
}