- Patch #629902 by andypost, JohnAlbin, David_Rothstein: critical bug: theme_get_setting() should return NULL for features that are disabled in a theme.

merge-requests/26/head
Dries Buytaert 2010-03-26 12:45:20 +00:00
parent 866a2baeeb
commit 32bc8911b1
2 changed files with 33 additions and 22 deletions

View File

@ -1152,18 +1152,12 @@ function theme_get_setting($setting_name, $theme = NULL) {
'favicon_path' => '',
// Use the IANA-registered MIME type for ICO files as default.
'favicon_mimetype' => 'image/vnd.microsoft.icon',
'main_menu' => 1,
'secondary_menu' => 1,
'toggle_logo' => 1,
'toggle_favicon' => 1,
'toggle_name' => 1,
'toggle_slogan' => 1,
'toggle_node_user_picture' => 1,
'toggle_comment_user_picture' => 1,
'toggle_comment_user_verification' => 1,
'toggle_main_menu' => 1,
'toggle_secondary_menu' => 1,
);
// Turn on all default features.
$features = _system_default_theme_features();
foreach ($features as $feature) {
$cache[$theme]['toggle_' . $feature] = 1;
}
// Get the values for the theme-specific settings from the .info files of
// the theme and all its base themes.
@ -1193,6 +1187,16 @@ function theme_get_setting($setting_name, $theme = NULL) {
// Get the saved theme-specific settings from the database.
$cache[$theme] = array_merge($cache[$theme], variable_get('theme_' . $theme . '_settings', array()));
// If the theme does not support a particular feature, override the global
// setting and set the value to NULL.
if (!empty($theme_object->info['features'])) {
foreach ($features as $feature) {
if (!in_array($feature, $theme_object->info['features'])) {
$cache[$theme]['toggle_' . $feature] = NULL;
}
}
}
// Generate the path to the logo image.
if ($cache[$theme]['toggle_logo']) {
if ($cache[$theme]['default_logo']) {

View File

@ -2316,17 +2316,7 @@ function _system_rebuild_theme_data() {
'page_bottom' => 'Page bottom',
),
'description' => '',
'features' => array(
'comment_user_picture',
'comment_user_verification',
'favicon',
'logo',
'name',
'node_user_picture',
'slogan',
'main_menu',
'secondary_menu',
),
'features' => _system_default_theme_features(),
'screenshot' => 'screenshot.png',
'php' => DRUPAL_MINIMUM_PHP,
);
@ -2432,6 +2422,23 @@ function system_rebuild_theme_data() {
return $themes;
}
/**
* Returns an array of default theme features.
*/
function _system_default_theme_features() {
return array(
'logo',
'favicon',
'name',
'slogan',
'node_user_picture',
'comment_user_picture',
'comment_user_verification',
'main_menu',
'secondary_menu',
);
}
/**
* Find all the base themes for the specified theme.
*