array(), 'has_one' => array(), 'has_many' => array(), 'many_many' => array(), 'defaults' => array() ); // Make an exception for SiteConfig $setting = (is_subclass_of($class, "SiteTree") || $class == "SiteConfig") ? Bedrock::get_page_type($class) : Bedrock::get_component($class); if($setting) { Bedrock::message("Loading statics for $class","good"); if($extraFields = $setting->getFields()) { foreach($extraFields as $field) { $field->updateDB($statics); $field->updateHasOne($statics); $statics['defaults'][$field->getFieldName()] = $field->getDefaultValue(); } } if($v = $setting->getDefaultSort()) { if($v == "_drag_") { SortableDataObject::add_sortable_class($class); } else { singleton($class)->set_stat('default_sort',$v); //echo $class . " " . singleton($class)->stat('default_sort'); //Object::add_static_var($class,'default_sort', $v); } } if($v = $setting->getSingularName()) { Object::add_static_var($class,'singular_name', $v); } if($v = $setting->getPluralName()) { Object::add_static_var($class,'plural_name', $v); } if($components = $setting->getComponents()) { foreach($components as $component) { if(class_exists($component->getComponentClass())) { $component->updateRelations($statics, $class); } } } } else { Bedrock::message("No settings for $class","bad"); } return $statics; } /** * Most of the CMS fields are added in the child classes, but here the common "hide" * paramter is handled for removing fields from the CMS interface. * * @param FieldSet $fieldset A reference to a fieldset that has already been created * by this class. */ public function updateCMSFields(&$fieldset) { if($hides = $this->getClassSettings()->getHide()) { if($hides instanceof BedrockSetting) { foreach($hides->toArray() as $field) { $fieldset->removeByName($field); } } else { $fieldset->removeByName($hides); } } if($instances = $this->getClassSettings()->getAllowedInstances()) { if($set = DataObject::get($this->owner->class)) { if($set->Count() >= $instances) $fieldset->removeByName("ClassName"); } } } /** * A handy method for getting class settings at the instance level. All Bedrock objects * can talk to the config file via $object->getProjectSettings(). * Ex. $somePageTypeObject->getClassSettings() will return Bedrock::get_setting('PageTypes.SomePageType') * * @return BedrockSetting */ public function getClassSettings() { if($this->owner instanceof SiteTree || $this->owner->class == "SiteConfig") { return Bedrock::get_setting("PageTypes.{$this->owner->class}"); } elseif($this->owner instanceof DataObject) { if($setting = Bedrock::get_setting("Components.{$this->owner->class}")) return $setting; return Bedrock::get_component($this->owner->class); } elseif($this->owner instanceof Controller) { return Bedrock::get_setting("PageTypes.".str_replace("_Controller","",$this->owner->class)); } return new BedrockSetting(); } }