mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-29 20:59:23 +02:00
BUGFIX Added Requirements::path_for_file() to support external URLs in required paths (incl. unit test)
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@60415 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
15b11e3f13
commit
655802177c
@ -278,7 +278,6 @@ class Requirements {
|
|||||||
if(isset($_GET['debug_profile'])) Profiler::mark("Requirements::includeInHTML");
|
if(isset($_GET['debug_profile'])) Profiler::mark("Requirements::includeInHTML");
|
||||||
|
|
||||||
if(strpos($content, '</head') !== false && (Requirements::$javascript || Requirements::$css || Requirements::$customScript || Requirements::$customHeadTags)) {
|
if(strpos($content, '</head') !== false && (Requirements::$javascript || Requirements::$css || Requirements::$customScript || Requirements::$customHeadTags)) {
|
||||||
$prefix = Director::absoluteBaseURL();
|
|
||||||
$requirements = '';
|
$requirements = '';
|
||||||
$jsRequirements = '';
|
$jsRequirements = '';
|
||||||
|
|
||||||
@ -286,10 +285,9 @@ class Requirements {
|
|||||||
self::process_combined_files();
|
self::process_combined_files();
|
||||||
|
|
||||||
foreach(array_diff_key(self::$javascript,self::$blocked) as $file => $dummy) {
|
foreach(array_diff_key(self::$javascript,self::$blocked) as $file => $dummy) {
|
||||||
if(substr($file,0,7) == 'http://' || Director::fileExists($file)) {
|
$path = self::path_for_file($file);
|
||||||
if(Director::fileExists($file)) $mtimesuffix = "?m=" . filemtime(Director::baseFolder() . '/' . $file);
|
if($path) {
|
||||||
else $mtimesuffix = '';
|
$jsRequirements .= "<script type=\"text/javascript\" src=\"$path\"></script>\n";
|
||||||
$jsRequirements .= "<script type=\"text/javascript\" src=\"$prefix$file$mtimesuffix\"></script>\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,11 +302,10 @@ class Requirements {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach(array_diff_key(self::$css,self::$blocked) as $file => $params) {
|
foreach(array_diff_key(self::$css,self::$blocked) as $file => $params) {
|
||||||
if(Director::fileExists($file)) {
|
$path = self::path_for_file($file);
|
||||||
|
if($path) {
|
||||||
$media = (isset($params['media']) && !empty($params['media'])) ? " media=\"{$params['media']}\"" : "";
|
$media = (isset($params['media']) && !empty($params['media'])) ? " media=\"{$params['media']}\"" : "";
|
||||||
if(Director::fileExists($file)) $mtimesuffix = "?m=" . filemtime(Director::baseFolder() . '/' .$file);
|
$requirements .= "<link rel=\"stylesheet\" type=\"text/css\"{$media} href=\"$path\" />\n";
|
||||||
else $mtimesuffix = '';
|
|
||||||
$requirements .= "<link rel=\"stylesheet\" type=\"text/css\"{$media} href=\"$prefix$file$mtimesuffix\" />\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach(array_diff_key(self::$customCSS,self::$blocked) as $css) {
|
foreach(array_diff_key(self::$customCSS,self::$blocked) as $css) {
|
||||||
@ -348,6 +345,24 @@ class Requirements {
|
|||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param string $fileOrUrl
|
||||||
|
* @return string|boolean
|
||||||
|
*/
|
||||||
|
protected static function path_for_file($fileOrUrl) {
|
||||||
|
if(preg_match('/^http[s]?/', $fileOrUrl)) {
|
||||||
|
return $fileOrUrl;
|
||||||
|
} elseif(Director::fileExists($fileOrUrl)) {
|
||||||
|
$prefix = Director::absoluteBaseURL();
|
||||||
|
$mtimesuffix = "?m=" . filemtime(Director::baseFolder() . '/' . $fileOrUrl);
|
||||||
|
return "{$prefix}{$fileOrUrl}{$mtimesuffix}";
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concatenate several css or javascript files into a single dynamically generated
|
* Concatenate several css or javascript files into a single dynamically generated
|
||||||
* file (stored in {@link Director::baseFolder()}). This increases performance
|
* file (stored in {@link Director::baseFolder()}). This increases performance
|
||||||
|
@ -10,6 +10,32 @@ class RequirementsTest extends SapphireTest {
|
|||||||
|
|
||||||
static $html_template = '<html><head></head><body></body></html>';
|
static $html_template = '<html><head></head><body></body></html>';
|
||||||
|
|
||||||
|
function testExternalUrls() {
|
||||||
|
Requirements::javascript('http://www.mydomain.com/test.js');
|
||||||
|
Requirements::javascript('https://www.mysecuredomain.com/test.js');
|
||||||
|
Requirements::css('http://www.mydomain.com/test.css');
|
||||||
|
Requirements::css('https://www.mysecuredomain.com/test.css');
|
||||||
|
|
||||||
|
$html = Requirements::includeInHTML(false, self::$html_template);
|
||||||
|
|
||||||
|
$this->assertTrue(
|
||||||
|
(strpos($html, 'http://www.mydomain.com/test.js') !== false),
|
||||||
|
'Load external javascript URL'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
(strpos($html, 'https://www.mysecuredomain.com/test.js') !== false),
|
||||||
|
'Load external secure javascript URL'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
(strpos($html, 'http://www.mydomain.com/test.css') !== false),
|
||||||
|
'Load external CSS URL'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
(strpos($html, 'https://www.mysecuredomain.com/test.css') !== false),
|
||||||
|
'Load external secure CSS URL'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function testCombinedJavascript() {
|
function testCombinedJavascript() {
|
||||||
$this->setupCombinedRequirements();
|
$this->setupCombinedRequirements();
|
||||||
|
|
||||||
@ -44,8 +70,10 @@ class RequirementsTest extends SapphireTest {
|
|||||||
$this->setupCombinedRequirements();
|
$this->setupCombinedRequirements();
|
||||||
Requirements::block('bc.js');
|
Requirements::block('bc.js');
|
||||||
Requirements::clear_combined_files('bc.js');
|
Requirements::clear_combined_files('bc.js');
|
||||||
|
|
||||||
clearstatcache(); // needed to get accurate file_exists() results
|
clearstatcache(); // needed to get accurate file_exists() results
|
||||||
$html = Requirements::includeInHTML(false, self::$html_template);
|
$html = Requirements::includeInHTML(false, self::$html_template);
|
||||||
|
|
||||||
$this->assertFalse((bool)preg_match('/src=".*\/bc\.js/', $html), 'blocked combined files are not included ');
|
$this->assertFalse((bool)preg_match('/src=".*\/bc\.js/', $html), 'blocked combined files are not included ');
|
||||||
Requirements::unblock('bc.js');
|
Requirements::unblock('bc.js');
|
||||||
|
|
||||||
@ -73,7 +101,8 @@ class RequirementsTest extends SapphireTest {
|
|||||||
$combinedFiles = Requirements::get_combine_files();
|
$combinedFiles = Requirements::get_combine_files();
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
array_keys($combinedFiles),
|
array_keys($combinedFiles),
|
||||||
array('bc.js')
|
array('bc.js'),
|
||||||
|
"A single file can't be included in two combined files"
|
||||||
);
|
);
|
||||||
|
|
||||||
Requirements::clear_combined_files('bc.js');
|
Requirements::clear_combined_files('bc.js');
|
||||||
@ -104,6 +133,7 @@ class RequirementsTest extends SapphireTest {
|
|||||||
'sapphire/tests/forms/c.js'
|
'sapphire/tests/forms/c.js'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user