Fix additional issues with saveAll().

Fixes #2857
This commit is contained in:
mark_story 2012-05-07 21:36:28 -04:00 committed by Jose Lorenzo Rodriguez
parent e53074dab9
commit d9bf3cf987
2 changed files with 21 additions and 5 deletions

View file

@ -318,10 +318,19 @@ class TranslateBehavior extends ModelBehavior {
/** /**
* beforeSave callback. * 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. * @param Model $model Model save was called on.
* @return boolean true. * @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); $this->_setRuntimeData($model);
return true; return true;
} }
@ -338,7 +347,7 @@ class TranslateBehavior extends ModelBehavior {
*/ */
protected function _setRuntimeData(Model $model) { protected function _setRuntimeData(Model $model) {
$locale = $this->_getLocale($model); $locale = $this->_getLocale($model);
if (empty($locale) || isset($this->runtime[$model->alias]['beforeSave'])) { if (empty($locale)) {
return true; return true;
} }
$fields = array_merge($this->settings[$model->alias], $this->runtime[$model->alias]['fields']); $fields = array_merge($this->settings[$model->alias], $this->runtime[$model->alias]['fields']);
@ -370,12 +379,17 @@ class TranslateBehavior extends ModelBehavior {
* @return void * @return void
*/ */
public function afterSave(Model $model, $created) { 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; return true;
} }
$locale = $this->_getLocale($model); $locale = $this->_getLocale($model);
if (isset($this->runtime[$model->alias]['beforeValidate'])) {
$tempData = $this->runtime[$model->alias]['beforeValidate'];
} else {
$tempData = $this->runtime[$model->alias]['beforeSave']; $tempData = $this->runtime[$model->alias]['beforeSave'];
unset($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); $conditions = array('model' => $model->alias, 'foreign_key' => $model->id);
$RuntimeModel = $this->translateModel($model); $RuntimeModel = $this->translateModel($model);

View file

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