mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
BUGFIX Allowing translated homepages in RootUrlController
BUGFIX Limiting RootURLController to just trigger Translatable if no DomainForHomepage value is found BUGFIX Using $locale parameter in Translatable::get_homepage_urlsegment_by_locale() BUGFIX Updated enabling mechanism in Translatable->alternateGetByUrl() MINOR Removed HTTP_HOST setting in TranslatableTest, wasn't necessary API CHANGE Deprecated Translatable::get_homepage_urlsegment_by_language(), use get_homepage_urlsegment_by_locale() git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@75328 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
eb86cc1b07
commit
99c1fe9f93
@ -50,6 +50,7 @@ class RootURLController extends Controller {
|
|||||||
/**
|
/**
|
||||||
* Return the URL segment for the current HTTP_HOST value
|
* Return the URL segment for the current HTTP_HOST value
|
||||||
*
|
*
|
||||||
|
* @param string $locale
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function get_homepage_urlsegment() {
|
static function get_homepage_urlsegment() {
|
||||||
@ -65,8 +66,8 @@ class RootURLController extends Controller {
|
|||||||
$homePageOBJ = null;
|
$homePageOBJ = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(singleton('SiteTree')->hasExtension('Translatable')) {
|
if(singleton('SiteTree')->hasExtension('Translatable') && !$homePageOBJ) {
|
||||||
$urlSegment = Translatable::get_homepage_urlsegment_by_language(Translatable::current_locale());
|
$urlSegment = Translatable::get_homepage_urlsegment_by_locale(Translatable::current_locale());
|
||||||
} elseif($homePageOBJ) {
|
} elseif($homePageOBJ) {
|
||||||
$urlSegment = $homePageOBJ->URLSegment;
|
$urlSegment = $homePageOBJ->URLSegment;
|
||||||
}
|
}
|
||||||
@ -76,14 +77,34 @@ class RootURLController extends Controller {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if we're currently on the root page and should be redirecting to the root
|
* Returns true if we're currently on the root page and should be redirecting to the root
|
||||||
* Doesn't take into account actions, post vars, or get vars
|
* Doesn't take into account actions, post vars, or get vars.
|
||||||
|
*
|
||||||
|
* @param SiteTree $currentPage
|
||||||
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
static function should_be_on_root(SiteTree $currentPage) {
|
static function should_be_on_root(SiteTree $currentPage) {
|
||||||
if(!self::$is_at_root) return self::get_homepage_urlsegment() == $currentPage->URLSegment;
|
if(self::$is_at_root) return false;
|
||||||
else return false;
|
|
||||||
|
$matchesHomepageSegment = (self::get_homepage_urlsegment() == $currentPage->URLSegment);
|
||||||
|
// Don't redirect translated homepage segments,
|
||||||
|
// as the redirection target '/' will show the default locale
|
||||||
|
// instead of the translation.
|
||||||
|
$isTranslatedHomepage = (
|
||||||
|
singleton('SiteTree')->hasExtension('Translatable')
|
||||||
|
&& $currentPage->Locale
|
||||||
|
&& $currentPage->Locale != Translatable::default_locale()
|
||||||
|
);
|
||||||
|
if($matchesHomepageSegment && !$isTranslatedHomepage) return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Returns the (untranslated) hardcoded URL segment that will
|
||||||
|
* show when the website is accessed without a URL segment (http://mysite.com/).
|
||||||
|
* It is also the base for any redirections to '/' for the homepage,
|
||||||
|
* see {@link should_be_on_root()}.
|
||||||
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
static function get_default_homepage_urlsegment() {
|
static function get_default_homepage_urlsegment() {
|
||||||
|
@ -10,20 +10,23 @@
|
|||||||
* <h2>Configuration</h2>
|
* <h2>Configuration</h2>
|
||||||
*
|
*
|
||||||
* Enabling Translatable in the $extension array of a DataObject
|
* Enabling Translatable in the $extension array of a DataObject
|
||||||
* <code>
|
* <example>
|
||||||
* class MyClass extends DataObject {
|
* class MyClass extends DataObject {
|
||||||
* static $extensions = array(
|
* static $extensions = array(
|
||||||
* "Translatable"
|
* "Translatable"
|
||||||
* );
|
* );
|
||||||
* }
|
* }
|
||||||
* </code>
|
* </example>
|
||||||
*
|
*
|
||||||
* Enabling Translatable through {@link Object::add_extension()} in your _config.php:
|
* Enabling Translatable through {@link Object::add_extension()} in your _config.php:
|
||||||
* <example>
|
* <example>
|
||||||
|
* Translatable::set_default_locale('en_US');
|
||||||
* Object::add_extension('MyClass', 'Translatable');
|
* Object::add_extension('MyClass', 'Translatable');
|
||||||
* </example>
|
* </example>
|
||||||
*
|
*
|
||||||
* Make sure to rebuild the database through /dev/build after enabling translatable.
|
* Make sure to rebuild the database through /dev/build after enabling translatable.
|
||||||
|
* Use the correct {@link set_default_locale()} before building the database
|
||||||
|
* for the first time, as this locale will be written on all new records.
|
||||||
*
|
*
|
||||||
* <h2>Usage</h2>
|
* <h2>Usage</h2>
|
||||||
*
|
*
|
||||||
@ -210,7 +213,9 @@ class Translatable extends DataObjectDecorator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set default language.
|
* Set default language. Please set this value *before* creating
|
||||||
|
* any database records (like pages), as this locale will be attached
|
||||||
|
* to all new records.
|
||||||
*
|
*
|
||||||
* @param $locale String
|
* @param $locale String
|
||||||
*/
|
*/
|
||||||
@ -663,9 +668,9 @@ class Translatable extends DataObjectDecorator {
|
|||||||
*/
|
*/
|
||||||
function alternateGetByUrl($urlSegment, $extraFilter, $cache = null, $orderby = null) {
|
function alternateGetByUrl($urlSegment, $extraFilter, $cache = null, $orderby = null) {
|
||||||
$SQL_URLSegment = Convert::raw2sql($urlSegment);
|
$SQL_URLSegment = Convert::raw2sql($urlSegment);
|
||||||
Translatable::disable();
|
self::$enable_lang_filter = false;
|
||||||
$record = DataObject::get_one('SiteTree', "\"URLSegment\" = '{$SQL_URLSegment}'");
|
$record = DataObject::get_one('SiteTree', "\"URLSegment\" = '{$SQL_URLSegment}'", false);
|
||||||
Translatable::enable();
|
self::$enable_lang_filter = true;
|
||||||
|
|
||||||
return $record;
|
return $record;
|
||||||
}
|
}
|
||||||
@ -1023,14 +1028,14 @@ class Translatable extends DataObjectDecorator {
|
|||||||
* @param string $locale
|
* @param string $locale
|
||||||
* @return string|boolean URLSegment (e.g. "home")
|
* @return string|boolean URLSegment (e.g. "home")
|
||||||
*/
|
*/
|
||||||
static function get_homepage_urlsegment_by_language($locale) {
|
static function get_homepage_urlsegment_by_locale($locale) {
|
||||||
$origHomepageObj = Translatable::get_one_by_locale(
|
$origHomepageObj = Translatable::get_one_by_locale(
|
||||||
'SiteTree',
|
'SiteTree',
|
||||||
Translatable::default_locale(),
|
Translatable::default_locale(),
|
||||||
sprintf('"URLSegment" = \'%s\'', RootUrlController::get_default_homepage_urlsegment())
|
sprintf('"URLSegment" = \'%s\'', RootUrlController::get_default_homepage_urlsegment())
|
||||||
);
|
);
|
||||||
if($origHomepageObj) {
|
if($origHomepageObj) {
|
||||||
$translatedHomepageObj = $origHomepageObj->getTranslation(Translatable::current_locale());
|
$translatedHomepageObj = $origHomepageObj->getTranslation($locale);
|
||||||
if($translatedHomepageObj) {
|
if($translatedHomepageObj) {
|
||||||
return $translatedHomepageObj->URLSegment;
|
return $translatedHomepageObj->URLSegment;
|
||||||
}
|
}
|
||||||
@ -1039,6 +1044,13 @@ class Translatable extends DataObjectDecorator {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 2.4 Use get_homepage_urlsegment_by_locale()
|
||||||
|
*/
|
||||||
|
static function get_homepage_urlsegment_by_language($locale) {
|
||||||
|
return self::get_homepage_urlsegment_by_locale($locale);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated 2.4 Use is_default_locale()
|
* @deprecated 2.4 Use is_default_locale()
|
||||||
*/
|
*/
|
||||||
|
@ -37,7 +37,11 @@ class RootURLControllerTest extends SapphireTest {
|
|||||||
|
|
||||||
foreach($tests as $domain => $urlSegment) {
|
foreach($tests as $domain => $urlSegment) {
|
||||||
$_SERVER['HTTP_HOST'] = $domain;
|
$_SERVER['HTTP_HOST'] = $domain;
|
||||||
$this->assertEquals($urlSegment, RootURLController::get_homepage_urlsegment(), "Testing $domain matches $urlSegment");
|
$this->assertEquals(
|
||||||
|
$urlSegment,
|
||||||
|
RootURLController::get_homepage_urlsegment(Translatable::default_locale()),
|
||||||
|
"Testing $domain matches $urlSegment"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = $originalHost;
|
$_SERVER['HTTP_HOST'] = $originalHost;
|
||||||
|
@ -622,8 +622,6 @@ class TranslatableTest extends FunctionalTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testRootUrlDefaultsToTranslatedUrlSegment() {
|
function testRootUrlDefaultsToTranslatedUrlSegment() {
|
||||||
$_originalHost = $_SERVER['HTTP_HOST'];
|
|
||||||
|
|
||||||
$origPage = $this->objFromFixture('Page', 'homepage_en');
|
$origPage = $this->objFromFixture('Page', 'homepage_en');
|
||||||
$origPage->publish('Stage', 'Live');
|
$origPage->publish('Stage', 'Live');
|
||||||
$translationDe = $origPage->createTranslation('de_DE');
|
$translationDe = $origPage->createTranslation('de_DE');
|
||||||
@ -631,9 +629,8 @@ class TranslatableTest extends FunctionalTest {
|
|||||||
$translationDe->write();
|
$translationDe->write();
|
||||||
$translationDe->publish('Stage', 'Live');
|
$translationDe->publish('Stage', 'Live');
|
||||||
|
|
||||||
// test with translatable enabled
|
// test with translatable
|
||||||
$_SERVER['HTTP_HOST'] = '/?locale=de';
|
Translatable::set_reading_locale('de_DE');
|
||||||
Translatable::set_reading_locale('de_DE');
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
RootURLController::get_homepage_urlsegment(),
|
RootURLController::get_homepage_urlsegment(),
|
||||||
'heim',
|
'heim',
|
||||||
@ -653,7 +650,6 @@ class TranslatableTest extends FunctionalTest {
|
|||||||
|
|
||||||
// setting back to default
|
// setting back to default
|
||||||
Translatable::set_reading_locale('en_US');
|
Translatable::set_reading_locale('en_US');
|
||||||
$_SERVER['HTTP_HOST'] = $_originalHost;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testSiteTreeChangePageTypeInMaster() {
|
function testSiteTreeChangePageTypeInMaster() {
|
||||||
|
Loading…
Reference in New Issue
Block a user