FIX: Unable to access a list of all many_many_extraFields

This commit is contained in:
Loz Calver 2015-02-25 09:49:36 +00:00
parent 18f7855794
commit 3a7e24a220
2 changed files with 29 additions and 4 deletions

View File

@ -1797,9 +1797,8 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
} }
} else { } else {
// Find all the extra fields for all components // Find all the extra fields for all components
$newItems = eval("return (array){$class}::\$many_many_extraFields;"); $newItems = (array)Config::inst()->get($class, 'many_many_extraFields', Config::UNINHERITED);
foreach($newItems as $k => $v) { foreach($newItems as $k => $v) {
if(!is_array($v)) { if(!is_array($v)) {
@ -1812,9 +1811,11 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
} }
} }
return isset($items) ? array_merge($newItems, $items) : $newItems; $items = isset($items) ? array_merge($newItems, $items) : $newItems;
} }
} }
return isset($items) ? $items : null;
} }
/** /**

View File

@ -918,6 +918,20 @@ class DataObjectTest extends SapphireTest {
$player = $this->objFromFixture('DataObjectTest_Player', 'player1'); $player = $this->objFromFixture('DataObjectTest_Player', 'player1');
$team = $this->objFromFixture('DataObjectTest_Team', 'team1'); $team = $this->objFromFixture('DataObjectTest_Team', 'team1');
// Get all extra fields
$teamExtraFields = $team->many_many_extraFields();
$this->assertEquals(array(
'Players' => array('Position' => 'Varchar(100)')
), $teamExtraFields);
// Ensure fields from parent classes are included
$subTeam = singleton('DataObjectTest_SubTeam');
$teamExtraFields = $subTeam->many_many_extraFields();
$this->assertEquals(array(
'Players' => array('Position' => 'Varchar(100)'),
'FormerPlayers' => array('Position' => 'Varchar(100)')
), $teamExtraFields);
// Extra fields are immediately available on the Team class (defined in $many_many_extraFields) // Extra fields are immediately available on the Team class (defined in $many_many_extraFields)
$teamExtraFields = $team->many_many_extraFields('Players'); $teamExtraFields = $team->many_many_extraFields('Players');
$this->assertEquals($teamExtraFields, array( $this->assertEquals($teamExtraFields, array(
@ -1382,6 +1396,16 @@ class DataObjectTest_SubTeam extends DataObjectTest_Team implements TestOnly {
private static $has_one = array( private static $has_one = array(
"ParentTeam" => 'DataObjectTest_Team', "ParentTeam" => 'DataObjectTest_Team',
); );
private static $many_many = array(
'FormerPlayers' => 'DataObjectTest_Player'
);
private static $many_many_extraFields = array(
'FormerPlayers' => array(
'Position' => 'Varchar(100)'
)
);
} }
class OtherSubclassWithSameField extends DataObjectTest_Team implements TestOnly { class OtherSubclassWithSameField extends DataObjectTest_Team implements TestOnly {
private static $db = array( private static $db = array(