getType(), Bedrock::get_default('Managers')) ; } public function setController($controller) { $this->controller = $controller; } public function getController() { return $this->controller; } public function build(BedrockComponent $component) { $this->component = $component; if(in_array(strtolower($component->getType()),array('many','manymany'))) { return $this->buildHasManyInterface(); } return $this->buildHasOneInterface(); } protected function buildHasManyInterface() { if(!in_array($this->getType(), Bedrock::get_default('HasManyInterfaces'))) { user_error("Invalid interface provided for {$this->getComponentClass()}.",E_USER_ERROR); } if($this->isManager()) { return $this->buildManager(); } elseif($this->getType() == "upload") { return $this->buildUpload(); } elseif($this->getType() == "checkboxes") { return $this->buildCheckboxes(); } elseif($this->getType() == "tagfield") { return $this->buildTagField(); } return false; } protected function buildHasOneInterface() { if(!in_array($this->getType(), Bedrock::get_default('HasOneInterfaces'))) { user_error("Invalid interface provided for $component.",E_USER_ERROR); } if($this->isManager()) { return $this->buildManager(); } elseif($this->getType() == "upload") { return $this->buildUpload(); } elseif($this->getType() == "dropdown") { return $this->buildDropdown(); } return false; } protected function buildManager() { $dom = "DataObjectManager"; if($this->getType() == "filemanager") $dom = "File".$dom; elseif($this->getType() == "imagemanager") $dom = "Image".$dom; if($this->component->getType() == "manymany") $dom = "ManyMany".$dom; elseif($this->component->getType() == "one") $dom = "HasOne".$dom; $summary = $this->component->getSummary() ? $this->component->getSummary()->toArray() : null; $fifth = ($this->getType() == "filemanager") ? null : $summary; $sixth = ($this->getType() == "filemanager") ? $summary : null; $field = Object::create( $dom, $this->controller, $this->component->getComponentName(), $this->component->getComponentClass(), $fifth, $sixth ); if($title = $this->getAddTitle()) { $field->setAddTitle($title); } if($this->getType() == "filemanager") { if($folder = $this->getUploadFolder()) { $field->setUploadFolder($folder); } if($types = $this->getAllowedFileTypes()) { $field->setAllowedFileTypes($types->toArray()); } if($view = $this->getDefaultView()) { $field->setDefaultView($view); } if($label = $this->getGridLabelField()) { $field->setGridLabelField($label); } } if($this->controller->class == "SiteConfig") { $field->setSourceID($this->controller->ID); } return $field; } protected function buildCheckboxes() { $field = new CheckboxSetField( $this->component->getComponentName(), $this->component->getLabel(), BedrockUtil::map($this->component->getComponentClass(),'ID', $this->getLabelField()) ); return $field; } protected function buildTagField() { $field = new TagField($this->component->getComponentName(), $this->component->getLabel()); if($this->getSeparator()) { $field->setSeparator($this->getSeparator()); } return $field; } protected function buildUpload() { $component_class = $this->component->getComponentClass(); $name = $this->component->getComponentName(); if(is_subclass_of($component_class, "File") || $component_class == "File") { $type = strtolower($this->component->getType()); $image = ($component_class == "Image" || is_subclass_of($component_class, "Image")); $field = false; switch($type) { case "many": if(class_exists('UploadifyField') && Bedrock::get_default('ManyUploader') == "Uploadify") { $class = $image ? "MultipleImageUploadField" : "MultipleFileUploadField"; $field = new $class($name, $this->component->getLabel()); if($this->getAllowedFileTypes()) { $field->setFileTypes($this->getAllowedFileTypes()->toArray()); } if($this->getUploadFolder()) { $field->setUploadFolder($this->getUploadFolder()); } } else { $class = $image ? "ImageAssetManager" : "AssetManager"; $field = new $class($this->controller, $name, $component_class); } break; case "manymany": user_error("Many_many relation for type $component_class is not allowed.", E_USER_ERROR); break; case "one": if(class_exists('UploadifyField') && Bedrock::get_default('Uploader') == "Uploadify") { $class = $image ? "ImageUploadField" : "FileUploadField"; $field = new $class($name, $this->component->getLabel()); if($this->getAllowedFileTypes()) { $field->setFileTypes($this->getAllowedFileTypes()->toArray()); } } else { $class = $image ? "ImageField" : "FileIFrameField"; $field = new $class($name, $this->component->getLabel()); } break; } if(!$field) { user_error("Could not build uploader for field $name", E_USER_ERROR); } return $field; } else { user_error("Interface type 'upload' specified for $component, but it is not a File.",E_USER_ERROR); } } protected function buildDropdown() { return new DropdownField( $this->component->getComponentName()."ID", $this->component->getLabel(), BedrockUtil::map($this->component->getComponentClass()) ); } }