diff --git a/code/Subsite.php b/code/Subsite.php index 647e153..a72c3d5 100644 --- a/code/Subsite.php +++ b/code/Subsite.php @@ -162,7 +162,7 @@ class Subsite extends DataObject implements PermissionProvider { */ function getCMSFields() { $domainTable = new TableField("Domains", "SubsiteDomain", - array("Domain" => "Domain (use * as a wildcard)", "IsPrimary" => "Primary domain?"), + array("Domain" => "Domain (use * as a wildcard)", "IsPrimary" => "Primary domain?"), array("Domain" => "TextField", "IsPrimary" => "CheckboxField"), "SubsiteID", $this->ID); @@ -310,10 +310,11 @@ JS; /** * Get a matching subsite for the given host, or for the current HTTP_HOST. + * Supports "fuzzy" matching of domains by placing an asterisk at the start of end of the string, + * for example matching all subdomains on *.example.com with one subsite, + * and all subdomains on *.example.org on another. * - * @param $host The host to find the subsite for. If not specified, $_SERVER['HTTP_HOST'] - * is used. - * + * @param $host The host to find the subsite for. If not specified, $_SERVER['HTTP_HOST'] is used. * @return int Subsite ID */ static function getSubsiteIDForDomain($host = null, $returnMainIfNotFound = true) { diff --git a/tests/SubsiteTest.php b/tests/SubsiteTest.php index 7d7b7e3..a3a83d4 100644 --- a/tests/SubsiteTest.php +++ b/tests/SubsiteTest.php @@ -59,26 +59,33 @@ class SubsiteTest extends SapphireTest { function testDomainLookup() { $this->assertEquals( $this->idFromFixture('Subsite','domaintest1'), - Subsite::getSubsiteIDForDomain('one.example.org') + Subsite::getSubsiteIDForDomain('one.example.org'), + 'Full match' ); $this->assertEquals( $this->idFromFixture('Subsite','domaintest1'), - Subsite::getSubsiteIDForDomain('one.localhost') - ); - - $this->assertEquals( - $this->idFromFixture('Subsite','domaintest2'), - Subsite::getSubsiteIDForDomain('two.mysite.com') + Subsite::getSubsiteIDForDomain('one.localhost'), + 'Fuzzy match suffixed with asterisk (rule "one.*")' ); $this->assertEquals( $this->idFromFixture('Subsite','domaintest2'), - Subsite::getSubsiteIDForDomain('other.mysite.com') + Subsite::getSubsiteIDForDomain('two.mysite.com'), + 'Matches correct subsite for rule' + ); + + $this->assertEquals( + $this->idFromFixture('Subsite','domaintest2'), + Subsite::getSubsiteIDForDomain('other.mysite.com'), + 'Fuzzy match prefixed with asterisk (rule "*.mysite.com")' ); - $this->assertEquals(0, Subsite::getSubsiteIDForDomain('other.example.com')); - $this->assertEquals(0, Subsite::getSubsiteIDForDomain('two.example.com')); + $this->assertEquals( + 0, + Subsite::getSubsiteIDForDomain('unknown.madeup.com'), + "Doesn't match unknown subsite" + ); }