function testRSSFeed()
 {
     $list = new DataObjectSet();
     $list->push(new RSSFeedTest_ItemA());
     $list->push(new RSSFeedTest_ItemB());
     $list->push(new RSSFeedTest_ItemC());
     $origServer = $_SERVER;
     $_SERVER['HTTP_HOST'] = 'www.example.org';
     Director::setBaseURL('/');
     $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description");
     $content = $rssFeed->feedContent();
     //Debug::message($content);
     $this->assertContains('<link>http://www.example.org/item-a/</link>', $content);
     $this->assertContains('<link>http://www.example.com/item-b.html</link>', $content);
     $this->assertContains('<link>http://www.example.com/item-c.html</link>', $content);
     $this->assertContains('<title>ItemA</title>', $content);
     $this->assertContains('<title>ItemB</title>', $content);
     $this->assertContains('<title>ItemC</title>', $content);
     $this->assertContains('<description>ItemA Content</description>', $content);
     $this->assertContains('<description>ItemB Content</description>', $content);
     $this->assertContains('<description>ItemC Content</description>', $content);
     // Feed #2 - put Content() into <title> and AltContent() into <description>
     $rssFeed = new RSSFeed($list, "http://www.example.com", "Test RSS Feed", "Test RSS Feed Description", "Content", "AltContent");
     $content = $rssFeed->feedContent();
     $this->assertContains('<title>ItemA Content</title>', $content);
     $this->assertContains('<title>ItemB Content</title>', $content);
     $this->assertContains('<title>ItemC Content</title>', $content);
     $this->assertContains('<description>ItemA AltContent</description>', $content);
     $this->assertContains('<description>ItemB AltContent</description>', $content);
     $this->assertContains('<description>ItemC AltContent</description>', $content);
     Director::setBaseURL(null);
     $_SERVER = $origServer;
 }
 /**
  * Test that the module render method is producing content.
  */
 public function testModuleRender()
 {
     Director::setBaseURL('http://www.example.com/');
     $page = $this->objFromFixture('ModularPage', 'test');
     foreach ($page->Modules() as $module) {
         $this->assertNotEmpty($module->Content());
     }
 }
 function export()
 {
     if ($_REQUEST['baseurl']) {
         $base = $_REQUEST['baseurl'];
         if (substr($base, -1) != '/') {
             $base .= '/';
         }
         Director::setBaseURL($base);
     }
     $folder = '/tmp/static-export/' . project();
     if (!project()) {
         $folder .= 'site';
     }
     if (!file_exists($folder)) {
         mkdir($folder, Filesystem::$folder_create_mask, true);
     }
     $f1 = Director::baseFolder() . '/assets';
     $f2 = Director::baseFolder() . '/' . project();
     `cd {$folder}; ln -s {$f1}; ln -s {$f2}`;
     $baseFolder = basename($folder);
     if ($folder && file_exists($folder)) {
         $pages = DataObject::get("SiteTree");
         foreach ($pages as $page) {
             $subfolder = "{$folder}/{$page->URLSegment}";
             $contentfile = "{$folder}/{$page->URLSegment}/index.html";
             // Make the folder
             if (!file_exists($subfolder)) {
                 mkdir($subfolder, Filesystem::$folder_create_mask);
             }
             // Run the page
             Requirements::clear();
             $controllerClass = "{$page->class}_Controller";
             if (class_exists($controllerClass)) {
                 $controller = new $controllerClass($page);
                 $pageContent = $controller->run(array());
                 // Write to file
                 if ($fh = fopen($contentfile, 'w')) {
                     fwrite($fh, $pageContent->getBody());
                     fclose($fh);
                 }
             }
         }
         copy("{$folder}/home/index.html", "{$folder}/index.html");
         `cd /tmp/static-export; tar -czhf {$baseFolder}.tar.gz {$baseFolder}`;
         $content = file_get_contents("/tmp/static-export/{$baseFolder}.tar.gz");
         Filesystem::removeFolder('/tmp/static-export');
         HTTP::sendFileToBrowser($content, "{$baseFolder}.tar.gz");
         return null;
     } else {
         echo _t('StaticExporter.ONETHATEXISTS', "Please specify a folder that exists");
     }
 }
 function export()
 {
     // specify custom baseurl for publishing to other webroot
     if (isset($_REQUEST['baseurl'])) {
         $base = $_REQUEST['baseurl'];
         if (substr($base, -1) != '/') {
             $base .= '/';
         }
         Director::setBaseURL($base);
     }
     // setup temporary folders
     $tmpBaseFolder = TEMP_FOLDER . '/static-export';
     $tmpFolder = project() ? "{$tmpBaseFolder}/" . project() : "{$tmpBaseFolder}/site";
     if (!file_exists($tmpFolder)) {
         Filesystem::makeFolder($tmpFolder);
     }
     $baseFolderName = basename($tmpFolder);
     // symlink /assets
     $f1 = ASSETS_PATH;
     $f2 = Director::baseFolder() . '/' . project();
     `cd {$tmpFolder}; ln -s {$f1}; ln -s {$f2}`;
     // iterate through all instances of SiteTree
     $pages = DataObject::get("SiteTree");
     foreach ($pages as $page) {
         $subfolder = "{$tmpFolder}/" . trim($page->RelativeLink(null, true), '/');
         $contentfile = "{$tmpFolder}/" . trim($page->RelativeLink(null, true), '/') . '/index.html';
         // Make the folder
         if (!file_exists($subfolder)) {
             Filesystem::makeFolder($subfolder);
         }
         // Run the page
         Requirements::clear();
         $link = Director::makeRelative($page->Link());
         $response = Director::test($link);
         // Write to file
         if ($fh = fopen($contentfile, 'w')) {
             fwrite($fh, $response->getBody());
             fclose($fh);
         }
     }
     // copy homepage (URLSegment: "home") to webroot
     copy("{$tmpFolder}/home/index.html", "{$tmpFolder}/index.html");
     // archive all generated files
     `cd {$tmpBaseFolder}; tar -czhf {$baseFolderName}.tar.gz {$baseFolderName}`;
     $archiveContent = file_get_contents("{$tmpBaseFolder}/{$baseFolderName}.tar.gz");
     // remove temporary files and folder
     Filesystem::removeFolder($tmpBaseFolder);
     // return as download to the client
     $response = SS_HTTPRequest::send_file($archiveContent, "{$baseFolderName}.tar.gz", 'application/x-tar-gz');
     echo $response->output();
 }
