From 6ad3cfa0ef47adbb4aab6bb8df59433535a073b0 Mon Sep 17 00:00:00 2001 From: john Date: Fri, 26 Sep 2008 21:11:51 +0000 Subject: [PATCH] Enhancing Set::map() so that it doesn't override manual setting of _name_. Test case enhanced to make sure it does so. git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7669 3807eeeb-6ff5-0310-8944-8be069107fe0 --- cake/libs/set.php | 12 +++-- cake/tests/cases/libs/set.test.php | 80 ++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/cake/libs/set.php b/cake/libs/set.php index 4aa39895f..e8660ed6a 100644 --- a/cake/libs/set.php +++ b/cake/libs/set.php @@ -194,12 +194,16 @@ class Set extends Object { $out[$key] = Set::__map($value, $class); if (is_object($out[$key])) { if ($primary !== true && is_array($value) && Set::countDim($value, true) === 2) { - $out[$key]->_name_ = $primary; + if(!isset($out[$key]->_name_)) { + $out[$key]->_name_ = $primary; + } } } } elseif (is_array($value)) { if ($primary === true) { - $out->_name_ = $key; + if(!isset($out->_name_)) { + $out->_name_ = $key; + } $primary = false; foreach($value as $key2 => $value2) { $out->{$key2} = Set::__map($value2, true); @@ -208,7 +212,9 @@ class Set extends Object { if (!is_numeric($key)) { $out->{$key} = Set::__map($value, true, $key); if (is_object($out->{$key}) && !is_numeric($key)) { - $out->{$key}->_name_ = $key; + if(!isset($out->{$key}->_name_)) { + $out->{$key}->_name_ = $key; + } } } else { $out->{$key} = Set::__map($value, true); diff --git a/cake/tests/cases/libs/set.test.php b/cake/tests/cases/libs/set.test.php index af2e3ae93..2eeeb025f 100644 --- a/cake/tests/cases/libs/set.test.php +++ b/cake/tests/cases/libs/set.test.php @@ -1883,6 +1883,86 @@ class SetTest extends CakeTestCase { $expected->Piece = array($piece, $piece2); $this->assertIdentical($expected, $result); + + //Same data, but should work if _name_ has been manually defined: + $data = array( + 'User' => array( + 'id' => 1, + 'email' => 'user@example.com', + 'first_name' => 'John', + 'last_name' => 'Smith', + '_name_' => 'FooUser', + ), + 'Piece' => array( + array( + 'id' => 1, + 'title' => 'Moonlight Sonata', + 'composer' => 'Ludwig van Beethoven', + '_name_' => 'FooPiece', + 'PiecesUser' => array( + 'id' => 1, + 'created' => '2008-01-01 00:00:00', + 'modified' => '2008-01-01 00:00:00', + 'piece_id' => 1, + 'user_id' => 2, + '_name_' => 'FooPiecesUser', + ) + ), + array( + 'id' => 2, + 'title' => 'Moonlight Sonata 2', + 'composer' => 'Ludwig van Beethoven', + '_name_' => 'FooPiece', + 'PiecesUser' => array( + 'id' => 2, + 'created' => '2008-01-01 00:00:00', + 'modified' => '2008-01-01 00:00:00', + 'piece_id' => 2, + 'user_id' => 2, + '_name_' => 'FooPiecesUser', + ) + ) + ) + ); + + $result = Set::map($data); + + $expected = new stdClass(); + $expected->_name_ = 'FooUser'; + $expected->id = 1; + $expected->email = 'user@example.com'; + $expected->first_name = 'John'; + $expected->last_name = 'Smith'; + + $piece = new stdClass(); + $piece->id = 1; + $piece->title = 'Moonlight Sonata'; + $piece->composer = 'Ludwig van Beethoven'; + $piece->_name_ = 'FooPiece'; + $piece->PiecesUser = new stdClass(); + $piece->PiecesUser->id = 1; + $piece->PiecesUser->created = '2008-01-01 00:00:00'; + $piece->PiecesUser->modified = '2008-01-01 00:00:00'; + $piece->PiecesUser->piece_id = 1; + $piece->PiecesUser->user_id = 2; + $piece->PiecesUser->_name_ = 'FooPiecesUser'; + + $piece2 = new stdClass(); + $piece2->id = 2; + $piece2->title = 'Moonlight Sonata 2'; + $piece2->composer = 'Ludwig van Beethoven'; + $piece2->_name_ = 'FooPiece'; + $piece2->PiecesUser = new stdClass(); + $piece2->PiecesUser->id = 2; + $piece2->PiecesUser->created = '2008-01-01 00:00:00'; + $piece2->PiecesUser->modified = '2008-01-01 00:00:00'; + $piece2->PiecesUser->piece_id = 2; + $piece2->PiecesUser->user_id = 2; + $piece2->PiecesUser->_name_ = 'FooPiecesUser'; + + $expected->Piece = array($piece, $piece2); + + $this->assertIdentical($expected, $result); } /** * testPushDiff method