object = $object; parent::__construct($name); } public function scaffoldFormField($title = null, $params = null) { if(empty($this->object)) { return null; } $relationName = substr($this->name,0,-2); $hasOneClass = $this->object->hasOneComponent($relationName); if(empty($hasOneClass)) { return null; } $hasOneSingleton = singleton($hasOneClass); if($hasOneSingleton instanceof File) { $field = new UploadField($relationName, $title); if($hasOneSingleton instanceof Image) { $field->setAllowedFileCategories('image/supported'); } return $field; } // Build selector / numeric field $titleField = $hasOneSingleton->hasField('Title') ? "Title" : "Name"; $list = DataList::create($hasOneClass); // Don't scaffold a dropdown for large tables, as making the list concrete // might exceed the available PHP memory in creating too many DataObject instances if($list->count() < 100) { $field = new DropdownField($this->name, $title, $list->map('ID', $titleField)); $field->setEmptyString(' '); } else { $field = new NumericField($this->name, $title); } return $field; } public function setValue($value, $record = null, $markChanged = true) { if($record instanceof DataObject) { $this->object = $record; } parent::setValue($value, $record, $markChanged); } }