summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/theme.inc8
-rw-r--r--modules/simpletest/tests/theme.test14
2 files changed, 19 insertions, 3 deletions
diff --git a/includes/theme.inc b/includes/theme.inc
index 0c9b0c3ed..5d5363113 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -2460,20 +2460,22 @@ function theme_get_suggestions($args, $base, $delimiter = '__') {
// page__node__edit page-node-edit
$suggestions = array();
+ $prefix = $base;
foreach ($args as $arg) {
// Remove slashes or null per SA-CORE-2009-003.
$arg = str_replace(array("/", "\\", "\0"), '', $arg);
// The percent acts as a wildcard for numeric arguments since
// asterisks are not valid filename characters on many filesystems.
if (is_numeric($arg)) {
- $suggestions[] = $base . $delimiter . '%';
+ $suggestions[] = $prefix . $delimiter . '%';
}
- $suggestions[] = $base . $delimiter . $arg;
+ $suggestions[] = $prefix . $delimiter . $arg;
if (!is_numeric($arg)) {
- $base .= $delimiter . $arg;
+ $prefix .= $delimiter . $arg;
}
}
if (drupal_is_front_page()) {
+ // Front templates should be based on root only, not prefixed arguments.
$suggestions[] = $base . $delimiter . 'front';
}
diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test
index 0be8cb05a..c46dc9d93 100644
--- a/modules/simpletest/tests/theme.test
+++ b/modules/simpletest/tests/theme.test
@@ -39,6 +39,20 @@ class TemplateUnitTest extends DrupalWebTestCase {
$suggestions = theme_get_suggestions($args, 'page');
$this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), t('Removed invalid \\0 from suggestions'));
}
+
+ /**
+ * Ensure page-front template suggestion is added when on front page.
+ */
+ function testFrontPageThemeSuggestion() {
+ $q = $_GET['q'];
+ // Set $_GET['q'] to node because theme_get_suggestions() will query it to
+ // see if we are on the front page.
+ $_GET['q'] = variable_get('site_frontpage', 'node');
+ $suggestions = theme_get_suggestions(explode('/', $_GET['q']), 'page');
+ // Set it back to not annoy the batch runner.
+ $_GET['q'] = $q;
+ $this->assertTrue(in_array('page__front', $suggestions), t('Front page template was suggested.'));
+ }
}
/**