Exemple #5
0
 public function testAlternativeBaseURL()
 {
     // relative base URLs - you should end them in a /
     Director::setBaseURL('/relativebase/');
     $this->assertEquals('/relativebase/', Director::baseURL());
     $this->assertEquals(Director::protocolAndHost() . '/relativebase/', Director::absoluteBaseURL());
     $this->assertEquals(Director::protocolAndHost() . '/relativebase/subfolder/test', Director::absoluteURL('subfolder/test'));
     // absolute base URLs - you should end them in a /
     Director::setBaseURL('http://www.example.org/');
     $this->assertEquals('http://www.example.org/', Director::baseURL());
     $this->assertEquals('http://www.example.org/', Director::absoluteBaseURL());
     $this->assertEquals('http://www.example.org/subfolder/test', Director::absoluteURL('subfolder/test'));
     // Setting it to false restores functionality
     Director::setBaseURL(false);
     $this->assertEquals(BASE_URL . '/', Director::baseURL());
     $this->assertEquals(Director::protocolAndHost() . BASE_URL . '/', Director::absoluteBaseURL(BASE_URL));
     $this->assertEquals(Director::protocolAndHost() . BASE_URL . '/subfolder/test', Director::absoluteURL('subfolder/test'));
 }
Exemple #6
0
 public function tearDown()
 {
     parent::tearDown();
     Director::setBaseURL(null);
     $_SERVER['HTTP_HOST'] = self::$original_host;
 }
