#674784 by JohnAlbin, naxoc, et al: Fixed theme_get_suggestions() fails to return 'page__front()' suggestion on front page.

merge-requests/26/head
Angie Byron 2010-02-23 18:32:00 +00:00
parent 124f83e79c
commit dce608f5a4
2 changed files with 19 additions and 3 deletions

View File

@ -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';
}

View File

@ -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.'));
}
}
/**