Browse Source

Fix additional issues with saveAll().

Fixes #2857
mark_story 14 years ago
parent
commit
fbba3621b5

+ 19 - 5
lib/Cake/Model/Behavior/TranslateBehavior.php

@@ -318,10 +318,19 @@ class TranslateBehavior extends ModelBehavior {
 /**
  * beforeSave callback.
  *
+ * Copies data into the runtime property when `$options['validate']` is
+ * disabled.  Or the runtime data hasn't been set yet.
+ *
  * @param Model $model Model save was called on.
  * @return boolean true.
  */
-	public function beforeSave(Model $model) {
+	public function beforeSave(Model $model, $options = array()) {
+		if (isset($options['validate']) && $options['validate'] == false) {
+			unset($this->runtime[$model->alias]['beforeSave']);
+		}
+		if (isset($this->runtime[$model->alias]['beforeSave'])) {
+			return true;
+		}
 		$this->_setRuntimeData($model);
 		return true;
 	}
@@ -338,7 +347,7 @@ class TranslateBehavior extends ModelBehavior {
  */
 	protected function _setRuntimeData(Model $model) {
 		$locale = $this->_getLocale($model);
-		if (empty($locale) || isset($this->runtime[$model->alias]['beforeSave'])) {
+		if (empty($locale)) {
 			return true;
 		}
 		$fields = array_merge($this->settings[$model->alias], $this->runtime[$model->alias]['fields']);
@@ -370,12 +379,17 @@ class TranslateBehavior extends ModelBehavior {
  * @return void
  */
 	public function afterSave(Model $model, $created) {
-		if (!isset($this->runtime[$model->alias]['beforeSave'])) {
+		if (!isset($this->runtime[$model->alias]['beforeValidate']) && !isset($this->runtime[$model->alias]['beforeSave'])) {
 			return true;
 		}
 		$locale = $this->_getLocale($model);
-		$tempData = $this->runtime[$model->alias]['beforeSave'];
-		unset($this->runtime[$model->alias]['beforeSave']);
+		if (isset($this->runtime[$model->alias]['beforeValidate'])) {
+			$tempData = $this->runtime[$model->alias]['beforeValidate'];
+		} else {
+			$tempData = $this->runtime[$model->alias]['beforeSave'];
+		}
+
+		unset($this->runtime[$model->alias]['beforeValidate'], $this->runtime[$model->alias]['beforeSave']);
 		$conditions = array('model' => $model->alias, 'foreign_key' => $model->id);
 		$RuntimeModel = $this->translateModel($model);
 

+ 2 - 0
lib/Cake/Test/Case/Model/Behavior/TranslateBehaviorTest.php

@@ -742,6 +742,8 @@ class TranslateBehaviorTest extends CakeTestCase {
 			'conditions' => array('translated_article_id' => $Model->id)
 		));
 		$this->assertCount(2, $result);
+		$this->assertEquals($data['TranslatedItem'][0]['title'], $result[0]['TranslatedItem']['title']);
+		$this->assertEquals($data['TranslatedItem'][1]['title'], $result[1]['TranslatedItem']['title']);
 	}
 
 /**