<?php

define('UNIT_TESTING', true);
define('ECOMMERCE_PAYMENT_BASE_PATH', dirname(__DIR__));
define('BASE_PATH', ECOMMERCE_PAYMENT_BASE_PATH);
if (!file_exists(BASE_PATH . '/vendor/autoload.php')) {
    echo 'You must first install the vendors using composer.' . PHP_EOL;
    exit(1);
}
$loader = (require BASE_PATH . '/vendor/autoload.php');
use Symfony\Component\ClassLoader\ClassMapGenerator;
$loader->addClassMap(ClassMapGenerator::createMap(BASE_PATH . '/framework'));
$loader->add('Heystack\\Payment\\Test', __DIR__);
\Director::setBaseURL('http://localhost/');
Exemple #8
0
 public function testBaseURL()
 {
     Director::setBaseURL('/baseurl/');
     $this->assertEquals(Controller::BaseURL(), Director::BaseURL());
 }
Exemple #9
0
<?php

global $project;
$project = 'beardpapa';
global $database;
$database = 'beardpapa';
require_once 'conf/ConfigureFromEnv.php';
Director::setBaseURL('/');
// Set the site locale
i18n::set_locale('en_US');
define('CSS_DIR', THEMES_DIR . "/" . SSViewer::current_custom_theme() . '/css');
define('JS_DIR', THEMES_DIR . "/" . SSViewer::current_custom_theme() . '/javascript');
define('BOWER_PATH', 'bower_components');
 function publishPages($urls)
 {
     // Do we need to map these?
     // Detect a numerically indexed arrays
     if (is_numeric(join('', array_keys($urls)))) {
         $urls = $this->urlsToPaths($urls);
     }
     // This can be quite memory hungry and time-consuming
     // @todo - Make a more memory efficient publisher
     increase_time_limit_to();
     increase_memory_limit_to();
     // Set the appropriate theme for this publication batch.
     // This may have been set explicitly via StaticPublisher::static_publisher_theme,
     // or we can use the last non-null theme.
     if (!StaticPublisher::static_publisher_theme()) {
         SSViewer::set_theme(SSViewer::current_custom_theme());
     } else {
         SSViewer::set_theme(StaticPublisher::static_publisher_theme());
     }
     $currentBaseURL = Director::baseURL();
     if (self::$static_base_url) {
         Director::setBaseURL(self::$static_base_url);
     }
     if ($this->fileExtension == 'php') {
         SSViewer::setOption('rewriteHashlinks', 'php');
     }
     if (StaticPublisher::echo_progress()) {
         echo $this->class . ": Publishing to " . self::$static_base_url . "\n";
     }
     $files = array();
     $i = 0;
     $totalURLs = sizeof($urls);
     foreach ($urls as $url => $path) {
         if (self::$static_base_url) {
             Director::setBaseURL(self::$static_base_url);
         }
         $i++;
         if ($url && !is_string($url)) {
             user_error("Bad url:" . var_export($url, true), E_USER_WARNING);
             continue;
         }
         if (StaticPublisher::echo_progress()) {
             echo " * Publishing page {$i}/{$totalURLs}: {$url}\n";
             flush();
         }
         Requirements::clear();
         if ($url == "") {
             $url = "/";
         }
         if (Director::is_relative_url($url)) {
             $url = Director::absoluteURL($url);
         }
         $response = Director::test(str_replace('+', ' ', $url));
         Requirements::clear();
         singleton('DataObject')->flushCache();
         //skip any responses with a 404 status code. We don't want to turn those into statically cached pages
         if (!$response || $response->getStatusCode() == '404') {
             continue;
         }
         // Generate file content
         // PHP file caching will generate a simple script from a template
         if ($this->fileExtension == 'php') {
             if (is_object($response)) {
                 if ($response->getStatusCode() == '301' || $response->getStatusCode() == '302') {
                     $content = $this->generatePHPCacheRedirection($response->getHeader('Location'));
                 } else {
                     $content = $this->generatePHPCacheFile($response->getBody(), HTTP::get_cache_age(), date('Y-m-d H:i:s'));
                 }
             } else {
                 $content = $this->generatePHPCacheFile($response . '', HTTP::get_cache_age(), date('Y-m-d H:i:s'));
             }
             // HTML file caching generally just creates a simple file
         } else {
             if (is_object($response)) {
                 if ($response->getStatusCode() == '301' || $response->getStatusCode() == '302') {
                     $absoluteURL = Director::absoluteURL($response->getHeader('Location'));
                     $content = "<meta http-equiv=\"refresh\" content=\"2; URL={$absoluteURL}\">";
                 } else {
                     $content = $response->getBody();
                 }
             } else {
                 $content = $response . '';
             }
         }
         $files[] = array('Content' => $content, 'Folder' => dirname($path) . '/', 'Filename' => basename($path));
         // Add externals
         /*
         			$externals = $this->externalReferencesFor($content);
         			if($externals) foreach($externals as $external) {
         				// Skip absolute URLs
         				if(preg_match('/^[a-zA-Z]+:\/\//', $external)) continue;
         				// Drop querystring parameters
         				$external = strtok($external, '?');
         				
         				if(file_exists("../" . $external)) {
         					// Break into folder and filename
         					if(preg_match('/^(.*\/)([^\/]+)$/', $external, $matches)) {
         						$files[$external] = array(
         							"Copy" => "../$external",
         							"Folder" => $matches[1],
         							"Filename" => $matches[2],
         						);
         					
         					} else {
         						user_error("Can't parse external: $external", E_USER_WARNING);
         					}
         				} else {
         					$missingFiles[$external] = true;
         				}
         			}*/
     }
     if (self::$static_base_url) {
         Director::setBaseURL($currentBaseURL);
     }
     if ($this->fileExtension == 'php') {
         SSViewer::setOption('rewriteHashlinks', true);
     }
     $base = BASE_PATH . "/{$this->destFolder}";
     foreach ($files as $file) {
         Filesystem::makeFolder("{$base}/{$file['Folder']}");
         if (isset($file['Content'])) {
             $fh = fopen("{$base}/{$file['Folder']}{$file['Filename']}", "w");
             fwrite($fh, $file['Content']);
             fclose($fh);
         } else {
             if (isset($file['Copy'])) {
                 copy($file['Copy'], "{$base}/{$file['Folder']}{$file['Filename']}");
             }
         }
     }
 }
 protected function publishUrls($urls, $keyPrefix = '', $domain = null)
 {
     if (defined('PROXY_CONFIG_FILE') && !isset($PROXY_CACHE_HOSTMAP)) {
         include_once BASE_PATH . '/' . PROXY_CONFIG_FILE;
     }
     $config = SiteConfig::current_site_config();
     if ($config->DisableSiteCache) {
         return;
     }
     $urls = array_unique($urls);
     // Do we need to map these?
     // Detect a numerically indexed arrays
     if (is_numeric(join('', array_keys($urls)))) {
         $urls = $this->urlsToPaths($urls);
     }
     // This can be quite memory hungry and time-consuming
     // @todo - Make a more memory efficient publisher
     increase_time_limit_to();
     increase_memory_limit_to();
     $currentBaseURL = Director::baseURL();
     $files = array();
     $i = 0;
     $totalURLs = sizeof($urls);
     $cache = $this->getCache();
     if (!defined('PROXY_CACHE_GENERATING')) {
         define('PROXY_CACHE_GENERATING', true);
     }
     foreach ($urls as $url => $path) {
         // work around bug introduced in ss3 whereby top level /bathroom.html would be changed to ./bathroom.html
         $path = ltrim($path, './');
         $url = rtrim($url, '/');
         // TODO: Detect the scheme + host URL from the URL's absolute path
         // and set that as the base URL appropriately
         $baseUrlSrc = $this->staticBaseUrl ? $this->staticBaseUrl : $url;
         $urlBits = parse_url($baseUrlSrc);
         if (isset($urlBits['scheme']) && isset($urlBits['host'])) {
             // now see if there's a host mapping
             // we want to set the base URL correctly
             Config::inst()->update('Director', 'alternate_base_url', $urlBits['scheme'] . '://' . $urlBits['host'] . '/');
         }
         $i++;
         if ($url && !is_string($url)) {
             user_error("Bad url:" . var_export($url, true), E_USER_WARNING);
             continue;
         }
         Requirements::clear();
         if (strrpos($url, '/home') == strlen($url) - 5) {
             $url = substr($url, 0, strlen($url) - 5);
         }
         if ($url == "" || $url == 'home') {
             $url = "/";
         }
         if (Director::is_relative_url($url)) {
             $url = Director::absoluteURL($url);
         }
         $stage = Versioned::current_stage();
         Versioned::reading_stage('Live');
         $GLOBALS[self::CACHE_PUBLISH] = 1;
         Config::inst()->update('SSViewer', 'theme_enabled', true);
         if (class_exists('Multisites')) {
             Multisites::inst()->resetCurrentSite();
         }
         $response = Director::test(str_replace('+', ' ', $url));
         Config::inst()->update('SSViewer', 'theme_enabled', false);
         unset($GLOBALS[self::CACHE_PUBLISH]);
         Versioned::reading_stage($stage);
         Requirements::clear();
         singleton('DataObject')->flushCache();
         $contentType = null;
         // Generate file content
         if (is_object($response)) {
             if ($response->getStatusCode() == '301' || $response->getStatusCode() == '302') {
                 $absoluteURL = Director::absoluteURL($response->getHeader('Location'));
                 $content = null;
             } else {
                 $content = $response->getBody();
                 $type = $response->getHeader('Content-type');
                 $contentType = $type ? $type : $contentType;
             }
         } else {
             $content = $response . '';
         }
         if (!$content) {
             continue;
         }
         if (isset($urlBits['host'])) {
             $domain = $urlBits['host'];
         }
         if ($domain && !$keyPrefix) {
             $keyPrefix = $domain;
         }
         $path = trim($path, '/');
         if ($path == 'home') {
             $path = '';
         }
         $data = new stdClass();
         $data->Content = $content;
         $data->LastModified = date('Y-m-d H:i:s');
         $cacheAge = SiteConfig::current_site_config()->CacheAge;
         if ($cacheAge) {
             $data->Age = $cacheAge;
         } else {
             $data->Age = HTTP::get_cache_age();
         }
         if (!empty($contentType)) {
             $data->ContentType = $contentType;
         }
         $key = $keyPrefix . '/' . $path;
         $cache->store($key, $data);
         if ($domain && isset($PROXY_CACHE_HOSTMAP) && isset($PROXY_CACHE_HOSTMAP[$domain])) {
             $hosts = $PROXY_CACHE_HOSTMAP[$domain];
             foreach ($hosts as $otherDomain) {
                 $key = $otherDomain . '/' . $path;
                 $storeData = clone $data;
                 $storeData->Content = str_replace($domain, $otherDomain, $storeData->Content);
                 $cache->store($key, $storeData);
             }
         }
     }
     Director::setBaseURL($currentBaseURL);
 }
 /**
  * Test that the module render function is producing content.
  */
 public function testPageModuleRender()
 {
     Director::setBaseURL('http://www.example.com/');
     $hero = $this->objFromFixture('PageModule', 'hero');
     $this->assertNotEmpty($hero->Content());
 }
 function publishPages($urls)
 {
     set_time_limit(0);
     ini_set("memory_limit", -1);
     //$base = Director::absoluteURL($this->destFolder);
     //$base = preg_replace('/\/[^\/]+\/\.\./','',$base) . '/';
     if (self::$static_base_url) {
         Director::setBaseURL(self::$static_base_url);
     }
     if ($this->fileExtension == 'php') {
         SSViewer::setOption('rewriteHashlinks', 'php');
     }
     $files = array();
     $i = 0;
     $totalURLs = sizeof($urls);
     foreach ($urls as $url) {
         $i++;
         if (StaticPublisher::echo_progress()) {
             echo " * Publishing page {$i}/{$totalURLs}: {$url}\n";
             flush();
         }
         Requirements::clear();
         $response = Director::test($url);
         Requirements::clear();
         /*
         			if(!is_object($response)) {
         				echo "String response for url '$url'\n";
         				print_r($response);
         			}*/
         if (is_object($response)) {
             $content = $response->getBody();
         } else {
             $content = $response . '';
         }
         if ($this->fileExtension) {
             $filename = $url ? "{$url}.{$this->fileExtension}" : "index.{$this->fileExtension}";
         } else {
             $filename = $url ? "{$url}/index.html" : "index.html";
         }
         $files[$filename] = array('Content' => $content, 'Folder' => dirname($filename) == '/' ? '' : dirname($filename) . '/', 'Filename' => basename($filename));
         // Add externals
         /*
         			$externals = $this->externalReferencesFor($content);
         			if($externals) foreach($externals as $external) {
         				// Skip absolute URLs
         				if(preg_match('/^[a-zA-Z]+:\/\//', $external)) continue;
         				// Drop querystring parameters
         				$external = strtok($external, '?');
         				
         				if(file_exists("../" . $external)) {
         					// Break into folder and filename
         					if(preg_match('/^(.*\/)([^\/]+)$/', $external, $matches)) {
         						$files[$external] = array(
         							"Copy" => "../$external",
         							"Folder" => $matches[1],
         							"Filename" => $matches[2],
         						);
         					
         					} else {
         						user_error("Can't parse external: $external", E_USER_WARNING);
         					}
         				} else {
         					$missingFiles[$external] = true;
         				}
         			}*/
     }
     if (self::$static_base_url) {
         Director::setBaseURL(null);
     }
     if ($this->fileExtension == 'php') {
         SSViewer::setOption('rewriteHashlinks', true);
     }
     //Debug::show(array_keys($files));
     //Debug::show(array_keys($missingFiles));
     $base = "../{$this->destFolder}";
     foreach ($files as $file) {
         Filesystem::makeFolder("{$base}/{$file['Folder']}");
         if (isset($file['Content'])) {
             $fh = fopen("{$base}/{$file['Folder']}{$file['Filename']}", "w");
             fwrite($fh, $file['Content']);
             fclose($fh);
         } else {
             if (isset($file['Copy'])) {
                 copy($file['Copy'], "{$base}/{$file['Folder']}{$file['Filename']}");
             }
         }
     }
 }
 public function exportTo($directory)
 {
     $directory = rtrim($directory, '/');
     $links = $this->urlsToPaths($this->getLinks());
     $files = array();
     increase_time_limit_to();
     increase_memory_limit_to();
     // Make the output directory if it doesn't exist.
     if (!is_dir($directory)) {
         mkdir($directory, Filesystem::$folder_create_mask, true);
     }
     if ($this->theme) {
         SSViewer::set_theme($this->theme);
     } else {
         SSViewer::set_theme(SSViewer::current_custom_theme());
     }
     if ($this->baseUrl && !$this->makeRelative) {
         $originalBaseUrl = Director::baseURL();
         Director::setBaseURL($this->baseUrl);
     }
     // Loop through each link that we're publishing, and create a static
     // html file for each.
     foreach ($links as $link => $path) {
         Requirements::clear();
         singleton('DataObject')->flushCache();
         $response = Director::test($link);
         $target = $directory . '/' . $path;
         if (is_object($response)) {
             if ($response->getStatusCode() == '301' || $response->getStatusCode() == '302') {
                 $absoluteURL = Director::absoluteURL($response->getHeader('Location'));
                 $content = "<meta http-equiv=\"refresh\" content=\"2; URL={$absoluteURL}\">";
             } else {
                 $content = $response->getBody();
             }
         } else {
             $content = (string) $response;
         }
         // Find any external content references inside the response, and add
         // them to the copy array.
         $externals = $this->externalReferencesFor($content);
         if ($externals) {
             foreach ($externals as $external) {
                 if (!Director::is_site_url($external)) {
                     continue;
                 }
                 $external = strtok($external, '?');
                 $external = Director::makeRelative($external);
                 if (file_exists(BASE_PATH . '/' . $external)) {
                     $files["{$directory}/{$external}"] = array('copy', BASE_PATH . '/' . $external);
                 }
             }
         }
         // Append any anchor links which point to a relative site link
         // with a .html extension.
         $base = preg_quote(Director::baseURL());
         $content = preg_replace('~<a(.+?)href="(' . $base . '[^"]*?)/?"~i', '<a$1href="$2.html"', $content);
         $content = str_replace('/.html', '/index.html', $content);
         // If we want to rewrite links to relative, then determine how many
         // levels deep we are and rewrite the relevant attributes globally.
         // Also, string the base tag.
         if ($this->makeRelative) {
             $content = preg_replace('~(src|href)="' . Director::protocolAndHost() . '~i', '$1="', $content);
             if (($trimmed = trim($link, '/')) && strpos($trimmed, '/')) {
                 $prepend = str_repeat('../', substr_count($trimmed, '/'));
             } else {
                 $prepend = './';
             }
             $base = preg_quote(Director::baseURL());
             $content = preg_replace('~(href|src)="' . $base . '~i', '$1="' . $prepend, $content);
             $content = preg_replace('~<base href="([^"]+)" />~', '', $content);
             $content = preg_replace('~<base href="([^"]+)"><!--[if lte IE 6]></base><![endif]-->~', '', $content);
         }
         $files[$target] = array('create', $content);
     }
     // If we currently have a theme active, then copy all the theme
     // assets across to the site.
     if ($theme = SSViewer::current_theme()) {
         $stack = array(THEMES_PATH . '/' . $theme);
         // Build up a list of every file present in the current theme
         // which is not a .ss template, and add it to the files array
         while ($path = array_pop($stack)) {
             foreach (scandir($path) as $file) {
                 if ($file[0] == '.' || $file[0] == '_') {
                     continue;
                 }
                 if (is_dir("{$path}/{$file}")) {
                     $stack[] = "{$path}/{$file}";
                 } else {
                     if (substr($file, -3) != '.ss') {
                         $loc = "{$path}/{$file}";
                         $to = $directory . '/' . substr($loc, strlen(BASE_PATH) + 1);
                         $files[$to] = array('copy', $loc);
                     }
                 }
             }
         }
     }
     // If theres a favicon.ico file in the site root, copy it across
     if (file_exists(BASE_PATH . '/favicon.ico')) {
         $files["{$directory}/favicon.ico"] = array('copy', BASE_PATH . '/favicon.ico');
     }
     // Copy across or create all the files that have been generated.
     foreach ($files as $to => $from) {
         list($mode, $content) = $from;
         if (!is_dir(dirname($to))) {
             mkdir(dirname($to), Filesystem::$folder_create_mask, true);
         }
         if ($mode == 'create') {
             file_put_contents($to, $content);
         } else {
             if (!file_exists($to)) {
                 copy($content, $to);
             }
         }
     }
     if ($this->baseUrl && !$this->makeRelative) {
         Director::setBaseURL($originalBaseUrl);
     }
 }