mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Requirements acces to files with query strings (fixes #7735)
Originally authored by florian.thoma, tests added by Ingo Schommer. Also removed query params from file paths before calling mtime() on it. See https://github.com/silverstripe/sapphire/pull/1023
This commit is contained in:
parent
af6eccea96
commit
618a3d0314
@ -325,6 +325,34 @@ class RequirementsTest extends SapphireTest {
|
||||
$this->assertContains('</script></body>', $html);
|
||||
}
|
||||
|
||||
public function testSuffix() {
|
||||
$template = '<html><head></head><body><header>My header</header><p>Body</p></body></html>';
|
||||
$basePath = $this->getCurrentRelativePath();
|
||||
$basePath = 'framework' . substr($basePath, strlen(FRAMEWORK_DIR));
|
||||
|
||||
$backend = new Requirements_Backend;
|
||||
|
||||
$backend->javascript($basePath .'/RequirementsTest_a.js');
|
||||
$backend->javascript($basePath .'/RequirementsTest_b.js?foo=bar&bla=blubb');
|
||||
$backend->css($basePath .'/RequirementsTest_a.css');
|
||||
$backend->css($basePath .'/RequirementsTest_b.css?foo=bar&bla=blubb');
|
||||
|
||||
$backend->set_suffix_requirements(true);
|
||||
$html = $backend->includeInHTML(false, $template);
|
||||
$this->assertRegexp('/RequirementsTest_a\.js\?m=[\d]*/', $html);
|
||||
$this->assertRegexp('/RequirementsTest_b\.js\?m=[\d]*&foo=bar&bla=blubb/', $html);
|
||||
$this->assertRegexp('/RequirementsTest_a\.css\?m=[\d]*/', $html);
|
||||
$this->assertRegexp('/RequirementsTest_b\.css\?m=[\d]*&foo=bar&bla=blubb/', $html);
|
||||
|
||||
$backend->set_suffix_requirements(false);
|
||||
$html = $backend->includeInHTML(false, $template);
|
||||
$this->assertNotContains('RequirementsTest_a.js=', $html);
|
||||
$this->assertNotRegexp('/RequirementsTest_a\.js\?m=[\d]*/', $html);
|
||||
$this->assertNotRegexp('/RequirementsTest_b\.js\?m=[\d]*&foo=bar&bla=blubb/', $html);
|
||||
$this->assertNotRegexp('/RequirementsTest_a\.css\?m=[\d]*/', $html);
|
||||
$this->assertNotRegexp('/RequirementsTest_b\.css\?m=[\d]*&foo=bar&bla=blubb/', $html);
|
||||
}
|
||||
|
||||
public function assertFileIncluded($backend, $type, $files) {
|
||||
$type = strtolower($type);
|
||||
switch (strtolower($type)) {
|
||||
|
@ -790,15 +790,20 @@ class Requirements_Backend {
|
||||
if(preg_match('{^//|http[s]?}', $fileOrUrl)) {
|
||||
return $fileOrUrl;
|
||||
} elseif(Director::fileExists($fileOrUrl)) {
|
||||
$filePath = preg_replace('/\?.*/', '', Director::baseFolder() . '/' . $fileOrUrl);
|
||||
$prefix = Director::baseURL();
|
||||
$mtimesuffix = "";
|
||||
$suffix = '';
|
||||
if(strpos($fileOrUrl, '?') !== false) {
|
||||
$suffix = '?' . substr($fileOrUrl, strpos($fileOrUrl, '?')+1);
|
||||
$fileOrUrl = substr($fileOrUrl, 0, strpos($fileOrUrl, '?'));
|
||||
}
|
||||
if($this->suffix_requirements) {
|
||||
$mtimesuffix = "?m=" . filemtime(Director::baseFolder() . '/' . $fileOrUrl);
|
||||
$mtimesuffix = "?m=" . filemtime($filePath);
|
||||
$suffix = '&';
|
||||
}
|
||||
if(strpos($fileOrUrl, '?') !== false) {
|
||||
if (strlen($suffix) == 0) {
|
||||
$suffix = '?';
|
||||
}
|
||||
$suffix .= substr($fileOrUrl, strpos($fileOrUrl, '?')+1);
|
||||
$fileOrUrl = substr($fileOrUrl, 0, strpos($fileOrUrl, '?'));
|
||||
}
|
||||
return "{$prefix}{$fileOrUrl}{$mtimesuffix}{$suffix}";
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user