From ea94b57ec1dba3be7353f4aa4eaafe46d9212a22 Mon Sep 17 00:00:00 2001 From: "mariano.iglesias" Date: Thu, 22 May 2008 14:22:12 +0000 Subject: [PATCH] Properly setting non-array option overrides, fixes #4732 git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7008 3807eeeb-6ff5-0310-8944-8be069107fe0 --- cake/libs/model/behaviors/containable.php | 15 ++++++++------- .../libs/model/behaviors/containable.test.php | 6 ++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/cake/libs/model/behaviors/containable.php b/cake/libs/model/behaviors/containable.php index cae8179d4..59ab5b606 100644 --- a/cake/libs/model/behaviors/containable.php +++ b/cake/libs/model/behaviors/containable.php @@ -92,10 +92,7 @@ class ContainableBehavior extends ModelBehavior { * @access public */ function beforeFind(&$Model, $query) { - $reset = true; - if (isset($query['reset'])) { - $reset = $query['reset']; - } + $reset = (isset($query['reset']) ? $query['reset'] : true); $noContain = ((isset($this->runtime[$Model->alias]['contain']) && empty($this->runtime[$Model->alias]['contain'])) || (isset($query['contain']) && empty($query['contain']))); $contain = array(); if (isset($this->runtime[$Model->alias]['contain'])) { @@ -265,13 +262,13 @@ class ContainableBehavior extends ModelBehavior { $children = (array)$children; foreach ($children as $key => $val) { if (is_string($key) && is_string($val) && !in_array($key, $options, true)) { - $children[$key] = (array)$val; + $children[$key] = (array) $val; } } $keys = array_keys($children); if ($keys && isset($children[0])) { - $keys = am(array_values($children), $keys); + $keys = array_merge(array_values($children), $keys); } foreach ($keys as $i => $key) { @@ -304,7 +301,11 @@ class ContainableBehavior extends ModelBehavior { } } if ($optionKey && isset($children[$key])) { - $keep[$name][$key] = array_merge((isset($keep[$name][$key]) ? $keep[$name][$key] : array()), (array) $children[$key]); + if (!empty($keep[$name][$key]) && is_array($keep[$name][$key])) { + $keep[$name][$key] = array_merge((isset($keep[$name][$key]) ? $keep[$name][$key] : array()), (array) $children[$key]); + } else { + $keep[$name][$key] = $children[$key]; + } unset($children[$key]); } } diff --git a/cake/tests/cases/libs/model/behaviors/containable.test.php b/cake/tests/cases/libs/model/behaviors/containable.test.php index 3cf8e6ebc..cc4adb86d 100644 --- a/cake/tests/cases/libs/model/behaviors/containable.test.php +++ b/cake/tests/cases/libs/model/behaviors/containable.test.php @@ -105,6 +105,12 @@ class ContainableTest extends CakeTestCase { $this->assertEqual(Set::extract('/Article/keep/User/fields', $r), array('user')); $this->assertTrue(Set::matches('/Comment/keep/Attachment', $r)); $this->assertEqual(Set::extract('/Comment/keep/Attachment/fields', $r), array('attachment')); + + $r = $this->__containments($this->Article, array('Comment' => array('limit' => 1))); + $this->assertEqual(array_keys($r), array('Comment', 'Article')); + $this->assertEqual(array_shift(Set::extract('/Comment/keep', $r)), array('keep' => array())); + $this->assertTrue(Set::matches('/Article/keep/Comment', $r)); + $this->assertEqual(array_shift(Set::extract('/Article/keep/Comment/.', $r)), array('limit' => 1)); } function testInvalidContainments() {