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);
         }
     }
 }
Esempio n. 9
0
 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;
    }
Esempio n. 16
0
    /**
     * @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;
 }
Esempio n. 19
0
 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;
 }