public function getCMSFields() { $fields = parent::getCMSFields(); $fields->insertBefore(new DropdownField('MemberID', 'Member', Member::get()->map('ID', "FirstName")), 'AttendingWholeEvent'); $siteConfig = SiteConfig::current_site_config(); $current = $siteConfig->getCurrentEventID(); if ($this->ParentID < 1) { $event = Event::get()->byID($current); } else { $event = Event::get()->byID($this->ParentID); } $fields->insertAfter(HiddenField::create('ParentID', 'Event', $event->ID), 'ExtraDetail'); $fields->removeByName('PublicFieldsRaw'); $fields->removeByName('Sort'); if ($this->PlayerGames()->Count() > 0) { $gridField = new GridField('PlayerGames', 'Games', $this->PlayerGames(), $config = GridFieldConfig_RelationEditor::create()); $gridField->setModelClass('PlayerGame'); $config->addComponent(new GridFieldOrderableRows()); $config->removeComponentsByType('GridFieldPaginator'); $config->removeComponentsByType('GridFieldPageCount'); $config->addComponent(new GridFieldDeleteAction(false)); $config->addComponent($export = new GridFieldExportButton('before')); $export->setExportColumns(singleton("PlayerGame")->getExportFields()); $fields->addFieldToTab('Root.PlayerGames', $gridField); } return $fields; }
public function testNoCsvHeaders() { $button = new GridFieldExportButton(); $button->setExportColumns(array('Name' => 'Name', 'City' => 'City')); $button->setCsvHasHeader(false); $this->assertEquals("\"Test\",\"City\"\n\"Test2\",\"City2\"\n", $button->generateExportFileData($this->gridField)); }
public function testArrayListInput() { $button = new GridFieldExportButton(); $this->gridField->getConfig()->addComponent(new GridFieldPaginator()); //Create an ArrayList 1 greater the Paginator's default 15 rows $arrayList = new ArrayList(); for ($i = 1; $i <= 16; $i++) { $dataobject = new DataObject(array('ID' => $i)); $arrayList->add($dataobject); } $this->gridField->setList($arrayList); $this->assertEquals("\"ID\"\n\"1\"\n\"2\"\n\"3\"\n\"4\"\n\"5\"\n\"6\"\n\"7\"\n\"8\"\n" . "\"9\"\n\"10\"\n\"11\"\n\"12\"\n\"13\"\n\"14\"\n\"15\"\n\"16\"\n", $button->generateExportFileData($this->gridField)); }
public function getCMSFields() { $fields = parent::getCMSFields(); $recips_config = GridFieldConfig::create()->addComponents(new GridFieldSortableRows('SortOrder'), new GridFieldToolbarHeader(), new GridFieldAddNewButton('toolbar-header-right'), new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator(10), new GridFieldEditButton(), new GridFieldDeleteAction(), new GridFieldDetailForm()); $fields->addFieldToTab('Root.Content.FormControls', new GridField('FormRecipients', 'Form Recipients', $this->FormRecipients(), $recips_config)); $fields->addFieldToTab('Root.Content.FormControls', new HTMLEditorField('ThankYouText', 'Text after form submission')); $submits_config = GridFieldConfig::create()->addComponents(new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator(10), new GridFieldViewButton(), new GridFieldDetailForm(), new GridFieldDeleteAction(), $exportBtn = new GridFieldExportButton()); $submission_class = $this->ClassName . "Submission"; $export_fields = Config::inst()->get($submission_class, 'export_fields', Config::UNINHERITED); if (!empty($export_fields)) { $exportBtn->setExportColumns($export_fields); } $fields->addFieldToTab('Root.Content.FormSubmissions', new GridField($submission_class, 'Form Submissions', DataObject::get($submission_class, "FormPageID = " . $this->ID), $submits_config)); return $fields; }
public function __construct($flexi) { $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(false)); $this->addComponent(new GridFieldDetailForm()); $this->addComponent($export = new GridFieldExportButton()); $this->addComponent($pagination = new GridFieldPaginator()); $sort->setThrowExceptionOnBadDataType(false); $filter->setThrowExceptionOnBadDataType(false); $pagination->setThrowExceptionOnBadDataType(false); // add submission values to exports /////////////////////////////////// $export->setExportColumns($this->getCSVColumns($flexi)); }
/** * This method generates the list view form * Individual items are handled by the gridfielddetailform - this is is defined in GridFieldDetailForm_ItemRequest::ItemEditForm() and has been overloaded in the subclass * * @param type $id * @param type $fields * @return \AbcModelAdminForm */ function getEditForm($id = null, $fields = null) { $list = $this->getList(); $exportButton = new GridFieldExportButton('before'); $exportButton->setExportColumns($this->getExportFields()); $listField = GridField::create($this->sanitiseClassName($this->modelClass), false, $list, $fieldConfig = AddGridFieldConfig_RecordEditor::create($this->stat('page_length'))->addComponent($exportButton)->removeComponentsByType('GridFieldFilterHeader')->addComponents(new GridFieldPrintButton('before'))); // Validation if (singleton($this->modelClass)->hasMethod('getCMSValidator')) { $detailValidator = singleton($this->modelClass)->getCMSValidator(); $listField->getConfig()->getComponentByType('GridFieldDetailForm')->setValidator($detailValidator); } $form = new AbcModelAdminForm($this, 'EditForm', new FieldList($listField), new FieldList()); $form->addExtraClass('cms-edit-form cms-panel-padded center'); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); $form->setFormAction(Controller::join_links($this->Link($this->sanitiseClassName($this->modelClass)), 'EditForm')); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); $this->extend('updateEditForm', $form); return $form; }
function getEditForm($id = null, $fields = null) { $list = $this->getList(); $exportButton = new GridFieldExportButton('before'); $exportButton->setExportColumns($this->getExportFields()); $listField = GridField::create($this->sanitiseClassName($this->modelClass), false, $list, $fieldConfig = GridFieldConfig_RecordEditor::create($this->stat('page_length'))->removeComponentsByType('GridFieldFilterHeader')); // Validation if (singleton($this->modelClass)->hasMethod('getCMSValidator')) { $detailValidator = singleton($this->modelClass)->getCMSValidator(); $listField->getConfig()->getComponentByType('DynamicTemplateGridFieldDetailForm')->setValidator($detailValidator); } $form = new Form($this, 'EditForm', new FieldList($listField, new HeaderField(_t('DynamicTemplateAdmin.IMPORTTEMPLATE', 'Import template'), 3), new LiteralField('TemplateImportFormIframe', sprintf('<iframe src="%s" id="TemplateImportFormIframe" width="100%%" height="250px" border="0"></iframe>', $this->Link('DynamicTemplate/templateimport')))), new FieldList()); $form->addExtraClass('cms-edit-form cms-panel-padded center'); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); $form->setFormAction(Controller::join_links($this->Link($this->sanitiseClassName($this->modelClass)), 'EditForm')); // $form->setAttribute('data-pjax-fragment', 'DTEditForm'); $this->extend('updateEditForm', $form); // $this->getRequest()->addHeader('X-Pjax', 'CurrentForm'); return $form; }
/** * Replace the GridField with a PublishableGridField if the DataObject being managed is Publishable. * * @param type $form */ public function updateEditForm($form) { $modelClass = $this->owner->modelClass; if ($modelClass::has_extension('Publishable')) { $params = $this->owner->request->getVar('q'); $fieldName = str_replace('\\', '-', $modelClass); $list = $this->owner->getList(); $exportButton = new GridFieldExportButton('before'); $exportButton->setExportColumns($this->owner->getExportFields()); $listField = PublishableGridField::create($fieldName, false, $list, $fieldConfig = PublishableGridFieldConfig_RecordEditor::create($this->owner->stat('page_length'))->addComponent($exportButton)->removeComponentsByType('GridFieldFilterHeader')->removeComponentsByType('PublishableGridFieldStageFilter')->addComponents(new GridFieldPrintButton('before'))); if (isset($params['Stage']) && !empty($params['Stage'])) { $listField->State->PublishableGridField->currentStage = $params['Stage']; } $listField->setForm($form); $form->Fields()->replaceField($fieldName, $listField); // Validation if (singleton($modelClass)->hasMethod('getCMSValidator')) { $detailValidator = singleton($modelClass)->getCMSValidator(); $listField->getConfig()->getComponentByType('PublishableGridFieldDetailForm')->setValidator($detailValidator); } } }
public function getCMSFields() { $fields = parent::getCMSFields(); $siteConfig = SiteConfig::current_site_config(); $current = $siteConfig->getCurrentEventID(); if ($this->ParentID < 1) { $event = Event::get()->byID($current); } else { $event = Event::get()->byID($this->ParentID); } $parent = HiddenField::create('ParentID', 'Event', $event->ID); $fields->insertAfter($parent, 'Details'); $sessions = array(); if ($event) { for ($i = 1; $i <= $event->NumberOfSessions; $i++) { $sessions[$i] = $i; } } $session = new DropdownField('Session', 'Session', $sessions); $session->setEmptyString(' '); $fields->insertAfter($session, 'Title'); $fields->insertAfter($member = new DropdownField('FacilitatorID', 'Facilitator', Member::get()->map('ID', 'Name')), 'Session'); $member->setEmptyString(' '); $fields->insertAfter(new TextField('FacilitatorText', 'Or enter facilitator name(s)'), 'FacilitatorID'); $status = array(0 => "Pending", 1 => "Accepted"); $fields->insertBefore(new OptionsetField('Status', 'Status', $status), 'Title'); $gridField = $fields->dataFieldByName("Players"); if ($gridField) { $config = $gridField->getConfig(); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(singleton("PlayerGame")->getGameDisplayFields()); $config->addComponent(new GridFieldOrderableRows()); $config->removeComponentsByType('GridFieldPaginator'); $config->removeComponentsByType('GridFieldPageCount'); $config->addComponent($export = new GridFieldExportButton('before')); $export->setExportColumns(singleton("PlayerGame")->getExportFields()); } return $fields; }
/** * Customise the edit form so that It uses the VersionedDataObjectDetailsForm as well as make * sure that the reading stage is 'Stage'. * @param null $id * @param null $fields * @return mixed */ public function getEditForm($id = null, $fields = null) { VersionedReadingMode::setStageReadingMode(); $list = $this->getList(); $exportButton = new GridFieldExportButton('buttons-before-left'); $exportButton->setExportColumns($this->getExportFields()); $listField = GridField::create($this->sanitiseClassName($this->modelClass), false, $list, $fieldConfig = GridFieldConfig_RecordEditor::create($this->stat('page_length'))->addComponent($exportButton)->removeComponentsByType('GridFieldFilterHeader')->removeComponentsByType('GridFieldDeleteAction')->addComponents(new GridFieldPrintButton('buttons-before-left'))->removeComponentsByType('GridFieldDetailForm')->addComponent(new VersionedDataObjectDetailsForm())); // Validation if (singleton($this->modelClass)->hasMethod('getCMSValidator')) { $detailValidator = singleton($this->modelClass)->getCMSValidator(); $listField->getConfig()->getComponentByType('GridFieldDetailForm')->setValidator($detailValidator); } $form = CMSForm::create($this, 'EditForm', new FieldList($listField), new FieldList())->setHTMLID('Form_EditForm'); $form->setResponseNegotiator($this->getResponseNegotiator()); $form->addExtraClass('cms-edit-form cms-panel-padded center'); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); $editFormAction = Controller::join_links($this->Link($this->sanitiseClassName($this->modelClass)), 'EditForm'); $form->setFormAction($editFormAction); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); $this->extend('updateEditForm', $form); VersionedReadingMode::restoreOriginalReadingMode(); return $form; }
/** * Display the search engine specific configuration, and the search page specific analytics and suggestions. */ public function getCMSFields() { $fields = parent::getCMSFields(); Requirements::css(EXTENSIBLE_SEARCH_PATH . '/css/extensible-search.css'); // Determine the search engine extensions that are available. $engines = array(); foreach (self::config()->search_engine_extensions as $extension => $display) { // The search engine extensions may define an optional display title. if (is_numeric($extension)) { $extension = $display; } // Determine whether the search engine extensions have been applied correctly. if (ClassInfo::exists($extension) && ClassInfo::exists("{$extension}_Controller") && $this->hasExtension($extension) && ModelAsController::controller_for($this)->hasExtension("{$extension}_Controller")) { $engines[$extension] = $display; } } // Determine whether the full-text search engine is available. $configuration = Config::inst(); $classes = $configuration->get('FulltextSearchable', 'searchable_classes'); if (is_array($classes) && count($classes) > 0) { $engines['Full-Text'] = 'Full-Text'; } // Display the search engine selection. $fields->addFieldToTab('Root.Main', DropdownField::create('SearchEngine', 'Search Engine', $engines)->setHasEmptyDefault(true)->setRightTitle('This needs to be saved before further customisation is available'), 'Title'); // Determine whether a search engine has been selected. if ($this->SearchEngine && isset($engines[$this->SearchEngine])) { // Display a search engine specific notice. $fields->addFieldToTab('Root.Main', LiteralField::create('SearchEngineNotice', "<p class='extensible-search notice'><strong>{$engines[$this->SearchEngine]} Search Page</strong></p>"), 'Title'); // Determine whether the search engine supports hierarchy filtering. $hierarchy = self::$supports_hierarchy; if ($this->SearchEngine !== 'Full-Text') { foreach ($this->extension_instances as $instance) { if (get_class($instance) === $this->SearchEngine) { $instance->setOwner($this); if (isset($instance::$supports_hierarchy)) { $hierarchy = $instance::$supports_hierarchy; } $instance->clearOwner(); break; } } } // The search engine may only support limited hierarchy filtering for multiple sites. if ($hierarchy || ClassInfo::exists('Multisites')) { // Display the search trees selection. $fields->addFieldToTab('Root.Main', $tree = TreeMultiselectField::create('SearchTrees', 'Search Trees', 'SiteTree'), 'Content'); // Determine whether the search engine only supports limited hierarchy filtering. if (!$hierarchy) { // Update the search trees to reflect this. $tree->setDisableFunction(function ($page) { return $page->ParentID != 0; }); $tree->setRightTitle('This <strong>search engine</strong> only supports limited hierarchy'); } } // Display the sorting selection. $fields->addFieldToTab('Root.Main', DropdownField::create('SortBy', 'Sort By', $this->getSelectableFields()), 'Content'); $fields->addFieldToTab('Root.Main', DropdownField::create('SortDirection', 'Sort Direction', array('DESC' => 'Descending', 'ASC' => 'Ascending')), 'Content'); // Display the start with listing selection. $fields->addFieldToTab('Root.Main', CheckboxField::create('StartWithListing', 'Start With Listing?')->addExtraClass('start-with-listing'), 'Content'); // Display the results per page selection. $fields->addFieldToTab('Root.Main', NumericField::create('ResultsPerPage'), 'Content'); } else { // The search engine has not been selected. $fields->addFieldToTab('Root.Main', LiteralField::create('SearchEngineNotification', "<p class='extensible-search notification'><strong>Select a Search Engine</strong></p>"), 'Title'); } // Determine whether analytics have been enabled. if ($configuration->get('ExtensibleSearch', 'enable_analytics')) { // Determine the search page specific analytics. $history = $this->History(); $query = new SQLSelect("Term, COUNT(*) AS Frequency, ((COUNT(*) * 100.00) / {$history->count()}) AS FrequencyPercentage, AVG(Time) AS AverageTimeTaken, (Results > 0) AS Results", 'ExtensibleSearch', "ExtensibleSearchPageID = {$this->ID}", array('Frequency' => 'DESC', 'Term' => 'ASC'), 'Term'); // These will require display formatting. $analytics = ArrayList::create(); foreach ($query->execute() as $result) { $result = ArrayData::create($result); $result->FrequencyPercentage = sprintf('%.2f %%', $result->FrequencyPercentage); $result->AverageTimeTaken = sprintf('%.5f', $result->AverageTimeTaken); $result->Results = $result->Results ? 'true' : 'false'; $analytics->push($result); } // Instantiate the analytic summary. $fields->addFieldToTab('Root.SearchAnalytics', $summary = GridField::create('Summary', 'Summary', $analytics)->setModelClass('ExtensibleSearch')); $summaryConfiguration = $summary->getConfig(); // Update the display columns. $summaryDisplay = array('Term' => 'Search Term', 'Frequency' => 'Frequency', 'FrequencyPercentage' => 'Frequency %', 'AverageTimeTaken' => 'Average Time Taken (s)', 'Results' => 'Has Results?'); $summaryConfiguration->getComponentByType('GridFieldDataColumns')->setDisplayFields($summaryDisplay); // Instantiate an export button. $summaryConfiguration->addComponent($summaryExport = new GridFieldExportButton()); $summaryExport->setExportColumns($summaryDisplay); // Update the custom summary fields to be sortable. $summaryConfiguration->getComponentByType('GridFieldSortableHeader')->setFieldSorting(array('FrequencyPercentage' => 'Frequency')); $summaryConfiguration->removeComponentsByType('GridFieldFilterHeader'); // Instantiate the analytic history. $fields->addFieldToTab('Root.SearchAnalytics', $history = GridField::create('History', 'History', $history)->setModelClass('ExtensibleSearch')); $historyConfiguration = $history->getConfig(); // Instantiate an export button. $historyConfiguration->addComponent(new GridFieldExportButton()); // Update the custom summary fields to be sortable. $historyConfiguration->getComponentByType('GridFieldSortableHeader')->setFieldSorting(array('TimeSummary' => 'Created', 'TimeTakenSummary' => 'Time', 'SearchEngineSummary' => 'SearchEngine')); $historyConfiguration->removeComponentsByType('GridFieldFilterHeader'); } // Determine whether suggestions have been enabled. if ($configuration->get('ExtensibleSearchSuggestion', 'enable_suggestions')) { // Appropriately restrict the approval functionality. $user = Member::currentUserID(); if (Permission::checkMember($user, 'EXTENSIBLE_SEARCH_SUGGESTIONS')) { Requirements::javascript(EXTENSIBLE_SEARCH_PATH . '/javascript/extensible-search-approval.js'); } // Determine the search page specific suggestions. $fields->addFieldToTab('Root.SearchSuggestions', GridField::create('Suggestions', 'Suggestions', $this->Suggestions(), $suggestionsConfiguration = GridFieldConfig_RecordEditor::create())->setModelClass('ExtensibleSearchSuggestion')); // Update the custom summary fields to be sortable. $suggestionsConfiguration->getComponentByType('GridFieldSortableHeader')->setFieldSorting(array('FrequencySummary' => 'Frequency', 'FrequencyPercentage' => 'Frequency', 'ApprovedField' => 'Approved')); $suggestionsConfiguration->removeComponentsByType('GridFieldFilterHeader'); } // Allow extension customisation. $this->extend('updateExtensibleSearchPageCMSFields', $fields); return $fields; }
/** * customizes the backends fields, mainly for ModelAdmin * * @return FieldList the fields for the backend * * @author Roland Lehmann <*****@*****.**>, * Sebastian Diel <*****@*****.**> * @since 11.06.2014 */ public function getCMSFields() { $fields = SilvercartDataObject::getCMSFields($this, 'SilvercartCarrierID', false); $fields->dataFieldByName('DeliveryTimeMin')->setDescription($this->fieldLabel('DeliveryTimeMinDesc')); $fields->dataFieldByName('DeliveryTimeMax')->setDescription($this->fieldLabel('DeliveryTimeMaxDesc')); $fields->dataFieldByName('DeliveryTimeText')->setDescription($this->fieldLabel('DeliveryTimeTextDesc')); if ($this->isInDB()) { $feeTable = $fields->dataFieldByName('SilvercartShippingFees'); $feesTableConfig = $feeTable->getConfig(); $exportButton = new GridFieldExportButton(); $exportColumsArray = array('ID', 'MaximumWeight', 'UnlimitedWeight', 'PriceAmount', 'PriceCurrency', 'SilvercartZoneID', 'SilvercartShippingMethodID', 'SilvercartTaxID'); $exportButton->setExportColumns($exportColumsArray); $feesTableConfig->addComponent($exportButton); $feesTableConfig->removeComponentsByType('SilvercartGridFieldAddExistingAutocompleter'); $feesTableConfig->removeComponentsByType('GridFieldDeleteAction'); $feesTableConfig->addComponent(new GridFieldDeleteAction()); if (class_exists('GridFieldSortableRows')) { $feesTableConfig->addComponent(new GridFieldSortableRows('priority')); } } return $fields; }
public function getCMSFields() { $fields = parent::getCMSFields(); Requirements::css(EXTENSIBLE_SEARCH_PATH . '/css/extensible-search.css'); // Restrict the search suggestion approval appropriately. $user = Member::currentUserID(); if (Permission::checkMember($user, 'EXTENSIBLE_SEARCH_SUGGESTIONS')) { Requirements::javascript(EXTENSIBLE_SEARCH_PATH . '/javascript/extensible-search-approval.js'); } // Determine if full text search is enabled. $engines = array('' => ''); $searchable = Config::inst()->get('FulltextSearchable', 'searchable_classes'); if (is_array($searchable) && count($searchable) > 0) { $engines['Full-Text'] = 'Full-Text'; } // Retrieve a list of search engine extensions currently applied that end with 'Search'. $extensions = $this->get_extensions(get_class()); foreach ($extensions as $extension) { $reversed = strrev($extension); if (strpos($reversed, strrev('Search')) === 0) { $engine = strrev(substr($reversed, 6)); $engines[$engine] = $engine; } } // Allow selection of the search engine extension to use. $fields->addFieldToTab('Root.Main', new DropdownField('SearchEngine', 'Search Engine', $engines), 'Content'); // Make sure a search engine is being used before allowing customisation. if ($this->SearchEngine) { // Construct the support array to determine the CMS customisation available to the current search engine/wrapper. $support = self::$support; if ($this->SearchEngine !== 'Full-Text' && $this->extension_instances) { $engine = "{$this->SearchEngine}Search"; foreach ($this->extension_instances as $instance) { if (get_class($instance) === $engine) { $instance->setOwner($this); if (isset($instance::$support)) { $support = array_merge($support, $instance::$support); } $instance->clearOwner(); break; } } } // Use the support array to determine the CMS customisation available to the current search engine/wrapper. if ($support['StartWithListing']) { $fields->addFieldToTab('Root.Main', new CheckboxField('StartWithListing', _t('ExtensibleSearchPage.START_LISTING', 'Display initial listing - useful for filterable "data type" lists')), 'Content'); } if (class_exists('ListingTemplate') && $support['ListingTemplateID']) { $templates = DataObject::get('ListingTemplate'); if ($templates) { $templates = $templates->map(); } else { $templates = array(); } $label = _t('ExtensibleSearchPage.CONTENT_TEMPLATE', 'Listing Template - if not set, theme template will be used'); $fields->addFieldToTab('Root.Main', $template = DropdownField::create('ListingTemplateID', $label, $templates, '', null)->setEmptyString('(results template)'), 'Content'); $template->setEmptyString('(results template)'); } if ($support['ResultsPerPage']) { $perPage = array('5' => '5', '10' => '10', '15' => '15', '20' => '20'); $fields->addFieldToTab('Root.Main', new DropdownField('ResultsPerPage', _t('ExtensibleSearchPage.RESULTS_PER_PAGE', 'Results per page'), $perPage), 'Content'); } if ($support['SearchTrees']) { $fields->addFieldToTab('Root.Main', new TreeMultiselectField('SearchTrees', 'Restrict results to these subtrees', 'Page'), 'Content'); } if (!$this->SortBy) { $this->SortBy = 'Created'; } $objFields = $this->getSelectableFields(); if ($support['SortBy']) { $sortFields = $objFields; // Remove content and groups from being sortable (as they are not relevant). unset($sortFields['Content']); unset($sortFields['Groups']); $fields->addFieldToTab('Root.Main', new DropdownField('SortBy', _t('ExtensibleSearchPage.SORT_BY', 'Sort By'), $sortFields), 'Content'); } if ($support['SortDir']) { $fields->addFieldToTab('Root.Main', new DropdownField('SortDir', _t('ExtensibleSearchPage.SORT_DIR', 'Sort Direction'), $this->dbObject('SortDir')->enumValues()), 'Content'); } $types = SiteTree::page_type_classes(); $source = array_combine($types, $types); if ($this->SearchEngine !== 'Full-Text' && $this->extension_instances) { $engine = "{$this->SearchEngine}Search"; foreach ($this->extension_instances as $instance) { if (get_class($instance) === $engine) { $instance->setOwner($this); // Trigger the following methods on the current search engine extension. if (method_exists($instance, 'updateSource')) { // add in any explicitly configured asort($source); $instance->updateSource($source); } if (method_exists($instance, 'getQueryBuilders') && $support['QueryType']) { $parsers = $instance->getQueryBuilders(); $options = array(); foreach ($parsers as $key => $objCls) { $obj = new $objCls(); $options[$key] = $obj->title; } $fields->addFieldToTab('Root.Main', new DropdownField('QueryType', _t('ExtensibleSearchPage.QUERY_TYPE', 'Query Type'), $options), 'Content'); } $instance->clearOwner(); break; } } } if ($support['SearchType']) { ksort($source); $source = array_merge($source, self::$additional_search_types); $types = new MultiValueDropdownField('SearchType', _t('ExtensibleSearchPage.SEARCH_ITEM_TYPE', 'Search items of type'), $source); $fields->addFieldToTab('Root.Main', $types, 'Content'); } if ($support['SearchOnFields']) { $fields->addFieldToTab('Root.Main', new MultiValueDropdownField('SearchOnFields', _t('ExtensibleSearchPage.INCLUDE_FIELDS', 'Search On Fields'), $objFields), 'Content'); } $boostVals = array(); for ($i = 1; $i <= 5; $i++) { $boostVals[$i] = $i; } if ($support['BoostFields']) { $fields->addFieldToTab('Root.Main', new KeyValueField('BoostFields', _t('ExtensibleSearchPage.BOOST_FIELDS', 'Boost values'), $objFields, $boostVals), 'Content'); } if ($support['BoostMatchFields']) { $fields->addFieldToTab('Root.Main', $f = new KeyValueField('BoostMatchFields', _t('ExtensibleSearchPage.BOOST_MATCH_FIELDS', 'Boost fields with field/value matches'), array(), $boostVals), 'Content'); $f->setRightTitle('Enter a field name, followed by the value to boost if found in the result set, eg "title:Home" '); } if ($support['FilterFields']) { $fields->addFieldToTab('Root.Main', $kv = new KeyValueField('FilterFields', _t('ExtensibleSearchPage.FILTER_FIELDS', 'Fields to filter by')), 'Content'); } if ($this->SearchEngine !== 'Full-Text') { $fields->addFieldToTab('Root.Main', new HeaderField('FacetHeader', _t('ExtensibleSearchPage.FACET_HEADER', 'Facet Settings')), 'Content'); } if ($support['FacetFields']) { $fields->addFieldToTab('Root.Main', new MultiValueDropdownField('FacetFields', _t('ExtensibleSearchPage.FACET_FIELDS', 'Fields to create facets for'), $objFields), 'Content'); } if ($support['CustomFacetFields']) { $fields->addFieldToTab('Root.Main', new MultiValueTextField('CustomFacetFields', _t('ExtensibleSearchPage.CUSTOM_FACET_FIELDS', 'Additional fields to create facets for')), 'Content'); } if ($support['FacetMapping']) { $facetMappingFields = $objFields; if ($this->CustomFacetFields && ($cff = $this->CustomFacetFields->getValues())) { foreach ($cff as $facetField) { $facetMappingFields[$facetField] = $facetField; } } $fields->addFieldToTab('Root.Main', new KeyValueField('FacetMapping', _t('ExtensibleSearchPage.FACET_MAPPING', 'Mapping of facet title to nice title'), $facetMappingFields), 'Content'); } if ($support['FacetQueries']) { $fields->addFieldToTab('Root.Main', new KeyValueField('FacetQueries', _t('ExtensibleSearchPage.FACET_QUERIES', 'Fields to create query facets for')), 'Content'); } if ($support['MinFacetCount']) { $fields->addFieldToTab('Root.Main', new NumericField('MinFacetCount', _t('ExtensibleSearchPage.MIN_FACET_COUNT', 'Minimum facet count for inclusion in facet results'), 2), 'Content'); } $this->extend('updateExtensibleSearchPageCMSFields', $fields); } else { $fields->addFieldToTab('Root.Main', LiteralField::create('SearchEngineNotification', "<p class='extensible-search notification'><strong>Select a Search Engine</strong></p>"), 'Title'); } // Retrieve the extensible search analytics, when enabled. if (Config::inst()->get('ExtensibleSearch', 'enable_analytics')) { // Retrieve the search analytics. $history = $this->History(); $query = new SQLQuery("Term, COUNT(*) AS Frequency, ((COUNT(*) * 100.00) / {$history->count()}) AS FrequencyPercentage, AVG(Time) AS AverageTimeTaken, (Results > 0) AS Results", 'ExtensibleSearch', "ExtensibleSearchPageID = {$this->ID}", array('Frequency' => 'DESC', 'Term' => 'ASC'), 'Term'); $analytics = ArrayList::create(); foreach ($query->execute() as $result) { $result = ArrayData::create($result); $result->FrequencyPercentage = sprintf('%.2f %%', $result->FrequencyPercentage); $result->AverageTimeTaken = sprintf('%.5f', $result->AverageTimeTaken); $result->Results = $result->Results ? 'true' : 'false'; $analytics->push($result); } // Instantiate the search analytic summary display. $fields->addFieldToTab('Root.SearchAnalytics', $summary = GridField::create('Summary', 'Summary', $analytics)->setModelClass('ExtensibleSearch')); $summaryConfiguration = $summary->getConfig(); $summaryConfiguration->removeComponentsByType('GridFieldFilterHeader'); $summaryConfiguration->addComponent($summaryExport = new GridFieldExportButton()); $summaryConfiguration->getComponentByType('GridFieldSortableHeader')->setFieldSorting(array('FrequencyPercentage' => 'Frequency')); // Update the export fields, since we're not using a data list. $summaryDisplay = array('Term' => 'Search Term', 'Frequency' => 'Frequency', 'FrequencyPercentage' => 'Frequency %', 'AverageTimeTaken' => 'Average Time Taken (s)', 'Results' => 'Has Results?'); $summaryExport->setExportColumns($summaryDisplay); // Update the summary fields. $summaryConfiguration->getComponentByType('GridFieldDataColumns')->setDisplayFields($summaryDisplay); // Instantiate the search analytic history display. $fields->addFieldToTab('Root.SearchAnalytics', $history = GridField::create('History', 'History', $history)->setModelClass('ExtensibleSearch')); $historyConfiguration = $history->getConfig(); $historyConfiguration->removeComponentsByType('GridFieldFilterHeader'); $historyConfiguration->addComponent($historyExport = new GridFieldExportButton()); // Update the custom summary fields to be sortable. $historyConfiguration->getComponentByType('GridFieldSortableHeader')->setFieldSorting(array('TimeSummary' => 'Created', 'TimeTakenSummary' => 'Time')); } // Retrieve the extensible search suggestions, when enabled. if (Config::inst()->get('ExtensibleSearchSuggestion', 'enable_suggestions')) { // Instantiate the search suggestion display. $fields->addFieldToTab('Root.SearchSuggestions', GridField::create('Suggestions', 'Suggestions', $this->Suggestions(), $suggestionsConfiguration = GridFieldConfig_RecordEditor::create())->setModelClass('ExtensibleSearchSuggestion')); $suggestionsConfiguration->removeComponentsByType('GridFieldFilterHeader'); // Update the custom summary fields to be sortable. $suggestionsConfiguration->getComponentByType('GridFieldSortableHeader')->setFieldSorting(array('FrequencySummary' => 'Frequency', 'FrequencyPercentage' => 'Frequency', 'ApprovedField' => 'Approved')); } return $fields; }
public function testZeroValue() { $button = new GridFieldExportButton(); $button->setExportColumns(array('RugbyTeamNumber' => 'Rugby Team Number')); $this->assertEquals("\"Rugby Team Number\"\n\"2\"\n\"0\"\n", $button->generateExportFileData($this->gridField)); }
/** * @return FieldList */ public function getCMSFields() { $self = $this; $this->beforeUpdateCMSFields(function ($fields) use($self) { // define tabs $fields->findOrMakeTab('Root.FormContent', _t('UserDefinedForm.FORM', 'Form')); $fields->findOrMakeTab('Root.FormOptions', _t('UserDefinedForm.CONFIGURATION', 'Configuration')); $fields->findOrMakeTab('Root.Recipients', _t('UserDefinedForm.RECIPIENTS', 'Recipients')); $fields->findOrMakeTab('Root.Submissions', _t('UserDefinedForm.SUBMISSIONS', 'Submissions')); // field editor $fields->addFieldToTab('Root.FormContent', new FieldEditor('Fields', 'Fields', '', $self)); // text to show on complete $onCompleteFieldSet = new CompositeField($label = new LabelField('OnCompleteMessageLabel', _t('UserDefinedForm.ONCOMPLETELABEL', 'Show on completion')), $editor = new HtmlEditorField('OnCompleteMessage', '', _t('UserDefinedForm.ONCOMPLETEMESSAGE', $self->OnCompleteMessage))); $onCompleteFieldSet->addExtraClass('field'); $editor->setRows(3); $label->addExtraClass('left'); // Define config for email recipients $emailRecipientsConfig = GridFieldConfig_RecordEditor::create(10); $emailRecipientsConfig->getComponentByType('GridFieldAddNewButton')->setButtonName(_t('UserDefinedForm.ADDEMAILRECIPIENT', 'Add Email Recipient')); // who do we email on submission $emailRecipients = new GridField('EmailRecipients', _t('UserDefinedForm.EMAILRECIPIENTS', 'Email Recipients'), $self->EmailRecipients(), $emailRecipientsConfig); $emailRecipients->getConfig()->getComponentByType('GridFieldDetailForm')->setItemRequestClass('UserDefinedForm_EmailRecipient_ItemRequest'); $fields->addFieldsToTab('Root.FormOptions', $onCompleteFieldSet); $fields->addFieldToTab('Root.Recipients', $emailRecipients); $fields->addFieldsToTab('Root.FormOptions', $self->getFormOptions()); // view the submissions $submissions = new GridField('Submissions', _t('UserDefinedForm.SUBMISSIONS', 'Submissions'), $self->Submissions()->sort('Created', 'DESC')); // make sure a numeric not a empty string is checked against this int column for SQL server $parentID = !empty($self->ID) ? $self->ID : 0; // get a list of all field names and values used for print and export CSV views of the GridField below. $columnSQL = <<<SQL SELECT "Name", "Title" FROM "SubmittedFormField" LEFT JOIN "SubmittedForm" ON "SubmittedForm"."ID" = "SubmittedFormField"."ParentID" WHERE "SubmittedForm"."ParentID" = '{$parentID}' ORDER BY "Title" ASC SQL; $columns = DB::query($columnSQL)->map(); $config = new GridFieldConfig(); $config->addComponent(new GridFieldToolbarHeader()); $config->addComponent($sort = new GridFieldSortableHeader()); $config->addComponent($filter = new UserFormsGridFieldFilterHeader()); $config->addComponent(new GridFieldDataColumns()); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridState_Component()); $config->addComponent(new GridFieldDeleteAction()); $config->addComponent(new GridFieldPageCount('toolbar-header-right')); $config->addComponent($pagination = new GridFieldPaginator(25)); $config->addComponent(new GridFieldDetailForm()); $config->addComponent($export = new GridFieldExportButton()); $config->addComponent($print = new GridFieldPrintButton()); /** * Support for {@link https://github.com/colymba/GridFieldBulkEditingTools} */ if (class_exists('GridFieldBulkManager')) { $config->addComponent(new GridFieldBulkManager()); } $sort->setThrowExceptionOnBadDataType(false); $filter->setThrowExceptionOnBadDataType(false); $pagination->setThrowExceptionOnBadDataType(false); // attach every column to the print view form $columns['Created'] = 'Created'; $filter->setColumns($columns); // print configuration $print->setPrintHasHeader(true); $print->setPrintColumns($columns); // export configuration $export->setCsvHasHeader(true); $export->setExportColumns($columns); $submissions->setConfig($config); $fields->addFieldToTab('Root.Submissions', $submissions); $fields->addFieldToTab('Root.FormOptions', new CheckboxField('DisableSaveSubmissions', _t('UserDefinedForm.SAVESUBMISSIONS', 'Disable Saving Submissions to Server'))); }); $fields = parent::getCMSFields(); return $fields; }
/** * @return FieldList */ public function getCMSFields() { // call updateCMSFields after userforms SiteTree::disableCMSFieldsExtensions(); $fields = parent::getCMSFields(); SiteTree::enableCMSFieldsExtensions(); // define tabs $fields->findOrMakeTab('Root.FormContent', _t('UserDefinedForm.FORM', 'Form')); $fields->findOrMakeTab('Root.FormOptions', _t('UserDefinedForm.CONFIGURATION', 'Configuration')); $fields->findOrMakeTab('Root.Submissions', _t('UserDefinedForm.SUBMISSIONS', 'Submissions')); // field editor $fields->addFieldToTab("Root.FormContent", new FieldEditor("Fields", 'Fields', "", $this)); // text to show on complete $onCompleteFieldSet = new CompositeField($label = new LabelField('OnCompleteMessageLabel', _t('UserDefinedForm.ONCOMPLETELABEL', 'Show on completion')), $editor = new HtmlEditorField("OnCompleteMessage", "", _t('UserDefinedForm.ONCOMPLETEMESSAGE', $this->OnCompleteMessage))); $onCompleteFieldSet->addExtraClass('field'); $editor->setRows(3); $label->addExtraClass('left'); // Set the summary fields of UserDefinedForm_EmailRecipient dynamically via config system Config::inst()->update('UserDefinedForm_EmailRecipient', 'summary_fields', array('EmailAddress' => _t('UserDefinedForm.EMAILADDRESS', 'Email'), 'EmailSubject' => _t('UserDefinedForm.EMAILSUBJECT', 'Subject'), 'EmailFrom' => _t('UserDefinedForm.EMAILFROM', 'From'))); // who do we email on submission $emailRecipients = new GridField("EmailRecipients", _t('UserDefinedForm.EMAILRECIPIENTS', 'Email Recipients'), $this->EmailRecipients(), GridFieldConfig_RecordEditor::create(10)); $emailRecipients->getConfig()->getComponentByType('GridFieldAddNewButton')->setButtonName(_t('UserDefinedForm.ADDEMAILRECIPIENT', 'Add Email Recipient')); $fields->addFieldsToTab("Root.FormOptions", $onCompleteFieldSet); $fields->addFieldToTab("Root.FormOptions", $emailRecipients); $fields->addFieldsToTab("Root.FormOptions", $this->getFormOptions()); // view the submissions $submissions = new GridField("Reports", _t('UserDefinedForm.SUBMISSIONS', 'Submissions'), $this->Submissions()->sort('Created', 'DESC')); // make sure a numeric not a empty string is checked against this int column for SQL server $parentID = !empty($this->ID) ? $this->ID : 0; // get a list of all field names and values used for print and export CSV views of the GridField below. $columnSQL = <<<SQL SELECT "Name", "Title" FROM "SubmittedFormField" LEFT JOIN "SubmittedForm" ON "SubmittedForm"."ID" = "SubmittedFormField"."ParentID" WHERE "SubmittedForm"."ParentID" = '{$parentID}' ORDER BY "Title" ASC SQL; $columns = DB::query($columnSQL)->map(); $config = new GridFieldConfig(); $config->addComponent(new GridFieldToolbarHeader()); $config->addComponent($sort = new GridFieldSortableHeader()); $config->addComponent($filter = new UserFormsGridFieldFilterHeader()); $config->addComponent(new GridFieldDataColumns()); $config->addComponent(new GridFieldEditButton()); $config->addComponent(new GridState_Component()); $config->addComponent(new GridFieldDeleteAction()); $config->addComponent(new GridFieldPageCount('toolbar-header-right')); $config->addComponent($pagination = new GridFieldPaginator(25)); $config->addComponent(new GridFieldDetailForm()); $config->addComponent($export = new GridFieldExportButton()); $config->addComponent($print = new GridFieldPrintButton()); $sort->setThrowExceptionOnBadDataType(false); $filter->setThrowExceptionOnBadDataType(false); $pagination->setThrowExceptionOnBadDataType(false); // attach every column to the print view form $columns['Created'] = 'Created'; $filter->setColumns($columns); // print configuration $print->setPrintHasHeader(true); $print->setPrintColumns($columns); // export configuration $export->setCsvHasHeader(true); $export->setExportColumns($columns); $submissions->setConfig($config); $fields->addFieldToTab("Root.Submissions", $submissions); $fields->addFieldToTab("Root.FormOptions", new CheckboxField('DisableSaveSubmissions', _t('UserDefinedForm.SAVESUBMISSIONS', "Disable Saving Submissions to Server"))); $this->extend('updateCMSFields', $fields); return $fields; }
public function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab("Root.Sidebar", new HTMLEditorField("SidebarContent", "Sidebar Content Top")); $fields->addFieldToTab("Root.Sidebar", new HTMLEditorField("SidebarBottom", "Sidebar Content Bottom")); $fields->addFieldToTab('Root.MapDetails', new GridField('ServiceAreasLocations', 'Locations', $this->ServiceAreasLocations(), GridFieldConfig_RecordEditor::create()->addComponent(new GridFieldSortableRows('SortOrder'), 'GridFieldButtonRow'))); if (permission::check('ADMIN')) { $fields->addFieldToTab("Root.MapDetails", new UploadField("MapIcon", "Map Marker Image")); } $fields->addFieldToTab("Root.MapDetails", new DropdownField("MapType", "Map Display Type", array("ROADMAP" => "Roadmap", "SATELLITE" => "Satellite", "HYBRID" => "Hybrid", "TERRAIN" => "Terrain"), "Roadmap")); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("FirstName_Control", "First Name", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("LastName_Control", "Last Name", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("Address_Control", "Address", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("Address2_Control", "Address 2", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("City_Control", "City", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("State_Control", "State", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("ZipCode_Control", "Zip Code", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("Phone_Control", "Phone Number", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("Email_Control", "Email Address", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab("Root.FormControls.Fields", new CheckboxSetField("Comments_Control", "Comments", array("Enabled" => "Enabled", "Required" => "Required"))); $fields->addFieldToTab('Root.FormSubmissions', new GridField('ServiceAreasFormSubmissions', 'Submissions', $this->ServiceAreasFormSubmissions(), GridFieldConfig_RecordEditor::create()->addComponent($exportBtn = new GridFieldExportButton(), 'GridFieldButtonRow'))); $ExportFields = array("Date" => "Date", "FirstName" => "First Name", "LastName" => "Last Name", "Address" => "Address", "City" => "City", "State" => "State", "ZipCode" => "Zip Code", "Email" => "Email Address", "Phone" => "Phone Number", "PageURL" => "Page URL", "Comments" => "Comments"); $this->extend('updateExportFields', $ExportFields); $exportBtn->setExportColumns($ExportFields); $fields->addFieldToTab("Root.FormControls.Recipients", new LiteralField("Desc1", "<h3>Forms will be submitted to all addresses below.</h3><br>")); $fields->addFieldToTab('Root.FormControls.Recipients', new GridField('FormRecipients', 'Recipients', $this->FormRecipients(), GridFieldConfig_RecordEditor::create()->addComponent(new GridFieldSortableRows('SortOrder'), 'GridFieldButtonRow'))); $fields->addFieldToTab("Root.FormControls.ThankYouText", new HTMLEditorField("ThankYouText", "Text on Submission")); if (permission::check('ADMIN')) { $fields->addFieldToTab("Root.PageCreation", new LiteralField("M0", "<h1>This tool lets you create service area pages with base content. YOU MUST REFRESH the admin area after saving this page to see your new content.</h1>")); $fields->addFieldToTab("Root.PageCreation", new LiteralField("M1", "<p>Enter some content below, and it will be the default content for all pages made with this tool.</p><p>You may optionally add {NAME} to the content, and it will be magically replaced with the page name</p>")); $fields->addFieldToTab("Root.PageCreation", new HTMLEditorField("BaseContent", "Base Content")); $fields->addFieldToTab("Root.PageCreation", new TextField("BasePageTitle", "Base Page Title")); $fields->addFieldToTab("Root.PageCreation", new TextField("BaseMetaTitle", "Base Meta Title")); $fields->addFieldToTab("Root.PageCreation", new TextAreaField("BaseMetaKeywords", "Base Meta Keywords")); $fields->addFieldToTab("Root.PageCreation", new TextAreaField("BaseMetaDescription", "Base Meta Description")); $fields->addFieldToTab("Root.PageCreation", new LiteralField("M2", "<br><br><h3>Below you can enter page names for automatic generation.</h3><p>One page name per line</p><p>First level pages can simply be typed on a line.</p><p>Children pages must start with a tilde ~ for each level of nesting.</p><h4>Example:</h4><p>Heading Page Name</p><p>~Child Page Name</p><p>~Child Page Name</p><p>~~Sub Child Page Name</p><p>Heading Page Name</p><p>~Child Page Name</p>")); $fields->addFieldToTab("Root.PageCreation", new TextAreaField("PageStructure", "Page Structure")); } return $fields; }
/** * Creates a GridField for pages and another one for files with different columns. * Grid fields have an export and a print button. * * @param string $itemType (i.e 'Pages' or 'Files') * * @return GridField */ public function getReportField($itemType = 'Pages') { $params = isset($_REQUEST['filters']) ? $_REQUEST['filters'] : array(); $items = $this->sourceRecords($params, null, null); $gridField = new GridFieldBasicContentReport('Report-' . $itemType, false, $items[$itemType]); $gridFieldConfig = GridFieldConfig::create()->addComponents(new GridFieldToolbarHeader(), new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator(), new GridFieldButtonRow('after'), $printButton = new GridFieldPrintButton('buttons-after-left'), $exportButton = new GridFieldExportButton('buttons-after-left')); $gridField->setConfig($gridFieldConfig); /* @var $columns GridFieldDataColumns */ $columns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); $exportFields = array(); $displayFields = array(); $fieldCasting = array(); $fieldFormatting = array(); $dataFields = array(); // Parse the column information foreach ($this->columns($itemType) as $source => $info) { if (is_string($info)) { $info = array('title' => $info); } if (isset($info['formatting'])) { $fieldFormatting[$source] = $info['formatting']; } if (isset($info['casting'])) { $fieldCasting[$source] = $info['casting']; } if (isset($info['link']) && $info['link']) { $fieldFormatting[$source] = function ($value, &$item) { if ($item instanceof Page) { return sprintf("<a href='%s'>%s</a>", Controller::join_links(singleton('CMSPageEditController')->Link('show'), $item->ID), $value); } return sprintf("<a href='%s'>%s</a>", Controller::join_links(singleton('AssetAdmin')->Link('EditForm'), 'field/File/item', $item->ID, 'edit'), $value); }; } // Set custom datasource if (isset($info['datasource'])) { $dataFields[$source] = $info['datasource']; } // Set field name for export $fieldTitle = isset($info['title']) ? $info['title'] : $source; // If not print-only, then add to display list if (empty($info['printonly'])) { $displayFields[$source] = $fieldTitle; } // Assume that all displayed fields are printed also $exportFields[$source] = $fieldTitle; } // Set custom evaluated columns $gridField->addDataFields($dataFields); // Set visible fields $columns->setDisplayFields($displayFields); $columns->setFieldCasting($fieldCasting); $columns->setFieldFormatting($fieldFormatting); // Get print columns, and merge with print-only columns $printExportColumns = $this->getPrintExportColumns($gridField, $itemType, $exportFields); $printButton->setPrintColumns($printExportColumns); $exportButton->setExportColumns($printExportColumns); return $gridField; }
public function getEditForm($id = null, $fields = null) { //If editing the shop settings get the first back and edit that basically... if ($this->modelClass == 'ShopConfig') { return $this->renderWith('ShopAdmin_ConfigEditForm'); } $list = $this->getList(); $buttonAfter = new GridFieldButtonRow('after'); $exportButton = new GridFieldExportButton('buttons-after-left'); $exportButton->setExportColumns($this->getExportFields()); $fieldConfig = GridFieldConfig_RecordEditor::create($this->stat('page_length'))->addComponent($buttonAfter)->addComponent($exportButton); if ($this->modelClass == 'Order' || $this->modelClass == 'Customer') { $fieldConfig->removeComponentsByType('GridFieldAddNewButton'); } $listField = new GridField($this->sanitiseClassName($this->modelClass), false, $list, $fieldConfig); // Validation if (singleton($this->modelClass)->hasMethod('getCMSValidator')) { $detailValidator = singleton($this->modelClass)->getCMSValidator(); $listField->getConfig()->getComponentByType('GridFieldDetailForm')->setValidator($detailValidator); } $form = new Form($this, 'EditForm', new FieldList($listField), new FieldList()); $form->addExtraClass('cms-edit-form cms-panel-padded center'); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); $form->setFormAction(Controller::join_links($this->Link($this->sanitiseClassName($this->modelClass)), 'EditForm')); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); $this->extend('updateEditForm', $form); return $form; }