--- themesettingsapi.module Thu Dec 13 20:00:48 2007
+++ themesettingsapi_new.module Tue May 27 14:22:29 2008
@@ -18,2 +18,134 @@
/**
+ * Implementation of hook_form_alter().
+ */
+function themesettingsapi_form_alter($form_id, &$form) {
+ switch ($form_id) {
+ case 'system_theme_settings':
+ // Grab the specific name of the theme settings form
+ $key = $form['var']['#value'];
+ $key = ($key == 'theme_settings') ? '' : preg_replace('/(^theme_|_settings$)/', '', $key);
+
+ // Since we are allowing more settings, make logo and favicon collapsible
+ if (empty($key)) {
+ // Fix for small bug in Drupal 5.1
+ $form['theme_settings']['#prefix'] = '
'. $form['theme_settings']['#prefix'];
+ $form['node_info']['#suffix'] = $form['node_info']['#suffix'] .'
';
+ if (isset($form['logo'])) {
+ unset($form['logo']['#attributes']['class']);
+ }
+ }
+ if (isset($form['logo'])) {
+ $form['logo']['#collapsible'] = TRUE;
+ $form['logo']['#collapsed'] = FALSE;
+ }
+ if (isset($form['favicon'])) {
+ $form['favicon']['#collapsible'] = TRUE;
+ $form['favicon']['#collapsed'] = FALSE;
+ // Fix for small bug in Drupal 5.1
+ if (isset($form['favicon']['text']['#value'])) {
+ $form['favicon']['#descripton'] = $form['favicon']['text']['#value'];
+ unset($form['favicon']['text']);
+ }
+ }
+
+ // Move submit buttons to bottom
+ $form['buttons']['#weight'] = 1;
+
+ // Template-specific settings
+ if ($key) {
+ // If the administration theme is not used, switch themes when displaying the theme settings.
+ if (variable_get('admin_theme', '0') == '0' or variable_get('theme_settings_admin_theme', '1') == '0') {
+ global $custom_theme;
+ $custom_theme = $key;
+ init_theme();
+ }
+
+ // Include the theme's theme-settings.php file
+ $themes = system_theme_data();
+ // if (!empty($themes[$key]->base_theme)
+ $filename = './'. str_replace('/'. $themes[$key]->basename, '', $themes[$key]->filename) .'/theme-settings.php';
+ if (!file_exists($filename)) {
+ // If the theme doesn't have a theme-settings.php file, use the base theme's.
+ $base = explode('/', strrev($themes[$key]->owner), 2);
+ $filename = './'. strrev($base[1]) .'/theme-settings.php';
+ }
+ if (file_exists($filename)) {
+ require_once $filename;
+ }
+ else {
+ // Backwards compatibility with 5.x-2.0: allow a settings.php file.
+ $filename = './'. str_replace('/'. $themes[$key]->basename, '', $themes[$key]->filename) .'/settings.php';
+ if (!file_exists($filename)) {
+ // If the theme doesn't have a settings.php file, use the base theme's.
+ $base = explode('/', strrev($themes[$key]->owner), 2);
+ $filename = './'. strrev($base[1]) .'/settings.php';
+ }
+ if (file_exists($filename)) {
+ require_once $filename;
+ }
+ }
+
+ // Since we are adding more settings, make logo and favicon collapsed
+ if (isset($form['logo'])) {
+ $form['logo']['#collapsed'] = TRUE;
+ }
+ if (isset($form['favicon'])) {
+ $form['favicon']['#collapsed'] = TRUE;
+ }
+
+ // Get the theme settings
+ $settings = theme_get_settings($key);
+
+ // Unset the results of the broken 5.x API.
+ unset($form['specific']);
+
+ // Call engine-specific settings.
+ $function = $themes[$key]->prefix .'_engine_settings';
+ if (function_exists($function)) {
+ $group = $function($settings);
+ if (!empty($group)) {
+ $form['engine_specific'] = array('#type' => 'fieldset', '#title' => t('Theme-engine-specific settings'), '#description' => t('These settings only exist for all the templates and styles based on the %engine theme engine.', array('%engine' => $themes[$key]->prefix)));
+ $form['engine_specific'] = array_merge($form['engine_specific'], $group);
+ }
+ }
+
+ // Call theme-specific settings.
+ $function = $key .'_settings';
+ if (!function_exists($function)) {
+ $function = $themes[$key]->prefix .'_settings';
+ }
+ if (function_exists($function)) {
+ $group = $function($settings);
+ if (!empty($group)) {
+ $form['theme_specific'] = array('#type' => 'fieldset', '#title' => t('Theme-specific settings'), '#description' => t('These settings only exist for the %theme theme and all the styles based on it.', array('%theme' => $key)));
+ $form['theme_specific'] = array_merge($form['theme_specific'], $group);
+ }
+ }
+ }
+ break;
+
+ case 'system_admin_theme_settings':
+ // Add a setting to allow theme switching when editing a node (backport of D6 setting)
+ $form['node_admin_theme'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Use administration theme for content editing'),
+ '#description' => t('Use the administration theme when editing existing posts or creating new ones.'),
+ '#default_value' => variable_get('node_admin_theme', '0'),
+ );
+
+ // Add a setting to allow theme switching even with an admin theme
+ $form['theme_settings_admin_theme'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Use administration theme when configuring theme settings'),
+ '#description' => t('If this setting is disabled or if using the "System default" theme, the theme settings pages will be switched to the theme being configured.'),
+ '#default_value' => variable_get('theme_settings_admin_theme', '1'),
+ );
+
+ // Move submit buttons to bottom
+ $form['buttons']['#weight'] = 1;
+ break;
+ }
+}
+
+/**
* Implementation of hook_menu().
@@ -26,9 +158,2 @@
- // Conditionally load on admin/build/themes/settings/* and admin/settings/admin
- if (arg(0) == 'admin'
- && (arg(4) != '' && arg(2) == 'themes' && arg(3) == 'settings' && arg(1) == 'build'
- || arg(2) == 'admin' && arg(1) == 'settings')) {
- include_once('./'. drupal_get_path('module', 'themesettingsapi') .'/themesettingsapi.admin.inc');
- }
-
// Conditionally load the admin theme on node/add/* and node/*/edit
@@ -40,2 +165,2 @@
}
-}
+}
\ No newline at end of file