silverstripe-framework/forms/HasManyComplexTableField.php
Andrew O'Neil 60e867d412 Fix saving of HasOneComplexTableField and HasManyComplexTableField when value is undefined
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.1.1@43552 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:55:18 +13:00

64 lines
2.0 KiB
PHP

<?php
class HasManyComplexTableField extends HasOneComplexTableField {
protected $itemClass = 'HasManyComplexTableField_Item';
function getParentIdName( $parentClass, $childClass ) {
return $this->getParentIdNameRelation( $childClass, $parentClass, 'has_one' );
}
function getControllerID() {
return $this->controller->ID;
}
function saveInto( DataObject $record ) {
$fieldName = $this->name;
$saveDest = $record->$fieldName();
if( ! $saveDest )
user_error( "HasManyComplexTableField::saveInto() Field '$fieldName' not found on $record->class.$record->ID", E_USER_ERROR );
$items = array();
if($list = $this->value[$this->htmlListField]) {
if($list != 'undefined') {
$items = explode(',', $list);
}
}
$saveDest->setByIDList( $items );
}
function ExtraData() {
$items = array();
foreach( $this->unpagedSourceItems as $item ) {
if( $item->{$this->joinField} == $this->controller->ID )
$items[] = $item->ID;
}
$list = implode( ',', $items );
$inputId = $this->id() . '_' . $this->htmlListEndName;
return <<<HTML
<input id="$inputId" name="{$this->name}[{$this->htmlListField}]" type="hidden" value="$list"/>
HTML;
}
}
class HasManyComplexTableField_Item extends ComplexTableField_Item {
function MarkingCheckbox() {
$name = $this->parent->Name() . '[]';
$joinVal = $this->item->{$this->parent->joinField};
$parentID = $this->parent->getControllerID();
if( $this->parent->IsReadOnly || ! $this->Can( 'edit' ) || ( $joinVal > 0 && $joinVal != $parentID ) )
return "<input class=\"checkbox\" type=\"checkbox\" name=\"$name\" value=\"{$this->item->ID}\" disabled=\"disabled\"/>";
else if( $joinVal == $parentID )
return "<input class=\"checkbox\" type=\"checkbox\" name=\"$name\" value=\"{$this->item->ID}\" checked=\"checked\"/>";
else
return "<input class=\"checkbox\" type=\"checkbox\" name=\"$name\" value=\"{$this->item->ID}\"/>";
}
}
?>