public function getCMSFields() { //scaffold cms fields without calling 'updateCMSFields' $fields = $this->scaffoldFormFields(array('includeRelations' => $this->ID > 0, 'tabbed' => true, 'ajaxSafe' => true)); if ($grid = $fields->fieldByName("Root.ProductSelections.ProductSelections")) { //move field to main tab $fields->removeByName("ProductSelections"); $fields->addFieldToTab("Root.Main", $grid); $grid->setConfig($conf = new GridFieldConfig_RecordEditor()); $conf->removeComponentsByType("GridFieldDataColumns")->removeComponentsByType("GridFieldDataColumns")->removeComponentsByType("GridFieldFilterHeader")->removeComponentsByType("GridFieldPaginator")->removeComponentsByType("GridFieldPageCount")->addComponent(new GridFieldOrderableRows())->addComponent(new GridFieldEditableColumns()); $summaryfields = MenuProductSelection::config()->summary_fields; unset($summaryfields['Group']); //add editable group column to grid $groups = $this->Groups(); if ($groups->exists()) { $dropdown = DropdownField::create("GroupID", 'Grouping', $groups->map('ID', 'Title')->toArray())->setHasEmptyDefault(true); $summaryfields['GroupID'] = array('title' => 'Group', 'callback' => function ($record, $column, $grid) use($dropdown) { return $dropdown; }); $conf->getComponentByType('GridFieldDetailForm')->setItemEditFormCallback(function ($form, $component) use($dropdown) { $fields = $form->Fields(); if (!$fields->fieldByName("GroupID")) { $fields->push($dropdown); } }); } $conf->getComponentByType('GridFieldEditableColumns')->setDisplayFields($summaryfields); //re-add edit/delete row actions so they are in the correct order $conf->removeComponentsByType("GridFieldEditButton")->removeComponentsByType("GridFieldDeleteAction")->addComponent(new GridFieldEditButton())->addComponent(new GridFieldDeleteAction())->addComponent($importer = new GridFieldImporter('before')); $loader = $importer->getLoader($grid); $self = $this; $loader->mappableFields = array('Product.InternalItemID' => 'SKU / Product Identifier', 'Group.Title' => 'Group'); $loader->transforms = array("Product.InternalItemID" => array("create" => false, "link" => true, "required" => true), "Group.Title" => array('list' => $this->Groups())); $loader->duplicateChecks = array("Product.InternalItemID" => "Product.InternalItemID"); } if ($grid = $fields->fieldByName("Root.Groups.Groups")) { $conf = $grid->getConfig()->removeComponentsByType("GridFieldAddExistingAutocompleter")->removeComponentsByType('GridFieldDataColumns')->removeComponentsByType('GridFieldAddNewButton')->removeComponentsByType("GridFieldFilterHeader")->removeComponentsByType("GridFieldPaginator")->removeComponentsByType("GridFieldPageCount")->addComponent($newbutton = new GridFieldAddNewInlineButton())->addComponent(new GridFieldEditableColumns())->addComponent(new GridFieldOrderableRows()); $newbutton->setTitle("Add Menu Grouping"); $conf->getComponentByType('GridFieldEditableColumns')->setDisplayFields(array('Title' => function ($record, $column, $grid) { return new TextField($column, 'Title'); })); //re-add edit/delete row actions so they are in the correct order $conf->removeComponentsByType("GridFieldEditButton")->removeComponentsByType("GridFieldDeleteAction")->addComponent(new GridFieldDeleteAction()); } $this->extend('updateCMSFields', $fields); return $fields; }
function getCMSFields() { $fields = parent::getCMSFields(); $fields->insertBefore(new Tab('About'), 'Settings'); $fields->insertBefore(new Tab('Host'), 'Settings'); // header $fields->removeByName('Content'); $fields->addFieldToTab('Root.Main', $uploadField = new UploadField('HeaderPics', 'Header Pictures')); $uploadField->setAllowedMaxFileNumber(10); $uploadField->setFolderName('openstackdays'); // About $fields->addFieldToTab('Root.About', $about_desc = new HtmlEditorField('AboutDescription', 'Intro Text', $this->AboutDescription)); $config = new GridFieldConfig_RecordEditor(10); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('YoutubeID' => 'YoutubeID', 'Caption' => 'Caption', 'Active' => 'Active')); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldToTab('Root.About', new GridField('AboutVideos', 'Videos', $this->AboutVideos(), $config)); // Host $fields->addFieldToTab('Root.Host', $host_intro = new HtmlEditorField('HostIntro', 'Intro Text', $this->HostIntro)); $fields->addFieldToTab('Root.Host', $host_faq = new HtmlEditorField('HostFAQs', 'FAQs', $this->HostFAQs)); $fields->addFieldToTab('Root.Host', $toolkit_text = new HtmlEditorField('ToolkitDesc', 'Toolkit Text', $this->ToolkitDesc)); $config = new GridFieldConfig_RecordEditor(3); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldToTab('Root.Host', new GridField('OfficialGuidelines', 'Official Guidelines', $this->OfficialGuidelines(), $config)); $config = new GridFieldConfig_RecordEditor(3); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldToTab('Root.Host', new GridField('PlanningTools', 'Planning Tools', $this->PlanningTools(), $config)); $fields->addFieldToTab('Root.Host', $artwork_intro = new HtmlEditorField('ArtworkIntro', 'Artwork intro text', $this->ArtworkIntro)); $artwork_intro->setRows(4); $config = new GridFieldConfig_RecordEditor(3); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldToTab('Root.Host', new GridField('Artwork', 'Artwork', $this->Artwork(), $config)); $fields->addFieldToTab('Root.Host', $collateral_intro = new HtmlEditorField('CollateralIntro', 'Collateral intro text', $this->CollateralIntro)); $collateral_intro->setRows(4); $config = new GridFieldConfig_RecordEditor(10); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('YoutubeID' => 'YoutubeID', 'Caption' => 'Caption', 'Active' => 'Active')); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldToTab('Root.Host', new GridField('Collaterals', 'Video / Presentations / Collateral', $this->Collaterals(), $config)); $config = new GridFieldConfig_RecordEditor(3); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldToTab('Root.Host', new GridField('Media', 'PR / Media', $this->Media(), $config)); return $fields; }
/** * @param FieldList $fields * @return FieldList|void */ public function updateCMSFields(FieldList $fields) { $oldFields = $fields->toArray(); foreach ($oldFields as $field) { $fields->remove($field); } $fields->push(new LiteralField("Title", "<h2>OpenStack Release</h2>")); $fields->push(new TextField("Name", "Name")); $date = DateField::create('ReleaseDate')->setConfig('showcalendar', true); $fields->push($date); $date->setTitle('Release Date'); $fields->push(new TextField("ReleaseNumber", "Release Number")); $fields->push(new TextField("ReleaseNotesUrl", "Release Notes Url")); $fields->push(new DropdownField('Status', 'Status', $this->owner->dbObject('Status')->enumValues())); //components if ($this->owner->ID > 0) { $components_config = new GridFieldConfig_RelationEditor(100); $components = new GridField("OpenStackComponents", "Supported Release Components", $this->owner->OpenStackComponents(), $components_config); $components_config->removeComponentsByType('GridFieldAddNewButton'); $fields->push($components); //supported versions //only if we have components set if ($this->owner->OpenStackComponents()->filter('SupportsVersioning', true)->count() > 0) { $supported_versions_config = new GridFieldConfig_RecordEditor(100); $dataColumns = $supported_versions_config->getComponentByType('GridFieldDataColumns'); $dataColumns->setDisplayFields(array('OpenStackComponent.CodeName' => 'Component CodeName', 'OpenStackComponent.Name' => 'Component Name', 'ApiVersion.Version' => 'Api Version')); //$supported_versions_config->removeComponentsByType('GridFieldEditButton'); $supported_versions = new GridField("SupportedApiVersions", "Supported Release Components", $this->owner->SupportedApiVersions(" ReleaseID = {$this->owner->getIdentifier()} AND OpenStackComponent.SupportsVersioning = 1 ")->innerJoin('OpenStackComponent', 'OpenStackComponent.ID = OpenStackReleaseSupportedApiVersion.OpenStackComponentID'), $supported_versions_config); $fields->push($supported_versions); } $config = new GridFieldConfig_RecordEditor(100); $config_types = new GridField("SampleConfigurationTypes", "Sample Configuration Types", $this->owner->SampleConfigurationTypes(), $config); $config->addComponent(new GridFieldSortableRows('Order')); $fields->push($config_types); } return $fields; }