Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure URL segment field type before using its API, and add docs around subsite and fluent domain compatibility #418

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions docs/en/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,14 @@ to speak to your website administrator or hosting provider to facilitate this.


You can simulate subsite access without setting up virtual hosts by appending ?SubsiteID=<ID> to the request.

### How do Subsite domains work with Fluent domains?

The Subsites module and Fluent translation module both provide the concept of defining "domains" and let you
configure the host name for it. This functionality is essentially performing the same duty in both modules.

In the "URL segment" field for CMS pages, both Subsites and Fluent will add their context to the value. If you
have a Subsite domain configured but no Fluent domain, Fluent will respect the existing domain and add its
locale context to the value. If you have a Subsite domain configured and a Fluent domain configured, Fluent will
use its own domain host name value, and the Subsite domain value will be lost. For this reason, you will need
to ensure that you use the same host name in both Subsite and Fluent domain entries.
4 changes: 3 additions & 1 deletion src/Extensions/SiteTreeSubsites.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace SilverStripe\Subsites\Extensions;

use Page;
use SilverStripe\CMS\Forms\SiteTreeURLSegmentField;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\Controller;
use SilverStripe\Control\Director;
Expand Down Expand Up @@ -150,6 +151,7 @@ public function updateCMSFields(FieldList $fields)
// replace readonly link prefix
$subsite = $this->owner->Subsite();
$nested_urls_enabled = Config::inst()->get(SiteTree::class, 'nested_urls');
/** @var Subsite $subsite */
if ($subsite && $subsite->exists()) {
// Use baseurl from domain
$baseLink = $subsite->absoluteBaseURL();
Expand All @@ -163,7 +165,7 @@ public function updateCMSFields(FieldList $fields)
}

$urlsegment = $fields->dataFieldByName('URLSegment');
if ($urlsegment) {
if ($urlsegment && $urlsegment instanceof SiteTreeURLSegmentField) {
$urlsegment->setURLPrefix($baseLink);
}
}
Expand Down
28 changes: 25 additions & 3 deletions tests/php/SiteTreeSubsitesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
use Page;
use SilverStripe\CMS\Controllers\CMSMain;
use SilverStripe\CMS\Controllers\ModelAsController;
use SilverStripe\CMS\Forms\SiteTreeURLSegmentField;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\Director;
use SilverStripe\Core\Config\Config;
use SilverStripe\Core\Convert;
use SilverStripe\ErrorPage\ErrorPage;
use SilverStripe\Forms\FieldList;
use SilverStripe\Security\Member;
Expand All @@ -21,6 +21,7 @@
use SilverStripe\Subsites\Tests\SiteTreeSubsitesTest\TestErrorPage;
use SilverStripe\Versioned\Versioned;
use SilverStripe\View\SSViewer;
use TractorCow\Fluent\Extension\FluentSiteTreeExtension;

class SiteTreeSubsitesTest extends BaseSubsiteTest
{
Expand All @@ -33,7 +34,9 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
];

protected static $illegal_extensions = [
SiteTree::class => ['Translatable'] // @todo implement Translatable namespace
SiteTree::class => [
FluentSiteTreeExtension::class,
],
];

protected function setUp()
Expand Down Expand Up @@ -449,7 +452,7 @@ public function provideAlternateAbsoluteLink()

/**
* @dataProvider provideAlternateAbsoluteLink
* @param name $pageFixtureName
* @param string $pageFixtureName
* @param string|null $action
* @param string $expectedAbsoluteLink
*/
Expand All @@ -465,4 +468,23 @@ public function testAlternateAbsoluteLink($pageFixtureName, $action, $expectedAb

$this->assertEquals($expectedAbsoluteLink, $result);
}

public function testURLSegmentBaseIsSetToSubsiteBaseURL()
{
// This subsite has a domain with 'one.example.org' as the primary domain
/** @var Subsite $subsite */
$subsite = $this->objFromFixture(Subsite::class, 'domaintest1');
Subsite::changeSubsite($subsite);

$page = new SiteTree();
$page->SubsiteID = $subsite->ID;
$page->write();
$fields = $page->getCMSFields();

/** @var SiteTreeURLSegmentField $urlSegmentField */
$urlSegmentField = $fields->dataFieldByName('URLSegment');
$this->assertInstanceOf(SiteTreeURLSegmentField::class, $urlSegmentField);

$this->assertSame('http://one.example.org/', $urlSegmentField->getURLPrefix());
}
}