mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
added setParentIdName() for really manual setting of the relation
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@46318 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
e4a7141f00
commit
623ab42539
@ -41,6 +41,12 @@ class ComplexTableField extends TableListField {
|
|||||||
*/
|
*/
|
||||||
protected $parentClass;
|
protected $parentClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string Database column name for the used relation (e.g. FamilyID
|
||||||
|
* if one Family has_many Individuals).
|
||||||
|
*/
|
||||||
|
protected $parentIdName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Influence output without having to subclass the template.
|
* @var array Influence output without having to subclass the template.
|
||||||
*/
|
*/
|
||||||
@ -250,6 +256,7 @@ JS;
|
|||||||
} else {
|
} else {
|
||||||
$detailFields = $childData->getCMSFields();
|
$detailFields = $childData->getCMSFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->getParentClass()) {
|
if($this->getParentClass()) {
|
||||||
$parentIdName = $this->getParentIdName($this->sourceClass,$this->getParentClass());
|
$parentIdName = $this->getParentIdName($this->sourceClass,$this->getParentClass());
|
||||||
if(!$parentIdName) {
|
if(!$parentIdName) {
|
||||||
@ -261,6 +268,7 @@ JS;
|
|||||||
}
|
}
|
||||||
// add relational fields
|
// add relational fields
|
||||||
$detailFields->push(new HiddenField("ctf[parentClass]"," ",$this->getParentClass()));
|
$detailFields->push(new HiddenField("ctf[parentClass]"," ",$this->getParentClass()));
|
||||||
|
|
||||||
if( $this->relationAutoSetting )
|
if( $this->relationAutoSetting )
|
||||||
$detailFields->push(new HiddenField("$parentIdName"," ",$ID));
|
$detailFields->push(new HiddenField("$parentIdName"," ",$ID));
|
||||||
}
|
}
|
||||||
@ -570,10 +578,22 @@ JS;
|
|||||||
return $this->getParentIdNameRelation( $childClass, $parentClass, 'has_one' );
|
return $this->getParentIdNameRelation( $childClass, $parentClass, 'has_one' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manually overwrites the parent-ID relations.
|
||||||
|
* @see setParentClass()
|
||||||
|
*
|
||||||
|
* @param String $str Example: FamilyID (when one Individual has_one Family)
|
||||||
|
*/
|
||||||
|
function setParentIdName($str) {
|
||||||
|
$this->parentIdName = $str;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the db-fieldname of the currently used relationship.
|
* Returns the db-fieldname of the currently used relationship.
|
||||||
*/
|
*/
|
||||||
function getParentIdNameRelation( $parentClass, $childClass, $relation ){
|
function getParentIdNameRelation( $parentClass, $childClass, $relation ){
|
||||||
|
if($this->parentIdName) return $this->parentIdName;
|
||||||
|
|
||||||
$relations = singleton( $parentClass )->$relation();
|
$relations = singleton( $parentClass )->$relation();
|
||||||
$classes = ClassInfo::ancestry( $childClass );
|
$classes = ClassInfo::ancestry( $childClass );
|
||||||
foreach( $relations as $k => $v ) {
|
foreach( $relations as $k => $v ) {
|
||||||
@ -700,7 +720,7 @@ class ComplexTableField_Popup extends Form {
|
|||||||
$childObject = new $this->sourceClass();
|
$childObject = new $this->sourceClass();
|
||||||
$this->fields->removeByName('ID');
|
$this->fields->removeByName('ID');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->saveInto($childObject);
|
$this->saveInto($childObject);
|
||||||
$childObject->write();
|
$childObject->write();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user