* @link http://www.albin.net */ /** * Implementation of hook_form_alter(). * * @param string $form_id * @param &array $form * @return void */ 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') ? '' : str_replace(array('theme_', '_settings'), array('', ''), $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 settings.php file $themes = system_theme_data(); // if (!empty($themes[$key]->base_theme) $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 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 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; } }