diff --git a/code/Model/SiteTree.php b/code/Model/SiteTree.php index c5b38468..29580a54 100755 --- a/code/Model/SiteTree.php +++ b/code/Model/SiteTree.php @@ -517,7 +517,10 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi */ public function Link($action = null) { - return Controller::join_links(Director::baseURL(), $this->RelativeLink($action)); + $relativeLink = $this->RelativeLink($action); + $link = Controller::join_links(Director::baseURL(), $relativeLink); + $this->extend('updateLink', $link, $action, $relativeLink); + return $link; } /** diff --git a/tests/php/Model/SiteTreeTest.php b/tests/php/Model/SiteTreeTest.php index 64e0759a..1ad29818 100644 --- a/tests/php/Model/SiteTreeTest.php +++ b/tests/php/Model/SiteTreeTest.php @@ -890,7 +890,7 @@ class SiteTreeTest extends SapphireTest } /** - * @covers SilverStripe\CMS\Model\SiteTree::validURLSegment + * @covers \SilverStripe\CMS\Model\SiteTree::validURLSegment */ public function testValidURLSegmentURLSegmentConflicts() { @@ -922,7 +922,7 @@ class SiteTreeTest extends SapphireTest } /** - * @covers SilverStripe\CMS\Model\SiteTree::validURLSegment + * @covers \SilverStripe\CMS\Model\SiteTree::validURLSegment */ public function testValidURLSegmentClassNameConflicts() { @@ -933,7 +933,7 @@ class SiteTreeTest extends SapphireTest } /** - * @covers SilverStripe\CMS\Model\SiteTree::validURLSegment + * @covers \SilverStripe\CMS\Model\SiteTree::validURLSegment */ public function testValidURLSegmentControllerConflicts() { @@ -1401,6 +1401,29 @@ class SiteTreeTest extends SapphireTest $this->assertFalse($page->canPublish()); } + /** + * Test url rewriting extensions + */ + public function testLinkExtension() + { + Director::config()->set('alternate_base_url', 'http://www.baseurl.com'); + $page = new SiteTreeTest_ClassD(); + $page->URLSegment = 'classd'; + $page->write(); + $this->assertEquals( + 'http://www.updatedhost.com/classd/myaction?extra=1', + $page->Link('myaction') + ); + $this->assertEquals( + 'http://www.updatedhost.com/classd/myaction?extra=1', + $page->AbsoluteLink('myaction') + ); + $this->assertEquals( + 'classd/myaction', + $page->RelativeLink('myaction') + ); + } + /** * Test that the controller name for a SiteTree instance can be gathered by appending "Controller" to the SiteTree * class name in a PSR-2 compliant manner. diff --git a/tests/php/Model/SiteTreeTest_ExtensionA.php b/tests/php/Model/SiteTreeTest_ExtensionA.php index 6c90d0bd..9d3cd427 100644 --- a/tests/php/Model/SiteTreeTest_ExtensionA.php +++ b/tests/php/Model/SiteTreeTest_ExtensionA.php @@ -3,6 +3,7 @@ namespace SilverStripe\CMS\Tests\Model; use SilverStripe\CMS\Model\SiteTreeExtension; +use SilverStripe\Control\Controller; use SilverStripe\Dev\TestOnly; class SiteTreeTest_ExtensionA extends SiteTreeExtension implements TestOnly @@ -13,4 +14,9 @@ class SiteTreeTest_ExtensionA extends SiteTreeExtension implements TestOnly { return static::$can_publish; } + + public function updateLink(&$link, $action = null) + { + $link = Controller::join_links($link, '?extra=1'); + } } diff --git a/tests/php/Model/SiteTreeTest_ExtensionB.php b/tests/php/Model/SiteTreeTest_ExtensionB.php index 29388e50..cf42dbbc 100644 --- a/tests/php/Model/SiteTreeTest_ExtensionB.php +++ b/tests/php/Model/SiteTreeTest_ExtensionB.php @@ -3,6 +3,7 @@ namespace SilverStripe\CMS\Tests\Model; use SilverStripe\CMS\Model\SiteTreeExtension; +use SilverStripe\Control\Controller; use SilverStripe\Dev\TestOnly; class SiteTreeTest_ExtensionB extends SiteTreeExtension implements TestOnly @@ -13,4 +14,9 @@ class SiteTreeTest_ExtensionB extends SiteTreeExtension implements TestOnly { return static::$can_publish; } + + public function updateLink(&$link, $action = null) + { + $link = Controller::join_links('http://www.updatedhost.com', $link); + } }