diff options
-rw-r--r-- | includes/theme.inc | 8 | ||||
-rw-r--r-- | modules/simpletest/tests/theme.test | 14 |
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.')); + } } /** |