function system_themes_form_submit in Drupal 6
Process system_themes_form form submissions.
File
- modules/
system/ system.admin.inc, line 271 - Admin page callbacks for the system module.
Code
function system_themes_form_submit($form, &$form_state) {
drupal_clear_css_cache();
// Store list of previously enabled themes and disable all themes
$old_theme_list = $new_theme_list = array();
foreach (list_themes() as $theme) {
if ($theme->status) {
$old_theme_list[] = $theme->name;
}
}
db_query("UPDATE {system} SET status = 0 WHERE type = 'theme'");
if ($form_state['values']['op'] == t('Save configuration')) {
if (is_array($form_state['values']['status'])) {
foreach ($form_state['values']['status'] as $key => $choice) {
// Always enable the default theme, despite its status checkbox being checked:
if ($choice || $form_state['values']['theme_default'] == $key) {
system_initialize_theme_blocks($key);
$new_theme_list[] = $key;
db_query("UPDATE {system} SET status = 1 WHERE type = 'theme' and name = '%s'", $key);
}
}
}
if (($admin_theme = variable_get('admin_theme', '0')) != '0' && $admin_theme != $form_state['values']['theme_default']) {
drupal_set_message(t('Please note that the <a href="!admin_theme_page">administration theme</a> is still set to the %admin_theme theme; consequently, the theme on this page remains unchanged. All non-administrative sections of the site, however, will show the selected %selected_theme theme by default.', array(
'!admin_theme_page' => url('admin/settings/admin'),
'%admin_theme' => $admin_theme,
'%selected_theme' => $form_state['values']['theme_default'],
)));
}
variable_set('theme_default', $form_state['values']['theme_default']);
}
else {
// Revert to defaults: only Garland is enabled.
variable_del('theme_default');
db_query("UPDATE {system} SET status = 1 WHERE type = 'theme' AND name = 'garland'");
$new_theme_list = array(
'garland',
);
}
list_themes(TRUE);
menu_rebuild();
drupal_rebuild_theme_registry();
drupal_set_message(t('The configuration options have been saved.'));
$form_state['redirect'] = 'admin/build/themes';
// Notify locale module about new themes being enabled, so translations can
// be imported. This might start a batch, and only return to the redirect
// path after that.
module_invoke('locale', 'system_update', array_diff($new_theme_list, $old_theme_list));
return;
}