Permalink
Browse files

BUGFIX #6055 ErrorPage should always create static error page files w…

…hen dev/build is called if they don't exist (from r111842)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@112927 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
sminnee committed Oct 19, 2010
1 parent 9bed2ca commit 5e0b978263aefcfff8ec0db435d726d9728f3da6
Showing with 50 additions and 18 deletions.
  1. +50 −18 core/model/ErrorPage.php
View
@@ -61,27 +61,59 @@ function requireDefaultRecords() {
parent::requireDefaultRecords();
$pageNotFoundErrorPage = DataObject::get_one('ErrorPage', "\"ErrorCode\" = '404'");
- if(!($pageNotFoundErrorPage && $pageNotFoundErrorPage->exists())) {
- $pageNotFoundErrorPage = new ErrorPage();
- $pageNotFoundErrorPage->ErrorCode = 404;
- $pageNotFoundErrorPage->Title = _t('ErrorPage.DEFAULTERRORPAGETITLE', 'Page not found');
- $pageNotFoundErrorPage->Content = _t('ErrorPage.DEFAULTERRORPAGECONTENT', '<p>Sorry, it seems you were trying to access a page that doesn\'t exist.</p><p>Please check the spelling of the URL you were trying to access and try again.</p>');
- $pageNotFoundErrorPage->write();
- $pageNotFoundErrorPage->publish('Stage', 'Live');
-
- DB::alteration_message('404 page created', 'created');
+ $pageNotFoundErrorPageExists = ($pageNotFoundErrorPage && $pageNotFoundErrorPage->exists()) ? true : false;
+ $pageNotFoundErrorPagePath = self::get_filepath_for_errorcode(404);
+ if(!($pageNotFoundErrorPageExists && file_exists($pageNotFoundErrorPagePath))) {
+ if(!$pageNotFoundErrorPageExists) {
+ $pageNotFoundErrorPage = new ErrorPage();
+ $pageNotFoundErrorPage->ErrorCode = 404;
+ $pageNotFoundErrorPage->Title = _t('ErrorPage.DEFAULTERRORPAGETITLE', 'Page not found');
+ $pageNotFoundErrorPage->Content = _t('ErrorPage.DEFAULTERRORPAGECONTENT', '<p>Sorry, it seems you were trying to access a page that doesn\'t exist.</p><p>Please check the spelling of the URL you were trying to access and try again.</p>');
+ $pageNotFoundErrorPage->Status = 'New page';
+ $pageNotFoundErrorPage->write();
+ $pageNotFoundErrorPage->publish('Stage', 'Live');
+ }
+
+ // Ensure a static error page is created from latest error page content
+ $response = Director::test(Director::makeRelative($pageNotFoundErrorPage->Link()));
+ if($fh = fopen($pageNotFoundErrorPagePath, 'w')) {
+ $written = fwrite($fh, $response->getBody());
+ fclose($fh);
+ }
+
+ if($written) {
+ DB::alteration_message('404 error page created', 'created');
+ } else {
+ DB::alteration_message(sprintf('404 error page could not be created at %s. Please check permissions', $pageNotFoundErrorPagePath), 'error');
+ }
}
$serverErrorPage = DataObject::get_one('ErrorPage', "\"ErrorCode\" = '500'");
- if(!($serverErrorPage && $serverErrorPage->exists())) {
- $serverErrorPage = new ErrorPage();
- $serverErrorPage->ErrorCode = 500;
- $serverErrorPage->Title = _t('ErrorPage.DEFAULTSERVERERRORPAGETITLE', 'Server error');
- $serverErrorPage->Content = _t('ErrorPage.DEFAULTSERVERERRORPAGECONTENT', '<p>Sorry, there was a problem with handling your request.</p>');
- $serverErrorPage->write();
- $serverErrorPage->publish('Stage', 'Live');
-
- DB::alteration_message('500 page created', 'created');
+ $serverErrorPageExists = ($serverErrorPage && $serverErrorPage->exists()) ? true : false;
+ $serverErrorPagePath = self::get_filepath_for_errorcode(500);
+ if(!($serverErrorPageExists && file_exists($serverErrorPagePath))) {
+ if(!$serverErrorPageExists) {
+ $serverErrorPage = new ErrorPage();
+ $serverErrorPage->ErrorCode = 500;
+ $serverErrorPage->Title = _t('ErrorPage.DEFAULTSERVERERRORPAGETITLE', 'Server error');
+ $serverErrorPage->Content = _t('ErrorPage.DEFAULTSERVERERRORPAGECONTENT', '<p>Sorry, there was a problem with handling your request.</p>');
+ $serverErrorPage->Status = 'New page';
+ $serverErrorPage->write();
+ $serverErrorPage->publish('Stage', 'Live');
+ }
+
+ // Ensure a static error page is created from latest error page content
+ $response = Director::test(Director::makeRelative($serverErrorPage->Link()));
+ if($fh = fopen($serverErrorPagePath, 'w')) {
+ $written = fwrite($fh, $response->getBody());
+ fclose($fh);
+ }
+
+ if($written) {
+ DB::alteration_message('500 error page created', 'created');
+ } else {
+ DB::alteration_message(sprintf('500 error page could not be created at %s. Please check permissions', $serverErrorPagePath), 'error');
+ }
}
}

0 comments on commit 5e0b978

Please sign in to comment.