Skip to content

Commit

Permalink
Improving save all translations
Browse files Browse the repository at this point in the history
  • Loading branch information
lorenzo committed Feb 15, 2014
1 parent e3c730d commit 6bfb796
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
27 changes: 17 additions & 10 deletions src/Model/Behavior/TranslateBehavior.php
Expand Up @@ -342,7 +342,7 @@ protected function _groupTranslations($results) {
protected function _bundleTranslatedFields($entity) {
$translations = (array)$entity->get('_translations');

if (empty($translations)) {
if (empty($translations) && !$entity->dirty('_translations')) {
return;
}

Expand All @@ -353,14 +353,13 @@ protected function _bundleTranslatedFields($entity) {

foreach ($translations as $lang => $translation) {
foreach ($fields as $field) {
if ($translation->dirty($field)) {
$find[] = [
'locale' => $lang,
'field' => $field,
'foreign_key' => $key
];
$contents[] = $translation->get($field);
if (!$translation->dirty($field)) {
continue;
}
$find[] = ['locale' => $lang, 'field' => $field, 'foreign_key' => $key];
$contents[] = new Entity(['content' => $translation->get($field)], [
'useSetters' => false
]);
}
}

Expand All @@ -375,9 +374,17 @@ protected function _bundleTranslatedFields($entity) {
$query->unionAll($q);
}

foreach ($query->hydrate(false)->bufferResults(false) as $row) {
debug($row);
foreach ($query->hydrate(false)->bufferResults(false) as $i => $row) {
if (!empty($row['id'])) {
$contents[$i]->set('id', $row['id'], ['setter' => false]);
$contents[$i]->isNew(false);
} else {
$contents[$i]->set($find[$i], ['setter' => false, 'guard' => false]);
$contents[$i]->isNew(true);
}
}

$entity->set('_i18n', $contents);
}

}
6 changes: 6 additions & 0 deletions tests/TestCase/Model/Behavior/TranslateBehaviorTest.php
Expand Up @@ -587,6 +587,12 @@ public function testDelete() {
$this->assertEquals(0, $translations);
}

/**
* Tests saving multiple translations at once when the translations already
* exist in the database
*
* @return void
*/
public function testSaveMultipleTranslations() {
$table = TableRegistry::get('Articles');
$table->addBehavior('Translate', ['fields' => ['title', 'body']]);
Expand Down

0 comments on commit 6bfb796

Please sign in to comment.