function system_themes_form in Drupal 6
Menu callback; displays a listing of all themes.
See also
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;
}