summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/simpletest/tests/theme.test31
-rw-r--r--modules/simpletest/tests/theme_test.module2
-rw-r--r--modules/simpletest/tests/themes/test_basetheme/test_basetheme.info7
-rw-r--r--modules/simpletest/tests/themes/test_subtheme/test_subtheme.info7
-rw-r--r--modules/simpletest/tests/themes/test_theme/test_theme.info2
-rw-r--r--modules/system/system.admin.inc2
-rw-r--r--modules/system/system.module38
7 files changed, 53 insertions, 36 deletions
diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test
index ba6440028..27a8e47b9 100644
--- a/modules/simpletest/tests/theme.test
+++ b/modules/simpletest/tests/theme.test
@@ -124,6 +124,37 @@ class ThemeTestCase extends DrupalWebTestCase {
module_enable(array('theme_test'), FALSE);
$this->assertIdentical(theme('theme_test_foo', array('foo' => 'c')), 'c', 'The theme registry contains theme_test_foo again after re-enabling the module.');
}
+
+ /**
+ * Test the list_themes() function.
+ */
+ function testListThemes() {
+ $themes = list_themes();
+ // Check if drupal_theme_access() retrieves enabled themes properly from list_themes().
+ $this->assertTrue(drupal_theme_access('test_theme'), t('Enabled theme detected'));
+ // Check if list_themes() returns disabled themes.
+ $this->assertTrue(array_key_exists('test_basetheme', $themes), t('Disabled theme detected'));
+ // Check for base theme and subtheme lists.
+ $base_theme_list = array('test_basetheme' => 'Theme test base theme');
+ $sub_theme_list = array('test_subtheme' => 'Theme test subtheme');
+ $this->assertIdentical($themes['test_basetheme']->sub_themes, $sub_theme_list, t('Base theme\'s object includes list of subthemes.'));
+ $this->assertIdentical($themes['test_subtheme']->base_themes, $base_theme_list, t('Subtheme\'s object includes list of base themes.'));
+ // Check for theme engine in subtheme.
+ $this->assertIdentical($themes['test_subtheme']->engine, 'phptemplate', t('Subtheme\'s object includes the theme engine.'));
+ // Check for theme engine prefix.
+ $this->assertIdentical($themes['test_basetheme']->prefix, 'phptemplate', t('Base theme\'s object includes the theme engine prefix.'));
+ $this->assertIdentical($themes['test_subtheme']->prefix, 'phptemplate', t('Subtheme\'s object includes the theme engine prefix.'));
+ }
+
+ /**
+ * Test the theme_get_setting() function.
+ */
+ function testThemeGetSetting() {
+ $GLOBALS['theme_key'] = 'test_theme';
+ $this->assertIdentical(theme_get_setting('theme_test_setting'), 'default value', t('theme_get_setting() uses the default theme automatically.'));
+ $this->assertNotEqual(theme_get_setting('subtheme_override', 'test_basetheme'), theme_get_setting('subtheme_override', 'test_subtheme'), t('Base theme\'s default settings values can be overridden by subtheme.'));
+ $this->assertIdentical(theme_get_setting('basetheme_only', 'test_subtheme'), 'base theme value', t('Base theme\'s default settings values are inherited by subtheme.'));
+ }
}
/**
diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module
index a9bd2ad24..61a12bb70 100644
--- a/modules/simpletest/tests/theme_test.module
+++ b/modules/simpletest/tests/theme_test.module
@@ -25,6 +25,8 @@ function theme_test_theme($existing, $type, $theme, $path) {
*/
function theme_test_system_theme_info() {
$themes['test_theme'] = drupal_get_path('module', 'theme_test') . '/themes/test_theme/test_theme.info';
+ $themes['test_basetheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_basetheme/test_basetheme.info';
+ $themes['test_subtheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_subtheme/test_subtheme.info';
return $themes;
}
diff --git a/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info b/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info
new file mode 100644
index 000000000..c39e8a259
--- /dev/null
+++ b/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info
@@ -0,0 +1,7 @@
+name = Theme test base theme
+description = Test theme which acts as a base theme for other test subthemes.
+core = 7.x
+hidden = TRUE
+
+settings[basetheme_only] = base theme value
+settings[subtheme_override] = base theme value
diff --git a/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info b/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info
new file mode 100644
index 000000000..7da71e003
--- /dev/null
+++ b/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info
@@ -0,0 +1,7 @@
+name = Theme test subtheme
+description = Test theme which uses test_basetheme as the base theme.
+core = 7.x
+base theme = test_basetheme
+hidden = TRUE
+
+settings[subtheme_override] = subtheme value
diff --git a/modules/simpletest/tests/themes/test_theme/test_theme.info b/modules/simpletest/tests/themes/test_theme/test_theme.info
index dd5584b0b..4bbbe7a21 100644
--- a/modules/simpletest/tests/themes/test_theme/test_theme.info
+++ b/modules/simpletest/tests/themes/test_theme/test_theme.info
@@ -14,3 +14,5 @@ hidden = TRUE
; version from being loaded, and that errors aren't caused by the lack of this
; file within the theme folder.
stylesheets[all][] = system.base.css
+
+settings[theme_test_setting] = default value
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index e9682e7dd..23a975b0c 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -400,7 +400,7 @@ function system_theme_settings($form, &$form_state, $key = '') {
// Default settings are defined in theme_get_setting() in includes/theme.inc
if ($key) {
$var = 'theme_' . $key . '_settings';
- $themes = system_rebuild_theme_data();
+ $themes = list_themes();
$features = $themes[$key]->info['features'];
}
else {
diff --git a/modules/system/system.module b/modules/system/system.module
index 072850e01..48b2959c6 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -2553,7 +2553,7 @@ function _system_rebuild_theme_data() {
// Now that we've established all our master themes, go back and fill in data
// for subthemes.
foreach ($sub_themes as $key) {
- $themes[$key]->base_themes = system_find_base_themes($themes, $key);
+ $themes[$key]->base_themes = drupal_find_base_themes($themes, $key);
// Don't proceed if there was a problem with the root base theme.
if (!current($themes[$key]->base_themes)) {
continue;
@@ -2648,42 +2648,10 @@ function _system_default_theme_features() {
/**
* Find all the base themes for the specified theme.
*
- * Themes can inherit templates and function implementations from earlier themes.
- *
- * @param $themes
- * An array of available themes.
- * @param $key
- * The name of the theme whose base we are looking for.
- * @param $used_keys
- * A recursion parameter preventing endless loops.
- * @return
- * Returns an array of all of the theme's ancestors; the first element's value
- * will be NULL if an error occurred.
+ * This function has been deprecated in favor of drupal_find_base_themes().
*/
function system_find_base_themes($themes, $key, $used_keys = array()) {
- $base_key = $themes[$key]->info['base theme'];
- // Does the base theme exist?
- if (!isset($themes[$base_key])) {
- return array($base_key => NULL);
- }
-
- $current_base_theme = array($base_key => $themes[$base_key]->info['name']);
-
- // Is the base theme itself a child of another theme?
- if (isset($themes[$base_key]->info['base theme'])) {
- // Do we already know the base themes of this theme?
- if (isset($themes[$base_key]->base_themes)) {
- return $themes[$base_key]->base_themes + $current_base_theme;
- }
- // Prevent loops.
- if (!empty($used_keys[$base_key])) {
- return array($base_key => NULL);
- }
- $used_keys[$base_key] = TRUE;
- return system_find_base_themes($themes, $base_key, $used_keys) + $current_base_theme;
- }
- // If we get here, then this is our parent theme.
- return $current_base_theme;
+ return drupal_find_base_themes($themes, $key, $used_keys);
}
/**