summaryrefslogtreecommitdiff
path: root/modules/system.module
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2005-12-07 14:59:55 +0000
committerDries Buytaert <dries@buytaert.net>2005-12-07 14:59:55 +0000
commit3cb401bda18f6f026b510ed3901ea7042e59c84e (patch)
tree41f06fd2beef12204a910faaef23ffc0c2f73ca9 /modules/system.module
parente019ce5107a372a3123566ae4c1280986a34171a (diff)
downloadbrdo-3cb401bda18f6f026b510ed3901ea7042e59c84e.tar.gz
brdo-3cb401bda18f6f026b510ed3901ea7042e59c84e.tar.bz2
- Patch #38645 by Morbus: reworked the _regions() hook.
Diffstat (limited to 'modules/system.module')
-rw-r--r--modules/system.module29
1 files changed, 16 insertions, 13 deletions
diff --git a/modules/system.module b/modules/system.module
index 60c6b750a..c9b6b5214 100644
--- a/modules/system.module
+++ b/modules/system.module
@@ -583,26 +583,29 @@ function system_region_list($theme_key) {
static $list = array();
if (!array_key_exists($theme_key, $list)) {
+ $theme = db_fetch_object(db_query("SELECT * FROM {system} WHERE type = 'theme' AND name = '%s'", $theme_key));
- $result = db_query("SELECT * FROM {system} WHERE type = 'theme' AND name = '%s'", $theme_key);
- $theme = db_fetch_object($result);
-
+ // Stylesheets can't have regions; use its theme.
if (strpos($theme->filename, '.css')) {
- // File is a style, which can't have its own regions; use its theme instead.
- $list[$theme_key] = system_region_list(basename(dirname($theme->description)));
- return $list[$theme_key];
+ return system_region_list(basename(dirname($theme->description)));
}
+
+ // If this is a custom theme, load it in before moving on.
if (file_exists($file = dirname($theme->filename) .'/' . $theme_key . '.theme')) {
- include_once "./$file";
+ include_once "./$file";
}
- $regions = function_exists($theme_key . '_regions') ? call_user_func($theme_key . '_regions') : array();
- if (strpos($theme->description, '.engine')) {
- // File is a template; include its engine's regions.
- include_once './' . $theme->description;
+ $regions = array();
+
+ // This theme has defined its own regions.
+ if (function_exists($theme_key . '_regions')) {
+ $regions = call_user_func($theme_key . '_regions');
+ }
+ // File is an engine; include its regions.
+ else if (strpos($theme->description, '.engine')) {
+ include_once './' . $theme->description;
$theme_engine = basename($theme->description, '.engine');
- $engine_regions = function_exists($theme_engine . '_regions') ? call_user_func($theme_engine . '_regions') : array();
- $regions = array_merge($engine_regions, $regions);
+ $regions = function_exists($theme_engine . '_regions') ? call_user_func($theme_engine . '_regions') : array();
}
$list[$theme_key] = $regions;