"EditableOption" ); protected $readonly; /** * Deletes all the options attached to this field before * deleting the field. Keeps stray options from floating * around * * @return void */ public function delete() { $options = $this->Options(); if($options) { foreach($options as $option) { $option->delete(); } } parent::delete(); } /** * Duplicate a pages content. We need to make sure all * the fields attached to that page go with it * * @return DataObject a Clone of this node */ public function duplicate() { $clonedNode = parent::duplicate(); if($this->Options()) { foreach($this->Options() as $field) { $newField = $field->duplicate(); $newField->ParentID = $clonedNode->ID; $newField->write(); } } return $clonedNode; } /** * On before saving this object we need to go through and keep * an eye on all our option fields that are related to this * field in the form * * @param Array Data */ public function populateFromPostData($data) { parent::populateFromPostData($data); // get the current options $fieldSet = $this->Options(); // go over all the current options and check if ID and Title still exists foreach($fieldSet as $option) { if(isset($data[$option->ID]) && isset($data[$option->ID]['Title']) && $data[$option->ID]['Title'] != "field-node-deleted") { $option->populateFromPostData($data[$option->ID]); } else { $option->delete(); } } } /** * Return whether or not this field has addable options * such as a dropdown field or radio set * * @return bool */ public function hasAddableOptions() { return true; } /** * Set this multipleoptionfield to readonly */ protected function ReadonlyOption() { $this->readonly = true; } /** * Is this multipleoption field readonly to the user * * @return bool */ public function isReadonly() { return $this->readonly; } /** * Return the form field for this object in the front * end form view * * @return FormField */ public function getFormField() { return user_error('Please implement getFormField() on '. $this->class, E_USER_ERROR); } } ?>