Sets the classes that can be created using this button.
public setClasses ( array $classes, $default = null ) : GridFieldAddNewMultiClass | ||
$classes | array | a set of class names, optionally mapped to titles |
return | GridFieldAddNewMultiClass | $this |
function getModularCMSFields($relationName = 'Modules', $title = 'Content Modules') { $fields = array(); $GLOBALS['_CONTENT_MODULE_PARENT_PAGEID'] = $this->owner->ID; $area = $this->owner->obj($relationName); if ($area && $area->exists()) { $fields[] = HeaderField::create($relationName . 'Header', $title, 2); $fields[] = GridField::create($relationName, $title, $area->Modules(), GridFieldConfig_RecordEditor::create()->addComponent(new GridFieldOrderableRows('SortOrder'))->removeComponentsByType('GridFieldAddNewButton')->addComponent($add = new GridFieldAddNewMultiClass())); if (($allowed_modules = $this->owner->Config()->get('allowed_modules')) && is_array($allowed_modules) && count($allowed_modules)) { if (isset($allowed_modules[$relationName])) { $add->setClasses($allowed_modules[$relationName]); } else { $add->setClasses($allowed_modules); } } else { // Remove the base "ContentModule" from allowed modules. $classes = array_values(ClassInfo::subclassesFor('ContentModule')); sort($classes); if (($key = array_search('ContentModule', $classes)) !== false) { unset($classes[$key]); } $add->setClasses($classes); } } else { $fields[] = LiteralField::create('SaveFirstToAddModules', '<div class="message">You must save first before you can add modules.</div>'); } return $fields; }
public function getCMSFields() { $fields = new FieldList(); $_REQUEST['entity_survey'] = 1; $fields->add(new TextField('EntityName', 'Entity Name (Without Spaces)')); $fields->add(new CheckboxField('Enabled', 'Is Enabled?')); $fields->add(new CheckboxField('UseTeamEdition', 'Allow Team Edition?')); $fields->add(new HiddenField('CreatedByID', 'CreatedByID', Member::currentUserID())); $fields->add(new HiddenField('ParentID', 'ParentID')); //steps if ($this->ID > 0) { $_REQUEST['survey_template_id'] = $this->ID; // steps $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SurveyRegularStepTemplate' => 'Regular Step')); $config->addComponent($multi_class_selector); $config->addComponent(new GridFieldSortableRows('Order')); $gridField = new GridField('Steps', 'Steps', $this->Steps(), $config); $fields->add($gridField); $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $migration_mapping_types = array('OldDataModelSurveyMigrationMapping' => 'Old Survey Data Mapping'); $multi_class_selector->setClasses($migration_mapping_types); $config->addComponent($multi_class_selector); $gridField = new GridField('MigrationMappings', 'Migration Mappings', $this->MigrationMappings(), $config); $fields->add($gridField); } return $fields; }
public function updateCMSFields(\FieldList $fields) { parent::updateCMSFields($fields); // Loop over each WidgetArea $has_one = $this->owner->has_one(); foreach ($has_one as $name => $class) { if ($class == 'WidgetArea') { /* * Widget gridfield */ $adder = new GridFieldAddNewMultiClass(); // Allowed classes $allowed = $this->owner->config()->get("allowed_widgets"); if (is_array($allowed)) { // Filter classes for creating new ones $adder->setClasses($allowed); } $config = GridFieldConfig_RelationEditor::create()->removeComponentsByType("GridFieldAddNewButton")->addComponent($adder)->addComponent(new GridFieldOrderableRows('WidgetAreaSort')); // It's not possible to add existing through GridFieldAddExistingSearchButton since // it display by default $Title in its template and we want to search by $WidgetName $config->getComponentByType('GridFieldAddExistingAutocompleter')->setSearchFields(array('WidgetName'))->setResultsFormat('$WidgetName'); // WidgetArea's Widget GridField $gridField = GridField::create($name, $name, $this->owner->{$name}()->SortedWidgets(false))->setConfig($config); $fields->addFieldToTab("Root.{$name}", $gridField); } } }
function updateCMSFields(FieldList $fields) { if ($attributes = $fields->fieldByName("ProductAttributeType")) { $attributes->getConfig()->removeComponentsByType("GridFieldAddNewButton")->addComponent($multiclass = new GridFieldAddNewMultiClass()); $multiclass->setClasses(array_values(ClassInfo::subclassesFor("ProductAttributeType"))); } }
public function getCMSFields() { $fields = FieldList::create(TabSet::create('Root'))->text('Title')->text('Code', 'Code', '', 5)->textarea('Description')->numeric('SessionCount', 'Number of sessions')->numeric('AlternateCount', 'Number of alternates')->checkbox('VotingVisible', "This category is visible to voters")->checkbox('ChairVisible', "This category is visible to track chairs")->hidden('SummitID', 'SummitID'); if ($this->ID > 0) { //tags $config = new GridFieldConfig_RelationEditor(100); $config->removeComponentsByType(new GridFieldDataColumns()); $config->removeComponentsByType(new GridFieldDetailForm()); $completer = $config->getComponentByType('GridFieldAddExistingAutocompleter'); $completer->setResultsFormat('$Tag'); $completer->setSearchFields(array('Tag')); $completer->setSearchList(Tag::get()); $editconf = new GridFieldDetailForm(); $editconf->setFields(FieldList::create(TextField::create('Tag', 'Tag'), DropdownField::create('ManyMany[Group]', 'Group', array('topics' => 'Topics', 'speaker' => 'Speaker', 'openstack projects mentioned' => 'OpenStack Projects Mentioned')))); $summaryfieldsconf = new GridFieldDataColumns(); $summaryfieldsconf->setDisplayFields(array('Tag' => 'Tag', 'Group' => 'Group')); $config->addComponent($editconf); $config->addComponent($summaryfieldsconf, new GridFieldFilterHeader()); $tags = new GridField('AllowedTags', 'Tags', $this->AllowedTags(), $config); $fields->addFieldToTab('Root.Main', $tags); // extra questions for call-for-presentations $config = new GridFieldConfig_RelationEditor(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('TrackTextBoxQuestionTemplate' => 'TextBox', 'TrackCheckBoxQuestionTemplate' => 'CheckBox', 'TrackCheckBoxListQuestionTemplate' => 'CheckBoxList', 'TrackRadioButtonListQuestionTemplate' => 'RadioButtonList', 'TrackDropDownQuestionTemplate' => 'ComboBox', 'TrackLiteralContentQuestionTemplate' => 'Literal')); $config->addComponent($multi_class_selector); $questions = new GridField('ExtraQuestions', 'Track Specific Questions', $this->ExtraQuestions(), $config); $fields->addFieldToTab('Root.Main', $questions); } return $fields; }
public function testGetClasses() { $grid = new GridField('TestGridField'); $grid->setModelClass('GridFieldAddNewMultiClassTest_A'); $component = new GridFieldAddNewMultiClass(); $this->assertEquals(array('GridFieldAddNewMultiClassTest_A' => 'A', 'GridFieldAddNewMultiClassTest_B' => 'B', 'GridFieldAddNewMultiClassTest_C' => 'C'), $component->getClasses($grid), 'Subclasses are populated by default and sorted'); $component->setClasses(array('GridFieldAddNewMultiClassTest_B' => 'Custom Title', 'GridFieldAddNewMultiClassTest_A')); $this->assertEquals(array('GridFieldAddNewMultiClassTest_B' => 'Custom Title', 'GridFieldAddNewMultiClassTest_A' => 'A'), $component->getClasses($grid), 'Sorting and custom titles can be specified'); }
public function __construct($canAdd = true, $canEdit = true, $canDelete = true, $editableRows = false, $aboveOrBelow = false) { parent::__construct(); $this->blockManager = Injector::inst()->get('BlockManager'); $controllerClass = Controller::curr()->class; // Get available Areas (for page) or all in case of ModelAdmin if ($controllerClass == 'CMSPageEditController') { $currentPage = Controller::curr()->currentPage(); $areasFieldSource = $this->blockManager->getAreasForPageType($currentPage->ClassName); } else { $areasFieldSource = $this->blockManager->getAreasForTheme(); } // EditableColumns only makes sense on Saveable parenst (eg Page), or inline changes won't be saved if ($editableRows) { $this->addComponent($editable = new GridFieldEditableColumns()); $displayfields = array('TypeForGridfield' => array('title' => _t('Block.BlockType', 'Block Type'), 'field' => 'LiteralField'), 'Title' => array('title' => _t('Block.Title', 'Title'), 'field' => 'ReadonlyField'), 'BlockArea' => array('title' => _t('Block.BlockArea', 'Block Area') . ' ', 'callback' => function () use($areasFieldSource) { return DropdownField::create('BlockArea', 'Block Area', $areasFieldSource)->setHasEmptyDefault(true); }), 'isPublishedNice' => array('title' => _t('Block.IsPublishedField', 'Published'), 'field' => 'ReadonlyField'), 'UsageListAsString' => array('title' => _t('Block.UsageListAsString', 'Used on'), 'field' => 'LiteralField')); if ($aboveOrBelow) { $displayfields['AboveOrBelow'] = array('title' => _t('GridFieldConfigBlockManager.AboveOrBelow', 'Above or Below'), 'callback' => function () { return DropdownField::create('AboveOrBelow', _t('GridFieldConfigBlockManager.AboveOrBelow', 'Above or Below'), BlockSet::config()->get('above_or_below_options')); }); } $editable->setDisplayFields($displayfields); } else { $this->addComponent($dcols = new GridFieldDataColumns()); $displayfields = array('singular_name' => _t('Block.BlockType', 'Block Type'), 'Title' => _t('Block.Title', 'Title'), 'BlockArea' => _t('Block.BlockArea', 'Block Area'), 'isPublishedNice' => _t('Block.IsPublishedField', 'Published'), 'UsageListAsString' => _t('Block.UsageListAsString', 'Used on')); $dcols->setDisplayFields($displayfields); $dcols->setFieldCasting(array('UsageListAsString' => 'HTMLText->Raw')); } $this->addComponent(new GridFieldButtonRow('before')); $this->addComponent(new GridFieldToolbarHeader()); $this->addComponent(new GridFieldDetailForm()); $this->addComponent($sort = new GridFieldSortableHeader()); $this->addComponent($filter = new GridFieldFilterHeader()); $this->addComponent(new GridFieldDetailForm()); if ($controllerClass == 'BlockAdmin' && class_exists('GridFieldCopyButton')) { $this->addComponent(new GridFieldCopyButton()); } $filter->setThrowExceptionOnBadDataType(false); $sort->setThrowExceptionOnBadDataType(false); if ($canAdd) { $multiClass = new GridFieldAddNewMultiClass(); $classes = $this->blockManager->getBlockClasses(); $multiClass->setClasses($classes); $this->addComponent($multiClass); //$this->addComponent(new GridFieldAddNewButton()); } if ($canEdit) { $this->addComponent(new GridFieldEditButton()); } if ($canDelete) { $this->addComponent(new GridFieldDeleteAction(true)); } return $this; }
public function getCMSFields() { $fields = new FieldList($rootTab = new TabSet("Root", $tabMain = new Tab('Main'))); $fields->addFieldToTab('Root.Main', new TextField('Title', 'Title')); $start_date = new DatetimeField('StartDate', 'Start Date'); $end_date = new DatetimeField('EndDate', 'End Date'); $start_date->getDateField()->setConfig('showcalendar', true); $start_date->setConfig('dateformat', 'dd/MM/yyyy'); $end_date->getDateField()->setConfig('showcalendar', true); $end_date->setConfig('dateformat', 'dd/MM/yyyy'); $fields->addFieldToTab('Root.Main', $start_date); $fields->addFieldToTab('Root.Main', $end_date); $fields->addFieldToTab('Root.Main', new CheckboxField('Enabled', 'Is Enabled')); $fields->addFieldToTab('Root.Main', new HiddenField('CreatedByID', 'CreatedByID', Member::currentUserID())); //steps if ($this->ID > 0) { $_REQUEST['survey_template_id'] = $this->ID; // steps $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $step_types = array('SurveyRegularStepTemplate' => 'Regular Step', 'SurveyDynamicEntityStepTemplate' => 'Entities Holder Step'); $count = $this->Steps()->filter('ClassName', 'SurveyThankYouStepTemplate')->count(); if (intval($count) === 0) { $step_types['SurveyThankYouStepTemplate'] = 'Thank You (Final)'; } $multi_class_selector->setClasses($step_types); $config->addComponent($multi_class_selector); $config->addComponent($sort = new GridFieldSortableRows('Order')); $gridField = new GridField('Steps', 'Steps', $this->Steps(), $config); $fields->addFieldToTab('Root.Main', $gridField); //entities $config = GridFieldConfig_RecordEditor::create(); $gridField = new GridField('EntitySurveys', 'Entities', $this->EntitySurveys(), $config); $fields->addFieldToTab('Root.Main', $gridField); // instances $config = GridFieldConfig_RecordEditor::create(100); $config->removeComponentsByType('GridFieldAddNewButton'); $gridField = new GridField('Instances', 'Instances', $this->Instances(), $config); $fields->addFieldToTab('Root.Surveys', $gridField); //migration Mappings $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $migration_mapping_types = array('NewDataModelSurveyMigrationMapping' => 'New Migration Mapping'); $multi_class_selector->setClasses($migration_mapping_types); $config->addComponent($multi_class_selector); $gridField = new GridField('MigrationMappings', 'Migration Mappings', $this->MigrationMappings(), $config); $dataColumns = $config->getComponentByType('GridFieldDataColumns'); $migration = $this->MigrationMappings()->first(); $dataColumns->setDisplayFields(!is_null($migration) && $migration->ClassName === 'OldDataModelSurveyMigrationMapping' ? OldDataModelSurveyMigrationMapping::getDisplayFields() : NewDataModelSurveyMigrationMapping::getDisplayFields()); $fields->addFieldToTab('Root.Main', $gridField); } return $fields; }
public function updateCMSFields(FieldList $fields) { $config = GridFieldConfig_RecordEditor::create(); $addButton = new GridFieldAddNewMultiClass(); $addButton->setClasses(HailList::getSubClasses()); $config->addComponent($addButton)->removeComponentsByType('GridFieldAddNewButton'); $config->addComponent(new GridFieldSortableRows('SortOrder')); $list = new GridField("Lists", "Lists", $this->getOwner()->HailLists()->sort("SortOrder"), $config); $fields->addFieldToTab('Root.HailList', $list); $fields->addFieldToTab('Root.HailList', $list); }
function getCMSFields() { $fields = parent::getCMSFields(); $adder = new GridFieldAddNewMultiClass(); if (is_array($this->config()->get("allowed_widgets"))) { $adder->setClasses($this->config()->get("allowed_widgets")); } $config = GridFieldConfig_RecordEditor::create()->removeComponentsByType("GridFieldAddNewButton")->addComponent($adder)->addComponent(new GridFieldOrderableRows()); $fields->addFieldToTab("Root.Main", GridField::create('Widgets', 'Widgets', $this->Widgets())->setConfig($config), "Content"); $fields->removeByName("Content"); return $fields; }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); if ($this->modelClass === 'SurveySingleValueValidationRule') { $gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass)); $config = $gridField->getConfig(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SurveyRangeValidationRule' => 'Range Validation Rule', 'SurveyNumberValidationRule' => 'Number Validation Rule', 'SurveyMinLengthValidationRule' => 'Min Length Validation Rule', 'SurveyMaxLengthValidationRule' => 'Max Length Validation Rule', 'SurveyCustomValidationRule' => 'Custom Validation Rule')); $config->addComponent($multi_class_selector); } return $form; }
public function getCMSFields() { $fields = parent::getCMSFields(); if ($this->ID > 0) { //questions $config = GridFieldConfig_RecordEditor::create(100); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SurveyTextBoxQuestionTemplate' => 'TextBox', 'SurveyMemberEmailQuestionTemplate' => 'Current Member Email', 'SurveyMemberFirstNameQuestionTemplate' => 'Current Member FirstName', 'SurveyMemberLastNameQuestionTemplate' => 'Current Member LastName', 'SurveyTextBoxQuestionTemplate' => 'TextBox', 'SurveyTextBoxQuestionTemplate' => 'TextBox', 'SurveyTextAreaQuestionTemplate' => 'TextArea', 'SurveyCheckBoxQuestionTemplate' => 'CheckBox', 'SurveyCheckBoxListQuestionTemplate' => 'CheckBoxList', 'SurveyRadioButtonListQuestionTemplate' => 'RadioButtonList', 'SurveyDropDownQuestionTemplate' => 'ComboBox', 'SurveyRankingQuestionTemplate' => 'Ranking', 'SurveyOrganizationQuestionTemplate' => 'Organization', 'SurveyLiteralContentQuestionTemplate' => 'Literal', 'SurveyRadioButtonMatrixTemplateQuestion' => 'RadioButtonMatrix')); $config->addComponent($multi_class_selector); $config->addComponent(new GridFieldSortableRows('Order')); $gridField = new GridField('Questions', 'Questions', $this->Questions(), $config); $fields->add($gridField); } return $fields; }
public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); if ($this->modelClass === "ShippingMethod") { $gridfield = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass)); $config = $gridfield->getConfig(); $config->removeComponentsByType("GridFieldAddNewButton"); $config->removeComponentsByType("GridFieldPrintButton"); $config->removeComponentsByType("GridFieldExportButton"); $config->addComponent($multiclass = new GridFieldAddNewMultiClass()); $classes = ClassInfo::subclassesFor($this->modelClass); unset($classes[$this->modelClass]); $multiclass->setClasses($classes); } return $form; }
public function getCMSFields() { $fields = new FieldList($rootTab = new TabSet("Root", $tabMain = new Tab('Main'))); $fields->addFieldToTab('Root.Main', new TextField('Title', 'Title')); $fields->addFieldToTab('Root.Main', new CheckboxField('Enabled', 'Is Enabled')); $fields->addFieldToTab('Root.Main', new HiddenField('CreatedByID', 'CreatedByID', Member::currentUserID())); $fields->addFieldToTab('Root.Main', new HiddenField('SummitID', 'SummitID')); //questions if ($this->ID > 0) { $_REQUEST['rsvp_template_id'] = $this->ID; // steps $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('RSVPMemberEmailQuestionTemplate' => 'Current Member Email', 'RSVPMemberFirstNameQuestionTemplate' => 'Current Member FirstName', 'RSVPMemberLastNameQuestionTemplate' => 'Current Member LastName', 'RSVPTextBoxQuestionTemplate' => 'TextBox', 'RSVPTextAreaQuestionTemplate' => 'TextArea', 'RSVPCheckBoxQuestionTemplate' => 'CheckBox', 'RSVPCheckBoxListQuestionTemplate' => 'CheckBoxList', 'RSVPRadioButtonListQuestionTemplate' => 'RadioButtonList', 'RSVPDropDownQuestionTemplate' => 'ComboBox', 'RSVPLiteralContentQuestionTemplate' => 'Literal')); $config->addComponent($multi_class_selector); $config->addComponent(new GridFieldSortableRows('Order')); $gridField = new GridField('Questions', 'Questions', $this->Questions(), $config); $fields->add($gridField); } return $fields; }
public function getCMSFields() { $elements = $this->Elements(); $isInDb = $this->isInDB(); $allowed = $this->config()->get('allowed_elements'); $this->beforeUpdateCMSFields(function ($fields) use($elements, $isInDb, $allowed) { $desc = HTMLEditorField::create('ListDescription', 'List Description'); $desc->setRightTitle('Optional'); $fields->addFieldToTab('Root.Main', $desc); if ($isInDb) { $adder = new GridFieldAddNewMultiClass(); if (is_array($allowed)) { $list = $allowed; } else { $classes = ClassInfo::subclassesFor('BaseElement'); $list = array(); unset($classes['BaseElement']); foreach ($classes as $class) { $list[$class] = singleton($class)->i18n_singular_name(); } } asort($list); $adder->setClasses($list); $config = GridFieldConfig_RecordEditor::create(100); $config->addComponent(new GridFieldSortableRows('Sort')); $config->removeComponentsByType('GridFieldAddNewButton'); $config->addComponent($adder); $config->removeComponentsByType('GridFieldDetailForm'); $config->addComponent(new VersionedDataObjectDetailsForm()); $widgetArea = new GridField('Elements', Config::inst()->get("ElementPageExtension", 'elements_title'), $elements, $config); $fields->addFieldToTab('Root.Main', $widgetArea); } else { $fields->addFieldToTab('Root.Main', LiteralField::create('warn', '<p class="message notice">Once you save this object you will be able to add items</p>')); } $fields->removeByName('Root.Elements'); }); return parent::getCMSFields(); }
/** * * @param array $classname Name of class who's subclasses will be added to form * @param int $itemsPerPage - How many items per page should show up * @param boolean | string $sorting Allow sorting of rows, either false or the name of the sort column */ public function __construct($classname, $itemsPerPage = null, $sort_col = false) { parent::__construct(); // Setup Bulk manager $manager = new GridFieldBulkManager(); $manager->removeBulkAction("unLink"); $manager->addBulkAction('disable', 'Disable', 'CatalogueProductBulkAction'); $manager->addBulkAction('enable', 'Enable', 'CatalogueProductBulkAction'); /// Setup add new button $add_button = new GridFieldAddNewMultiClass("buttons-before-left"); $add_button->setClasses($this->get_subclasses($classname)); $this->addComponent(new GridFieldButtonRow('before')); $this->addComponent(new GridFieldToolbarHeader()); $this->addComponent($sort = new GridFieldSortableHeader()); $this->addComponent($filter = new GridFieldFilterHeader()); $this->addComponent(new GridFieldDataColumns()); $this->addComponent(new GridFieldEditButton()); $this->addComponent(new GridFieldDeleteAction()); $this->addComponent(new GridFieldPageCount('toolbar-header-right')); $this->addComponent($pagination = new GridFieldPaginator($itemsPerPage)); $this->addComponent(new GridFieldExportButton("buttons-before-right")); // If we are manageing a category, use the relevent field, else use // product if ($classname == "Category") { $this->addComponent(new CatalogueCategoryDetailForm()); $add_button->setItemRequestClass("CatalogueCategoryDetailForm_ItemRequest"); } else { $this->addComponent(new CatalogueEnableDisableDetailForm()); $add_button->setItemRequestClass("CatalogueEnableDisableDetailForm_ItemRequest"); } $this->addComponent($add_button); if ($sort_col) { $this->addComponent(GridFieldOrderableRows::create($sort_col)); } $sort->setThrowExceptionOnBadDataType(false); $filter->setThrowExceptionOnBadDataType(false); $pagination->setThrowExceptionOnBadDataType(false); }
public function updateCMSFields(FieldList $f) { //clear all fields $oldFields = $f->toArray(); foreach ($oldFields as $field) { $f->remove($field); } $_REQUEST['SummitID'] = $this->owner->ID; $f->add($rootTab = new TabSet("Root", $tabMain = new Tab('Main'))); $summit_time_zone = null; if ($this->owner->TimeZone) { $time_zone_list = timezone_identifiers_list(); $summit_time_zone = $time_zone_list[$this->owner->TimeZone]; } if ($this->owner->RandomVotingLists()->exists()) { $f->addFieldToTab('Root.Main', HeaderField::create('The presentations in this summit have been randomised for voting', 4)); } $f->addFieldToTab('Root.Main', new TextField('Title', 'Title')); $f->addFieldToTab('Root.Main', $link = new TextField('Link', 'Summit Page Link')); $link->setDescription('The link to the site page for this summit. Eg: <em>/summit/vancouver-2015/</em>'); $f->addFieldToTab('Root.Main', new CheckboxField('Active', 'This is the active summit')); $f->addFieldToTab('Root.Main', $date_label = new TextField('DateLabel', 'Date label')); $date_label->setDescription('A readable piece of text representing the date, e.g. <em>May 12-20, 2015</em> or <em>December 2016</em>'); $f->addFieldToTab('Root.Main', $registration_link = new TextField('RegistrationLink', 'Registration Link')); $registration_link->setDescription('Link to the site where tickets can be purchased.'); $f->addFieldsToTab('Root.Dates', $ddl_timezone = new DropdownField('TimeZone', 'Time Zone', DateTimeZone::listIdentifiers())); $ddl_timezone->setEmptyString('-- Select a Timezone --'); if ($summit_time_zone) { $f->addFieldToTab('Root.Dates', new HeaderField("All dates below are in <span style='color:red;'>{$summit_time_zone}</span> time.")); } else { $f->addFieldToTab('Root.Dates', new HeaderField("All dates below in the timezone of the summit's venue.")); } $f->addFieldToTab('Root.Dates', $date = new DatetimeField('SummitBeginDate', "When does the summit begin?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('SummitEndDate', "When does the summit end?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('StartShowingVenuesDate', "When do you begin showing venues?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('SubmissionBeginDate', "When do submissions begin?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('SubmissionEndDate', "When do submissions end?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('VotingBeginDate', "When does voting begin?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('VotingEndDate', "When does voting end?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('SelectionBeginDate', "When do selections begin?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('SelectionEndDate', "When do selections end?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('RegistrationBeginDate', "When does registration begin?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DatetimeField('RegistrationEndDate', "When does registration end?")); $date->getDateField()->setConfig('showcalendar', true); $date->getDateField()->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Dates', $date = new DateField('ScheduleDefaultStartDate', "Default Start Date to show on schedule page?")); $date->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldsToTab('Root.Main', new NumericField('MaxSubmissionAllowedPerUser', 'Max. Submission Allowed Per User')); $logo_field = new UploadField('Logo', 'Logo'); $logo_field->setAllowedMaxFileNumber(1); $logo_field->setAllowedFileCategories('image'); $logo_field->setFolderName('summits/logos/'); $logo_field->getValidator()->setAllowedMaxFileSize(1024 * 1024 * 1); $f->addFieldToTab('Root.Main', $logo_field); $f->addFieldToTab('Root.Main', new TextField('ComingSoonBtnText', 'Coming Soon Btn Text')); $f->addFieldToTab('Root.Main', new TextField('ExternalEventId', 'Eventbrite Event Id')); if ($this->owner->ID > 0) { $summit_id = $this->owner->ID; // tracks $config = GridFieldConfig_RecordEditor::create(25); $categories = new GridField('Categories', 'Presentation Categories', $this->owner->getCategories(), $config); $f->addFieldToTab('Root.Presentation Categories', $categories); $config = GridFieldConfig_RelationEditor::create(25); $config->removeComponentsByType(new GridFieldDataColumns()); $config->removeComponentsByType(new GridFieldDetailForm()); $config->addComponent(new GridFieldUpdateDefaultCategoryTags()); $default_tags = new GridField('CategoryDefaultTags', 'Category Default Tags', $this->owner->CategoryDefaultTags(), $config); $completer = $config->getComponentByType('GridFieldAddExistingAutocompleter'); $completer->setResultsFormat('$Tag'); $completer->setSearchFields(array('Tag')); $completer->setSearchList(Tag::get()); $editconf = new GridFieldDetailForm(); $editconf->setFields(FieldList::create(TextField::create('Tag', 'Tag'), DropdownField::create('ManyMany[Group]', 'Group', array('topics' => 'Topics', 'speaker' => 'Speaker', 'openstack projects mentioned' => 'OpenStack Projects Mentioned')))); $summaryfieldsconf = new GridFieldDataColumns(); $summaryfieldsconf->setDisplayFields(array('Tag' => 'Tag', 'Group' => 'Group')); $config->addComponent($editconf); $config->addComponent($summaryfieldsconf, new GridFieldFilterHeader()); $f->addFieldToTab('Root.Presentation Categories', $default_tags); // track groups $config = GridFieldConfig_RecordEditor::create(25); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('PresentationCategoryGroup' => 'Category Group', 'PrivatePresentationCategoryGroup' => 'Private Category Group')); $config->addComponent($multi_class_selector); $categories = new GridField('CategoryGroups', 'Category Groups', $this->owner->CategoryGroups(), $config); $f->addFieldToTab('Root.Category Groups', $categories); // locations $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SummitVenue' => 'Venue', 'SummitHotel' => 'Hotel', 'SummitAirport' => 'Airport', 'SummitExternalLocation' => 'External Location')); $config->addComponent($multi_class_selector); $config->addComponent($sort = new GridFieldSortableRows('Order')); $gridField = new GridField('Locations', 'Locations', $this->owner->Locations()->where("ClassName <> 'SummitVenueRoom' "), $config); $f->addFieldToTab('Root.Locations', $gridField); // types $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldAddDefaultSummitTypes()); $gridField = new GridField('SummitTypes', 'SummitTypes', $this->owner->Types(), $config); $f->addFieldToTab('Root.SummitTypes', $gridField); // event types $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldAddDefaultEventTypes()); $gridField = new GridField('EventTypes', 'EventTypes', $this->owner->EventTypes(), $config); $f->addFieldToTab('Root.EventTypes', $gridField); //schedule $config = GridFieldConfig_RecordEditor::create(25); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->removeComponentsByType('GridFieldDeleteAction'); $gridField = new GridField('Schedule', 'Schedule', $this->owner->Events()->filter('Published', true)->sort(array('StartDate' => 'ASC', 'EndDate' => 'ASC')), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Description" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Schedule', $gridField); $config->addComponent(new GridFieldPublishSummitEventAction()); // events $config = GridFieldConfig_RecordEditor::create(25); $config->addComponent(new GridFieldPublishSummitEventAction()); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->addComponent($bulk_summit_types = new GridFieldBulkActionAssignSummitTypeSummitEvents()); $bulk_summit_types->setTitle('Set Summit Type'); $gridField = new GridField('Events', 'Events', $this->owner->Events()->filter('ClassName', 'SummitEvent'), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Description" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Events', $gridField); //track selection list presentations $config = GridFieldConfig_RecordEditor::create(25); $gridField = new GridField('TrackChairsSelectionLists', 'TrackChairs Selection Lists', SummitSelectedPresentationList::get()->filter('ListType', 'Group')->where(' CategoryID IN ( SELECT ID FROM PresentationCategory WHERE SummitID = ' . $summit_id . ')'), $config); $f->addFieldToTab('Root.TrackChairs Selection Lists', $gridField); // attendees $config = GridFieldConfig_RecordEditor::create(25); $gridField = new GridField('Attendees', 'Attendees', $this->owner->Attendees(), $config); $f->addFieldToTab('Root.Attendees', $gridField); //tickets types $config = GridFieldConfig_RecordEditor::create(25); $gridField = new GridField('SummitTicketTypes', 'Ticket Types', $this->owner->SummitTicketTypes(), $config); $f->addFieldToTab('Root.TicketTypes', $gridField); // promo codes $config = GridFieldConfig_RecordEditor::create(50); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SpeakerSummitRegistrationPromoCode' => 'Speaker Promo Code')); $config->addComponent($multi_class_selector); $promo_codes = new GridField('SummitRegistrationPromoCodes', 'Registration Promo Codes', $this->owner->SummitRegistrationPromoCodes(), $config); $f->addFieldToTab('Root.RegistrationPromoCodes', $promo_codes); // speakers $config = GridFieldConfig_RecordEditor::create(25); $gridField = new GridField('Speakers', 'Speakers', $this->owner->Speakers(false), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Bio" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Speakers', $gridField); // presentations $config = GridFieldConfig_RecordEditor::create(25); $config->addComponent(new GridFieldPublishSummitEventAction()); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->addComponent($bulk_summit_types = new GridFieldBulkActionAssignSummitTypeSummitEvents()); $bulk_summit_types->setTitle('Set Summit Type'); $gridField = new GridField('Presentations', 'Presentations', $this->owner->Presentations()->where(" Title IS NOT NULL AND Title <>'' "), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Description" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Presentations', $gridField); // push notifications $config = GridFieldConfig_RecordEditor::create(25); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Channel' => 'Channel', 'Message' => 'Message', 'Owner.FullName' => 'Owner', 'IsSent' => 'Is Sent?', 'SentDate' => 'Sent Date')); $config->getComponentByType('GridFieldDetailForm')->setItemRequestClass('GridFieldDetailFormPushNotification'); $gridField = new GridField('Notifications', 'Notifications', $this->owner->Notifications(), $config); $f->addFieldToTab('Root.PushNotifications', $gridField); //entity events $config = GridFieldConfig_RecordEditor::create(25); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->addComponent(new GridFieldWipeDevicesDataAction()); $config->addComponent(new GridFieldDeleteAllSummitEntityEventsAction()); $config->removeComponentsByType('GridFieldAddNewButton'); $gridField = new GridField('EntityEvents', 'EntityEvents', $this->owner->EntityEvents(), $config); $f->addFieldToTab('Root.EntityEvents', $gridField); //TrackChairs $config = GridFieldConfig_RecordEditor::create(25); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $gridField = new GridField('TrackChairs', 'TrackChairs', $this->owner->TrackChairs(), $config); $f->addFieldToTab('Root.TrackChairs', $gridField); //RSVP templates $config = GridFieldConfig_RecordEditor::create(40); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $gridField = new GridField('RSVPTemplates', 'RSVPTemplates', $this->owner->RSVPTemplates(), $config); $f->addFieldToTab('Root.RSVPTemplates', $gridField); } }
/** * @return FieldList */ public function getCMSFields() { $summit_id = isset($_REQUEST['SummitID']) ? $_REQUEST['SummitID'] : $this->SummitID; $f = parent::getCMSFields(); $f->removeByName('TypeID'); $f->dropdown('Level', 'Level', $this->dbObject('Level')->enumValues())->dropdown('CategoryID', 'Category', PresentationCategory::get()->map('ID', 'Title'))->listbox('Topics', 'Topics', PresentationTopic::get()->map('ID', 'Title')->toArray())->configure()->setMultiple(true)->end()->text('OtherTopic', 'Other topic')->htmleditor('ProblemAddressed', 'What is the problem or use case you’re addressing in this session?')->htmleditor('AttendeesExpectedLearnt', 'What should attendees expect to learn?')->tab('Preview')->literal('preview', sprintf('<iframe width="%s" height="%s" frameborder="0" src="%s"></iframe>', '100%', '400', Director::absoluteBaseURL() . $this->PreviewLink())); $f->addFieldToTab('Root.Main', $ddl_type = new DropdownField('TypeID', 'Event Type', SummitEventType::get()->filter(array('SummitID' => $summit_id))->where(" Type ='Presentation' OR Type ='Keynotes' OR Type ='Panel' ")->map('ID', 'Type'))); $ddl_type->setEmptyString('-- Select a Presentation Type --'); if ($this->ID > 0) { // speakers $config = new GridFieldConfig_RelationEditor(100); $config->removeComponentsByType('GridFieldAddNewButton'); $speakers = new GridField('Speakers', 'Speakers', $this->Speakers(), $config); $f->addFieldToTab('Root.Speakers', $speakers); $config->getComponentByType('GridFieldAddExistingAutocompleter')->setResultsFormat('$Name - $Member.Email')->setSearchList($this->getAllowedSpeakers()); // moderator $f->addFieldToTab('Root.Speakers', $ddl_moderator = new DropdownField('ModeratorID', 'Moderator', $this->Speakers()->map('ID', 'Name'))); $ddl_moderator->setEmptyString('-- Select a Moderator --'); $config = GridFieldConfig_RecordEditor::create(100); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('PresentationVideo' => 'Video', 'PresentationSlide' => 'Slide', 'PresentationLink' => 'Link')); $config->addComponent($multi_class_selector); $config->addComponent($sort = new GridFieldSortableRows('Order')); $gridField = new GridField('Materials', 'Materials', $this->Materials(), $config); $f->addFieldToTab('Root.Materials', $gridField); } return $f; }
public function getCMSFields() { $f = new FieldList($rootTab = new TabSet("Root", $tabMain = new Tab('Main'))); $f->addFieldToTab('Root.Main', new TextField('Title', 'Title')); $f->addFieldToTab('Root.Main', new TextField('Location', 'Location')); $f->addFieldToTab('Root.Main', $link = new TextField('Link', 'Summit Page Link')); $link->setDescription('The link to the site page for this summit. Eg: <em>/summit/vancouver-2015/</em>'); $f->addFieldToTab('Root.Main', new CheckboxField('Active', 'This is the active summit')); $f->addFieldToTab('Root.Main', $date_label = new TextField('DateLabel', 'Date label')); $date_label->setDescription('A readable piece of text representing the date, e.g. <em>May 12-20, 2015</em> or <em>December 2016</em>'); $f->addFieldToTab('Root.Main', $registration_link = new TextField('RegistrationLink', 'Registration Link')); $registration_link->setDescription('Link to the site where tickets can be purchased.'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SummitBeginDate', 'Summit Begin Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SummitEndDate', 'Summit End Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SubmissionBeginDate', 'Submission Begin Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SubmissionEndDate', 'Submission End Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('VotingBeginDate', 'Voting Begin Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('VotingEndDate', 'Voting End Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SelectionBeginDate', 'Selection Begin Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SelectionEndDate', 'Selection End Date')); $date->setConfig('showcalendar', true); $f->addFieldToTab('Root.Main', new TextField('ComingSoonBtnText', 'Coming Soon Btn Text')); $f->addFieldToTab('Root.Main', new TextField('SchedUrl', 'Sched Main Url')); $config = new GridFieldConfig_RelationEditor(10); $categories = new GridField('Categories', 'Categories', $this->Categories(), $config); $f->addFieldToTab('Root.Categories', $categories); // promo codes $config = GridFieldConfig_RecordEditor::create(25); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SpeakerSummitRegistrationPromoCode' => 'Speaker Promo Code')); $config->addComponent($multi_class_selector); $promo_codes = new GridField('SummitRegistrationPromoCodes', 'Registration Promo Codes', $this->SummitRegistrationPromoCodes(), $config); $f->addFieldToTab('Root.RegistrationPromoCodes', $promo_codes); return $f; }
public function getCMSFields() { $_REQUEST['SummitID'] = $this->ID; $f = new FieldList($rootTab = new TabSet("Root", $tabMain = new Tab('Main'))); $f->addFieldToTab('Root.Main', new TextField('Title', 'Title')); $f->addFieldToTab('Root.Main', $link = new TextField('Link', 'Summit Page Link')); $link->setDescription('The link to the site page for this summit. Eg: <em>/summit/vancouver-2015/</em>'); $f->addFieldToTab('Root.Main', new CheckboxField('Active', 'This is the active summit')); $f->addFieldToTab('Root.Main', $date_label = new TextField('DateLabel', 'Date label')); $date_label->setDescription('A readable piece of text representing the date, e.g. <em>May 12-20, 2015</em> or <em>December 2016</em>'); $f->addFieldToTab('Root.Main', $registration_link = new TextField('RegistrationLink', 'Registration Link')); $registration_link->setDescription('Link to the site where tickets can be purchased.'); $f->addFieldsToTab('Root.Main', $ddl_timezone = new DropdownField('TimeZone', 'Time Zone', DateTimeZone::listIdentifiers())); $ddl_timezone->setEmptyString('-- Select a Timezone --'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SummitBeginDate', 'Summit Begin Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SummitEndDate', 'Summit End Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('StartShowingVenuesDate', 'Start Showing Venues')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SubmissionBeginDate', 'Submission Begin Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SubmissionEndDate', 'Submission End Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('VotingBeginDate', 'Voting Begin Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('VotingEndDate', 'Voting End Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SelectionBeginDate', 'Selection Begin Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('SelectionEndDate', 'Selection End Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('RegistrationBeginDate', 'Registration Begin Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $f->addFieldToTab('Root.Main', $date = new DatetimeField('RegistrationEndDate', 'Registration End Date')); $date->getDateField()->setConfig('showcalendar', true); $date->setConfig('dateformat', 'dd/MM/yyyy'); $logo_field = new UploadField('Logo', 'Logo'); $logo_field->setAllowedMaxFileNumber(1); $logo_field->setAllowedFileCategories('image'); $logo_field->setFolderName('summits/logos/'); $logo_field->getValidator()->setAllowedMaxFileSize(1048576); $f->addFieldToTab('Root.Main', $logo_field); $f->addFieldToTab('Root.Main', new TextField('ComingSoonBtnText', 'Coming Soon Btn Text')); $f->addFieldToTab('Root.Main', new TextField('ExternalEventId', 'Eventbrite Event Id')); if ($this->ID > 0) { // tracks $config = GridFieldConfig_RecordEditor::create(10); $categories = new GridField('Categories', 'Presentation Categories', $this->Categories(), $config); $f->addFieldToTab('Root.Presentation Categories', $categories); // track groups $config = GridFieldConfig_RecordEditor::create(10); $categories = new GridField('CategoryGroups', 'Category Groups', $this->CategoryGroups(), $config); $f->addFieldToTab('Root.Category Groups', $categories); // locations $config = GridFieldConfig_RecordEditor::create(); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SummitVenue' => 'Venue', 'SummitHotel' => 'Hotel', 'SummitAirport' => 'Airport', 'SummitExternalLocation' => 'External Location')); $config->addComponent($multi_class_selector); $config->addComponent($sort = new GridFieldSortableRows('Order')); $gridField = new GridField('Locations', 'Locations', $this->Locations()->where("ClassName <> 'SummitVenueRoom' "), $config); $f->addFieldToTab('Root.Locations', $gridField); // types $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldAddDefaultSummitTypes()); $gridField = new GridField('Types', 'Types', $this->Types(), $config); $f->addFieldToTab('Root.Types', $gridField); // event types $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldAddDefaultEventTypes()); $gridField = new GridField('EventTypes', 'EventTypes', $this->EventTypes(), $config); $f->addFieldToTab('Root.EventTypes', $gridField); //schedule $config = GridFieldConfig_RecordEditor::create(50); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->removeComponentsByType('GridFieldDeleteAction'); $gridField = new GridField('Schedule', 'Schedule', $this->Events()->filter('Published', true)->sort(array('StartDate' => 'ASC', 'EndDate' => 'ASC')), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Description" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Schedule', $gridField); $config->addComponent(new GridFieldPublishSummitEventAction()); // events $config = GridFieldConfig_RecordEditor::create(50); $config->addComponent(new GridFieldPublishSummitEventAction()); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->addComponent($bulk_summit_types = new GridFieldBulkActionAssignSummitTypeSummitEvents()); $bulk_summit_types->setTitle('Set Summit Types'); $gridField = new GridField('Events', 'Events', $this->Events()->filter('ClassName', 'SummitEvent'), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Description" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Events', $gridField); //track selection list presentations $result = DB::query("SELECT DISTINCT SummitEvent.*, Presentation.*\nFROM SummitEvent\nINNER JOIN Presentation ON Presentation.ID = SummitEvent.ID\nINNER JOIN SummitSelectedPresentation ON SummitSelectedPresentation.PresentationID = Presentation.ID\nINNER JOIN SummitSelectedPresentationList ON SummitSelectedPresentation.SummitSelectedPresentationListID = SummitSelectedPresentationList.ID\nWHERE(ListType = 'Group') AND (SummitEvent.ClassName IN ('Presentation')) AND (SummitEvent.SummitID = {$this->ID})"); $presentations = new ArrayList(); foreach ($result as $row) { $presentations->add(new Presentation($row)); } $config = GridFieldConfig_RecordEditor::create(50); $config->addComponent(new GridFieldPublishSummitEventAction()); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->addComponent($bulk_summit_types = new GridFieldBulkActionAssignSummitTypeSummitEvents()); $bulk_summit_types->setTitle('Set Summit Types'); $config->removeComponentsByType('GridFieldAddNewButton'); $gridField = new GridField('TrackChairs', 'TrackChairs Selection Lists', $presentations, $config); $gridField->setModelClass('Presentation'); $f->addFieldToTab('Root.TrackChairs Selection Lists', $gridField); // attendees $config = GridFieldConfig_RecordEditor::create(50); $gridField = new GridField('Attendees', 'Attendees', $this->Attendees(), $config); $f->addFieldToTab('Root.Attendees', $gridField); //tickets types $config = GridFieldConfig_RecordEditor::create(50); $gridField = new GridField('SummitTicketTypes', 'Ticket Types', $this->SummitTicketTypes(), $config); $f->addFieldToTab('Root.TicketTypes', $gridField); // promo codes $config = GridFieldConfig_RecordEditor::create(50); $config->removeComponentsByType('GridFieldAddNewButton'); $multi_class_selector = new GridFieldAddNewMultiClass(); $multi_class_selector->setClasses(array('SpeakerSummitRegistrationPromoCode' => 'Speaker Promo Code')); $config->addComponent($multi_class_selector); $promo_codes = new GridField('SummitRegistrationPromoCodes', 'Registration Promo Codes', $this->SummitRegistrationPromoCodes(), $config); $f->addFieldToTab('Root.RegistrationPromoCodes', $promo_codes); // speakers $config = GridFieldConfig_RecordEditor::create(50); $gridField = new GridField('Speakers', 'Speakers', $this->Speakers(false), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Bio" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Speakers', $gridField); // presentations $config = GridFieldConfig_RecordEditor::create(50); $config->addComponent(new GridFieldPublishSummitEventAction()); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->addComponent($bulk_summit_types = new GridFieldBulkActionAssignSummitTypeSummitEvents()); $bulk_summit_types->setTitle('Set Summit Types'); $gridField = new GridField('Presentations', 'Presentations', $this->Presentations()->where(" Title IS NOT NULL AND Title <>'' "), $config); $config->getComponentByType("GridFieldDataColumns")->setFieldCasting(array("Description" => "HTMLText->BigSummary")); $f->addFieldToTab('Root.Presentations', $gridField); // push notifications $config = GridFieldConfig_RecordEditor::create(50); $config->addComponent(new GridFieldAjaxRefresh(1000, false)); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Channel' => 'Channel', 'Message' => 'Message', 'Owner.FullName' => 'Owner', 'IsSent' => 'Is Sent?')); $gridField = new GridField('Notifications', 'Notifications', $this->Notifications(), $config); $f->addFieldToTab('Root.Notifications', $gridField); } return $f; }
public function __construct($canAdd = true, $canEdit = true, $canDelete = true, $editableRows = false, $aboveOrBelow = false) { parent::__construct(); $this->blockManager = Injector::inst()->get('BlockManager'); $controllerClass = Controller::curr()->class; // Get available Areas (for page) or all in case of ModelAdmin if ($controllerClass == 'CMSPageEditController') { $currentPage = Controller::curr()->currentPage(); $areasFieldSource = $this->blockManager->getAreasForPageType($currentPage->ClassName); } else { $areasFieldSource = $this->blockManager->getAreasForTheme(); } // EDIT $blockTypeArray = $this->blockManager->getBlockClasses(); // /EDIT // EditableColumns only makes sense on Saveable parenst (eg Page), or inline changes won't be saved if ($editableRows) { // set project-dir in cookie to be accessible as fallback from js Cookie::set('js-project-dir', project(), 90, null, null, false, false); $this->addComponent($editable = new GridFieldEditableColumns()); $displayfields = array('ClassName' => array('title' => _t('Block.BlockType', 'Block Type') . ' ', 'callback' => function () use($blockTypeArray) { return DropdownField::create('ClassName', 'Block Type', $blockTypeArray)->addExtraClass('select2blocktype')->setAttribute('data-project-dir', project()); }), 'Title' => array('title' => _t('Block.TitleName', 'Block Name'), 'field' => 'TextField'), 'BlockArea' => array('title' => _t('Block.BlockArea', 'Block Area') . ' ', 'callback' => function () use($areasFieldSource) { return DropdownField::create('BlockArea', 'Block Area', $areasFieldSource)->setHasEmptyDefault(true); }), 'isPublishedNice' => array('title' => _t('Block.IsPublishedField', 'Published'), 'field' => 'ReadonlyField'), 'UsageListAsString' => array('title' => _t('Block.UsageListAsString', 'Used on'), 'field' => 'ReadonlyField')); if ($aboveOrBelow) { $displayfields['AboveOrBelow'] = array('title' => _t('GridFieldConfigBlockManager.AboveOrBelow', 'Above or Below'), 'callback' => function () { return DropdownField::create('AboveOrBelow', _t('GridFieldConfigBlockManager.AboveOrBelow', 'Above or Below'), BlockSet::config()->get('above_or_below_options')); }); } $editable->setDisplayFields($displayfields); // EDIT $this->addComponent($erow = new EditableBlockRow()); // /EDIT } else { $this->addComponent($dcols = new GridFieldDataColumns()); $displayfields = array('singular_name' => _t('Block.BlockType', 'Block Type'), 'Title' => _t('Block.TitleName', 'Block Name'), 'BlockArea' => _t('Block.BlockArea', 'Block Area'), 'isPublishedNice' => _t('Block.IsPublishedField', 'Published'), 'UsageListAsString' => _t('Block.UsageListAsString', 'Used on')); $dcols->setDisplayFields($displayfields); $dcols->setFieldCasting(array('UsageListAsString' => 'HTMLText->Raw')); } $this->addComponent(new GridFieldButtonRow('before')); // EDIT $this->addComponent(new GridFieldButtonRow('after')); // /EDIT $this->addComponent(new GridFieldToolbarHeader()); $this->addComponent(new GridFieldDetailForm()); // EDIT //$this->addComponent($sort = new GridFieldSortableHeader()); //$this->addComponent($filter = new GridFieldFilterHeader()); //$this->addComponent(new GridFieldDetailForm()); //$filter->setThrowExceptionOnBadDataType(false); //$sort->setThrowExceptionOnBadDataType(false); // load enhancements module (eg inline editing etc, needs save action @TODO: move to SiteTree only? if (class_exists('GF_BlockEnhancements')) { $this->addComponent(new GF_BlockEnhancements()); } // stuff only for BlockAdmin if ($controllerClass == 'BlockAdmin') { $this->addComponent($sort = new GridFieldSortableHeader()); $sort->setThrowExceptionOnBadDataType(false); $this->addComponent($filter = new GridFieldFilterHeader()); $filter->setThrowExceptionOnBadDataType(false); } else { // only for GF on SiteTree $this->addComponent(new GridFieldTitleHeader()); $this->addComponent(new GridFieldFooter()); // groupable $this->addComponent(new GridFieldGroupable('BlockArea', 'Area', 'none', $areasFieldSource)); // var_dump($areasFieldSource); // // Get available Areas (for page) enhancements inactive when in ModelAdmin/BlockAdmin // if (Controller::curr() && Controller::curr()->class == 'CMSPageEditController') { // // Provide defined blockAreas to JS // $blockManager = Injector::inst()->get('BlockManager'); //// $blockAreas = $blockManager->getAreasForPageType( Controller::curr()->currentPage()->ClassName ); // $blockAreas = $blockManager->getAreasForPageType( Controller::curr()->currentPage()->ClassName ); // } } if ($canAdd) { $multiClass = new GridFieldAddNewMultiClass('after'); $classes = $this->blockManager->getBlockClasses(); $multiClass->setClasses($classes); $this->addComponent($multiClass); //$this->addComponent(new GridFieldAddNewButton()); } // /EDIT if ($controllerClass == 'BlockAdmin' && class_exists('GridFieldCopyButton')) { $this->addComponent(new GridFieldCopyButton()); } if ($canEdit) { $this->addComponent(new GridFieldEditButton()); } if ($canDelete) { $this->addComponent(new GridFieldDeleteAction(true)); } return $this; }