mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
MINOR Partially merged r70306, r74986, r75027 from trunk, seems like parts have been missed in previous merges
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.3@76593 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
0de8502b41
commit
7e50b9ef1c
@ -970,8 +970,21 @@ class Translatable extends DataObjectDecorator {
|
||||
|
||||
$class = $this->owner->class;
|
||||
$newTranslation = new $class;
|
||||
|
||||
// copy all fields from owner (apart from ID)
|
||||
$newTranslation->update($this->owner->toMap());
|
||||
|
||||
// If the object has Hierarchy extension,
|
||||
// check for existing translated parents and assign
|
||||
// their ParentID (and overwrite any existing ParentID relations
|
||||
// to parents in other language). If no parent translations exist,
|
||||
// they are automatically created in onBeforeWrite()
|
||||
if($newTranslation->hasField('ParentID')) {
|
||||
$origParent = $this->owner->Parent();
|
||||
$newTranslationParent = $origParent->getTranslation($locale);
|
||||
if($newTranslationParent) $newTranslation->ParentID = $newTranslationParent->ID;
|
||||
}
|
||||
|
||||
$newTranslation->ID = 0;
|
||||
$newTranslation->Locale = $locale;
|
||||
// hacky way to set an existing translation group in onAfterWrite()
|
||||
|
@ -524,9 +524,19 @@ class TranslatableTest extends FunctionalTest {
|
||||
$this->assertFalse($parentPage->hasTranslation('de_DE'));
|
||||
|
||||
$translatedGrandChildPage = $grandchildPage->createTranslation('de_DE');
|
||||
|
||||
$this->assertTrue($grandchildPage->hasTranslation('de_DE'));
|
||||
$this->assertTrue($child1Page->hasTranslation('de_DE'));
|
||||
$this->assertTrue($parentPage->hasTranslation('de_DE'));
|
||||
|
||||
$this->assertEquals(
|
||||
$grandchildPage->getTranslation('de_DE')->Parent()->ID,
|
||||
$child1Page->getTranslation('de_DE')->ID
|
||||
);
|
||||
$this->assertEquals(
|
||||
$child1Page->getTranslation('de_DE')->Parent()->ID,
|
||||
$parentPage->getTranslation('de_DE')->ID
|
||||
);
|
||||
}
|
||||
|
||||
function testHierarchyAllChildrenIncludingDeleted() {
|
||||
@ -592,27 +602,22 @@ class TranslatableTest extends FunctionalTest {
|
||||
SiteTree::flush_and_destroy_cache();
|
||||
$parentPage = $this->objFromFixture('Page', 'parent');
|
||||
$this->assertEquals(
|
||||
$parentPage->AllChildrenIncludingDeleted()->column('ID'),
|
||||
$translatedParentPage->AllChildrenIncludingDeleted()->column('ID'),
|
||||
array(
|
||||
$child2PageTranslatedID,
|
||||
$child1PageTranslatedID // $child1PageTranslated was deleted from stage, so the original record doesn't have the ID set
|
||||
),
|
||||
"Showing AllChildrenIncludingDeleted() in translation mode with parent page in default language shows children in default language"
|
||||
"Showing AllChildrenIncludingDeleted() in translation mode with parent page in translated language shows children in translated language"
|
||||
);
|
||||
|
||||
// @todo getTranslation() doesn't switch languages for future calls, its handled statically through set_reading_locale()
|
||||
// // on translated page in translation mode using getTranslation()
|
||||
// SiteTree::flush_and_destroy_cache();
|
||||
// $parentPage = $this->objFromFixture('Page', 'parent');
|
||||
// $translatedParentPage = $parentPage->getTranslation('de_DE');
|
||||
// $this->assertEquals(
|
||||
// $translatedParentPage->AllChildrenIncludingDeleted()->column('ID'),
|
||||
// array(
|
||||
// $child2PageTranslatedID,
|
||||
// $child1PageTranslatedID,
|
||||
// ),
|
||||
// "Showing AllChildrenIncludingDeleted() in translation mode with translated parent page shows only translated children"
|
||||
// );
|
||||
Translatable::set_reading_locale('de_DE');
|
||||
SiteTree::flush_and_destroy_cache();
|
||||
$parentPage = $this->objFromFixture('Page', 'parent');
|
||||
$this->assertEquals(
|
||||
$parentPage->AllChildrenIncludingDeleted()->column('ID'),
|
||||
array(),
|
||||
"Showing AllChildrenIncludingDeleted() in translation mode with parent page in translated language shows children in default language"
|
||||
);
|
||||
|
||||
// reset language
|
||||
Translatable::set_reading_locale('en_US');
|
||||
|
Loading…
Reference in New Issue
Block a user