Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fix additional issues with saveAll().

Fixes #2857
  • Loading branch information...
commit fbba3621b5e522d1c7f7fe4c175a3298871469de 1 parent a1e06b9
Mark Story markstory authored
24 lib/Cake/Model/Behavior/TranslateBehavior.php
View
@@ -318,10 +318,19 @@ public function beforeValidate(Model $model) {
/**
* 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 @@ public function beforeSave(Model $model) {
*/
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 @@ protected function _setRuntimeData(Model $model) {
* @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  lib/Cake/Test/Case/Model/Behavior/TranslateBehaviorTest.php
View
@@ -742,6 +742,8 @@ public function testSaveAllTranslatedAssociations() {
'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']);
}
/**
Please sign in to comment.
Something went wrong with that request. Please try again.