From 7d3d9a005e79fcbf9c59e66e5f18ae435ce41c3a Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Wed, 13 Oct 2010 00:57:45 +0000 Subject: [PATCH] BUGFIX #5259 RedirectorPage and HtmlEditorField TinyMCE integration now prefixes http:// if no prefix is found (from r101668) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@112016 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/model/RedirectorPage.php | 14 +++++++++++--- javascript/tiny_mce_improvements.js | 6 +++++- tests/RedirectorPageTest.php | 9 +++++++-- tests/RedirectorPageTest.yml | 5 +++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/core/model/RedirectorPage.php b/core/model/RedirectorPage.php index bcfdd460f..e2d675981 100755 --- a/core/model/RedirectorPage.php +++ b/core/model/RedirectorPage.php @@ -103,7 +103,16 @@ class RedirectorPage extends Page { $this->HasBrokenLink = false; } } - + + function onBeforeWrite() { + parent::onBeforeWrite(); + + // Prefix the URL with "http://" if no prefix is found + if($this->ExternalURL && (strpos($this->ExternalURL, '://') === false)) { + $this->ExternalURL = 'http://' . $this->ExternalURL; + } + } + function getCMSFields() { Requirements::javascript(SAPPHIRE_DIR . "/javascript/RedirectorPage.js"); @@ -169,5 +178,4 @@ class RedirectorPage_Controller extends Page_Controller { _t('RedirectorPage.HASBEENSETUP', 'A redirector page has been set up without anywhere to redirect to.') . "

"; } -} -?> +} \ No newline at end of file diff --git a/javascript/tiny_mce_improvements.js b/javascript/tiny_mce_improvements.js index 6f4bceba4..bf28b7e24 100755 --- a/javascript/tiny_mce_improvements.js +++ b/javascript/tiny_mce_improvements.js @@ -199,7 +199,11 @@ LinkForm.prototype = { case 'external': default: - href = this.elements.external.value; + href = this.elements.external.value; + // Prefix the URL with "http://" if no prefix is found + if(href.indexOf('://') == -1) { + href = 'http://' + href; + } if($('Form_EditorToolbarLinkForm_TargetBlank')) { if($('Form_EditorToolbarLinkForm_TargetBlank').checked) target = '_blank'; } diff --git a/tests/RedirectorPageTest.php b/tests/RedirectorPageTest.php index 62a4fc95f..c24edd2cb 100644 --- a/tests/RedirectorPageTest.php +++ b/tests/RedirectorPageTest.php @@ -43,6 +43,11 @@ class RedirectorPageTest extends FunctionalTest { $response = $this->get(Director::makeRelative($page->Link())); $this->assertEquals(Director::baseURL() . "redirection-dest/", $response->getHeader("Location")); } -} -?> \ No newline at end of file + function testExternalURLGetsPrefixIfNotSet() { + $page = $this->objFromFixture('RedirectorPage', 'externalnoprefix'); + $this->assertEquals($page->ExternalURL, 'http://google.com', 'onBeforeWrite has prefixed with http'); + $page->write(); + $this->assertEquals($page->ExternalURL, 'http://google.com', 'onBeforeWrite will not double prefix if written again!'); + } +} \ No newline at end of file diff --git a/tests/RedirectorPageTest.yml b/tests/RedirectorPageTest.yml index 1ca70d0b3..70d0129ff 100644 --- a/tests/RedirectorPageTest.yml +++ b/tests/RedirectorPageTest.yml @@ -18,6 +18,11 @@ RedirectorPage: Title: Bad External RedirectionType: External URLSegment: bad-external + externalnoprefix: + Title: External no prefix + RedirectionType: External + URLSegment: external-no-prefix + ExternalURL: google.com badinternal: Title: Bad Internal RedirectionType: Internal