mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #5548 from kinglozzer/4661-extrafields-casting
FIX: castingHelper failed to find many_many_extraFields data (fixes #4661)
This commit is contained in:
commit
6035be7e57
@ -1781,6 +1781,12 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
$extraFields = $this->manyManyExtraFieldsForComponent($componentName) ?: array();
|
$extraFields = $this->manyManyExtraFieldsForComponent($componentName) ?: array();
|
||||||
$result = ManyManyList::create($componentClass, $table, $componentField, $parentField, $extraFields);
|
$result = ManyManyList::create($componentClass, $table, $componentField, $parentField, $extraFields);
|
||||||
|
|
||||||
|
|
||||||
|
// Store component data in query meta-data
|
||||||
|
$result = $result->alterDataQuery(function($query) use ($extraFields) {
|
||||||
|
$query->setQueryParam('Component.ExtraFields', $extraFields);
|
||||||
|
});
|
||||||
|
|
||||||
if($this->model) $result->setDataModel($this->model);
|
if($this->model) $result->setDataModel($this->model);
|
||||||
|
|
||||||
$this->extend('updateManyManyComponents', $result);
|
$this->extend('updateManyManyComponents', $result);
|
||||||
@ -2687,6 +2693,28 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function castingHelper($field) {
|
||||||
|
if ($fieldSpec = $this->db($field)) {
|
||||||
|
return $fieldSpec;
|
||||||
|
}
|
||||||
|
|
||||||
|
// many_many_extraFields aren't presented by db(), so we check if the source query params
|
||||||
|
// provide us with meta-data for a many_many relation we can inspect for extra fields.
|
||||||
|
$queryParams = $this->getSourceQueryParams();
|
||||||
|
if (!empty($queryParams['Component.ExtraFields'])) {
|
||||||
|
$extraFields = $queryParams['Component.ExtraFields'];
|
||||||
|
|
||||||
|
if (isset($extraFields[$field])) {
|
||||||
|
return $extraFields[$field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::castingHelper($field);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the given field exists in a database column on any of
|
* Returns true if the given field exists in a database column on any of
|
||||||
* the objects tables and optionally look up a dynamic getter with
|
* the objects tables and optionally look up a dynamic getter with
|
||||||
|
@ -919,6 +919,16 @@ class DataObjectTest extends SapphireTest {
|
|||||||
$this->assertEmpty($fields);
|
$this->assertEmpty($fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCastingHelper() {
|
||||||
|
$team = $this->objFromFixture('DataObjectTest_Team', 'team1');
|
||||||
|
|
||||||
|
$this->assertEquals('Varchar', $team->castingHelper('Title'), 'db field wasn\'t casted correctly');
|
||||||
|
$this->assertEquals('HTMLVarchar', $team->castingHelper('DatabaseField'), 'db field wasn\'t casted correctly');
|
||||||
|
|
||||||
|
$sponsor = $team->Sponsors()->first();
|
||||||
|
$this->assertEquals('Int', $sponsor->castingHelper('SponsorFee'), 'many_many_extraFields not casted correctly');
|
||||||
|
}
|
||||||
|
|
||||||
public function testSummaryFieldsCustomLabels() {
|
public function testSummaryFieldsCustomLabels() {
|
||||||
$team = $this->objFromFixture('DataObjectTest_Team', 'team1');
|
$team = $this->objFromFixture('DataObjectTest_Team', 'team1');
|
||||||
$summaryFields = $team->summaryFields();
|
$summaryFields = $team->summaryFields();
|
||||||
|
@ -287,6 +287,12 @@ class ViewableData extends Object implements IteratorAggregate {
|
|||||||
*/
|
*/
|
||||||
public function castingHelper($field) {
|
public function castingHelper($field) {
|
||||||
if($this->hasMethod('db') && $fieldSpec = $this->db($field)) {
|
if($this->hasMethod('db') && $fieldSpec = $this->db($field)) {
|
||||||
|
Deprecation::notice(
|
||||||
|
'4.0',
|
||||||
|
'ViewableData::castingHelper() will no longer extract casting information "db". Please override
|
||||||
|
castingHelper in your ViewableData subclass.',
|
||||||
|
Deprecation::SCOPE_GLOBAL
|
||||||
|
);
|
||||||
return $fieldSpec;
|
return $fieldSpec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user