function testThereIsNoPaginatorWhenOnlyOnePage() { // We set the itemsPerPage to an reasonably big number so as to avoid test broke from small changes on the fixture YML file $total = $this->list->count(); $this->gridField->getConfig()->getComponentByType("GridFieldPaginator")->setItemsPerPage($total); $fieldHolder = $this->gridField->FieldHolder(); $content = new CSSContentParser($fieldHolder); // Check that there is no paginator render into the footer $this->assertEquals(0, count($content->getBySelector('.datagrid-pagination'))); // Check that there is still 'View 1 - 4 of 4' part on the left of the paginator $this->assertEquals(1, count($content->getBySelector('.pagination-records-number'))); }
public function updateCMSFields(FieldList $fields) { // Payment Methods $payment_table = GridField::create('PaymentMethods', _t("CheckoutAdmin.PaymentMethods", "Payment Methods"), $this->owner->PaymentMethods(), GridFieldConfig::create()->addComponents(new GridFieldToolbarHeader(), new GridFieldAddNewButton('toolbar-header-right'), new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator(20), new GridFieldEditButton(), new GridFieldDeleteAction(), new GridFieldDetailForm())); // setup compressed payment options $payment_fields = ToggleCompositeField::create('PaymentSettings', _t("CheckoutAdmin.Payments", "Payment Settings"), array(TextField::create('PaymentNumberPrefix', _t("CheckoutAdmin.OrderPrefix", "Add prefix to order numbers"), null, 9)->setAttribute("placeholder", _t("CheckoutAdmin.OrderPrefixPlaceholder", "EG 'abc'")), TextAreaField::create('PaymentSuccessContent', _t("CheckoutAdmin.PaymentSuccessContent", "Payment successfull content"))->setRows(4)->setColumns(30)->addExtraClass('stacked'), TextAreaField::create('PaymentFailerContent', _t("CheckoutAdmin.PaymentFailerContent", "Payment failer content"))->setRows(4)->setColumns(30)->addExtraClass('stacked'), $payment_table)); // Add html description of how to edit contries $country_html = "<div class=\"field\">"; $country_html .= "<p>First select valid countries using the 2 character "; $country_html .= "shortcode (see http://fasteri.com/list/2/short-names-of-countries-and-iso-3166-codes).</p>"; $country_html .= "<p>You can add multiple countries seperating them with"; $country_html .= "a comma or use a '*' for all countries.</p>"; $country_html .= "</div>"; $country_html_field = LiteralField::create("CountryDescription", $country_html); // Deal with product features $postage_field = new GridField('PostageAreas', '', $this->owner->PostageAreas(), GridFieldConfig::create()->addComponents(new GridFieldButtonRow('before'), new GridFieldToolbarHeader(), new GridFieldTitleHeader(), new GridFieldEditableColumns(), new GridFieldDeleteAction(), new GridFieldAddNewInlineButton('toolbar-header-left'))); // Add country dropdown to inline editing $postage_field->getConfig()->getComponentByType('GridFieldEditableColumns')->setDisplayFields(array('Title' => array('title' => 'Title', 'field' => 'TextField'), 'Country' => array('title' => 'ISO 3166 codes', 'field' => 'TextField'), 'ZipCode' => array('title' => 'Zip/Post Codes', 'field' => 'TextField'), 'Calculation' => array('title' => 'Base unit', 'callback' => function ($record, $column, $grid) { return DropdownField::create($column, "Based on", singleton('PostageArea')->dbObject('Calculation')->enumValues())->setValue("Weight"); }), 'Unit' => array('title' => 'Unit (equals or above)', 'field' => 'NumericField'), 'Cost' => array('title' => 'Cost', 'field' => 'NumericField'), 'Tax' => array('title' => 'Tax (percentage)', 'field' => 'NumericField'))); // Setup compressed postage options $postage_fields = ToggleCompositeField::create('PostageFields', 'Postage Options', array($country_html_field, $postage_field)); // Setup compressed postage options $discount_fields = ToggleCompositeField::create('DiscountFields', 'Discounts', array(GridField::create('Discounts', '', $this->owner->Discounts(), GridFieldConfig_RecordEditor::create()))); // Add config sets $fields->addFieldToTab('Root.Checkout', $payment_fields); $fields->addFieldToTab('Root.Checkout', $postage_fields); $fields->addFieldToTab('Root.Checkout', $discount_fields); }
/** * Returns the input fields for this widget. * * @return FieldList * * @author Sebastian Diel <*****@*****.**> * @since 23.02.2016 */ public function getCMSFields() { $fields = SilvercartDataObject::getCMSFields($this, 'ExtraCssClasses', false); $slideImagesTable = new GridField('slideImages', $this->fieldLabel('slideImages'), $this->slideImages(), SilvercartGridFieldConfig_RelationEditor::create()); $slideImagesTable->getConfig()->removeComponentsByType('GridFieldAddNewButton'); $slideImagesTable->getConfig()->removeComponentsByType('GridFieldAddExistingAutocompleter'); $slideImagesTable->getConfig()->addComponent(new GridFieldDeleteAction()); $slideImagesUploadField = new SilvercartImageUploadField('UploadslideImages', $this->fieldLabel('AddImage')); $slideImagesUploadField->setFolderName('Uploads/slider-images'); $slideImagesUploadField->setRelationClassName('SilvercartImageSliderImage'); $fields->findOrMakeTab('Root.slideImages', $this->fieldLabel('slideImages')); $fields->addFieldToTab('Root.slideImages', $slideImagesUploadField); $fields->addFieldToTab('Root.slideImages', $slideImagesTable); $this->getCMSFieldsSliderTab($fields); return $fields; }
protected function setupGridField(GridField $gridfield, Config_ForClass $classConfig) { if (!$gridfield) { return; } $config = $gridfield->getConfig(); $class = $gridfield->getModelClass(); // More item per page $paginator = $config->getComponentByType('GridFieldPaginator'); $paginator->setItemsPerPage(50); // Bulk manage if ($classConfig->bulk_manage && class_exists('GridFieldBulkManager')) { $already = $config->getComponentByType('GridFieldBulkManager'); if (!$already) { $config->addComponent($bulkManager = new GridFieldBulkManager()); $bulkManager->removeBulkAction('unLink'); } } // Better export if ($classConfig->export_csv) { /* @var $export GridFieldExportButton */ $export = $config->getComponentByType('GridFieldExportButton'); $export->setExportColumns(ExcelImportExport::exportFieldsForClass($class)); } else { $config->removeComponentsByType('GridFieldExportButton'); } if ($classConfig->export_excel) { if ($class == 'Group') { $config->addComponent(new GridFieldButtonRow('after')); } $config->addComponent(new ExcelGridFieldExportButton('buttons-after-left')); } }
public function handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); if (!isset($value[__CLASS__]) || !is_array($value[__CLASS__])) { return; } /** @var GridFieldOrderableRows $sortable */ $sortable = $grid->getConfig()->getComponentByType('GridFieldOrderableRows'); $form = $this->getForm($grid, $record); foreach ($value[__CLASS__] as $id => $fields) { if (!is_numeric($id) || !is_array($fields)) { continue; } $item = $list->byID($id); if (!$item || !$item->canEdit()) { continue; } $extra = array(); $form->loadDataFrom($fields, Form::MERGE_CLEAR_MISSING); $form->saveInto($item); // Check if we are also sorting these records if ($sortable) { $sortField = $sortable->getSortField(); $item->setField($sortField, $fields[$sortField]); } if ($list instanceof ManyManyList) { $extra = array_intersect_key($form->getData(), (array) $list->getExtraFields()); } $item->write(); $list->add($item, $extra); } }
function updateCMSFields(FieldList $fields) { $fields->addFieldToTab('Root.MaxCarouselItems', $grid = new GridField('MaxCarouselItems', 'Carousel items', $this->owner->sortedMaxCarouselItems(), GridFieldConfig_RelationEditor::create(10))); if (class_exists("GridFieldSortableRows")) { $grid->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); } }
function getCMSFields() { $fields = parent::getCMSFields(); $pictures_per_page = $this->config()->get('picturesPerPage'); $conf = GridFieldConfig_RelationEditor::create($pictures_per_page); $conf->getComponentByType('GridFieldPaginator')->setItemsPerPage($pictures_per_page); $conf->addComponent(new GridFieldBulkUpload()); $conf->addComponent(new GridFieldSortableRows('Sort')); $imageFolder = $this->config()->get('imageFolder'); if ($this->config()->get('usePageURLSegmentAsSubfolder')) { $imageFolder = preg_replace("/^(.+?)\\/*\$/", '$1/', $imageFolder) . $this->URLSegment; } $conf->getComponentByType('GridFieldBulkUpload')->setUfSetup('setFolderName', $imageFolder); $gridField = new GridField('Pictures', 'Pictures', $this->SortedPictures(), $conf); $dataColumns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); $imageFieldMapping = $this->config()->get('galleryImageListFieldMapping'); foreach ($imageFieldMapping as $key => $value) { $imageFieldMapping[$key] = _t('GalleryPicture.' . $key, $value); } $dataColumns->setDisplayFields($imageFieldMapping); if ($this->ID > 0) { $fields->addFieldsToTab('Root.' . _t('GalleryPage.Photos', 'Photos'), array($gridField)); } return $fields; }
protected function saveAllRecords(\GridField $grid, $arguments, $data) { if (isset($data[$grid->Name])) { $currValue = $grid->Value(); $grid->setValue($data[$grid->Name]); $model = singleton($grid->List->dataClass()); foreach ($grid->getConfig()->getComponents() as $component) { if ($component instanceof \GridField_SaveHandler) { $component->handleSave($grid, $model); } } if ($this->publish) { // Only use the viewable list items, since bulk publishing can take a toll on the system $list = ($paginator = $grid->getConfig()->getComponentByType('GridFieldPaginator')) ? $paginator->getManipulatedData($grid, $grid->List) : $grid->List; $list->each(function ($item) { if ($item->hasExtension('Versioned')) { $item->writeToStage('Stage'); $item->publish('Stage', 'Live'); } }); } if ($model->exists()) { $model->delete(); $model->destroy(); } $grid->setValue($currValue); if (\Controller::curr() && ($response = \Controller::curr()->Response)) { if (!$this->completeMessage) { $this->completeMessage = _t('GridField.DONE', 'Done.'); } $response->addHeader('X-Status', rawurlencode($this->completeMessage)); } } }
/** * @covers GridFieldDataColumns::getFieldFormatting * @covers GridFieldDataColumns::setFieldFormatting */ public function testFieldFormatting() { $obj = new GridField('testfield', 'testfield'); $columns = $obj->getConfig()->getComponentByType('GridFieldDataColumns'); $this->assertEquals(array(), $columns->getFieldFormatting()); $columns->setFieldFormatting(array("myFieldName" => '<a href=\"custom-admin/$ID\">$ID</a>')); $this->assertEquals(array("myFieldName" => '<a href=\"custom-admin/$ID\">$ID</a>'), $columns->getFieldFormatting()); }
function updateCMSFields(FieldList $fields) { $fields->addFieldToTab('Root.SkitterSlides', $grid = new GridField('MaxSkitterSlides', 'Skitter slides', $this->owner->MaxSkitterSlides(), GridFieldConfig_RelationEditor::create(10))); if (class_exists("GridFieldSortableRows")) { $grid->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); } }
public function testGetManipulatedData() { $list = new DataList('GridFieldSortableHeaderTest_Team'); $config = new GridFieldConfig_RecordEditor(); $gridField = new GridField('testfield', 'testfield', $list, $config); // Test normal sorting $state = $gridField->State->GridFieldSortableHeader; $state->SortColumn = 'City'; $state->SortDirection = 'asc'; $compontent = $gridField->getConfig()->getComponentByType('GridFieldSortableHeader'); $listA = $compontent->getManipulatedData($gridField, $list); $state->SortDirection = 'desc'; $listB = $compontent->getManipulatedData($gridField, $list); $this->assertEquals(array('Auckland', 'Cologne', 'Melbourne', 'Wellington'), $listA->column('City')); $this->assertEquals(array('Wellington', 'Melbourne', 'Cologne', 'Auckland'), $listB->column('City')); // Test one relation 'deep' $state->SortColumn = 'Cheerleader.Name'; $state->SortDirection = 'asc'; $relationListA = $compontent->getManipulatedData($gridField, $list); $state->SortDirection = 'desc'; $relationListB = $compontent->getManipulatedData($gridField, $list); $this->assertEquals(array('Wellington', 'Melbourne', 'Cologne', 'Auckland'), $relationListA->column('City')); $this->assertEquals(array('Auckland', 'Cologne', 'Melbourne', 'Wellington'), $relationListB->column('City')); // Test two relations 'deep' $state->SortColumn = 'Cheerleader.Hat.Colour'; $state->SortDirection = 'asc'; $relationListC = $compontent->getManipulatedData($gridField, $list); $state->SortDirection = 'desc'; $relationListD = $compontent->getManipulatedData($gridField, $list); $this->assertEquals(array('Cologne', 'Auckland', 'Wellington', 'Melbourne'), $relationListC->column('City')); $this->assertEquals(array('Melbourne', 'Wellington', 'Auckland', 'Cologne'), $relationListD->column('City')); }
/** * Converts a GridField into a read only one. * * @param GridField $gridField GridField to convert * * @return void * * @author Sebastian Diel <*****@*****.**> * @since 08.03.2013 */ public static function convertToReadonly(GridField $gridField) { $gridFieldConfig = $gridField->getConfig(); $gridFieldConfig->removeComponentsByType('GridFieldEditButton'); $gridFieldConfig->removeComponentsByType('GridFieldDeleteAction'); $gridFieldConfig->removeComponentsByType('GridFieldAddNewButton'); $gridFieldConfig->removeComponentsByType('GridFieldAddExistingAutocompleter'); }
/** * Retrieves an instance of a GridFieldPaginator attached to the same control * @param GridField $gridField The parent gridfield * @return GridFieldPaginator The attached GridFieldPaginator, if found. * @throws LogicException */ protected function getPaginator($gridField) { $paginator = $gridField->getConfig()->getComponentByType('GridFieldPaginator'); if (!$paginator && Config::inst()->get('GridFieldPageCount', 'require_paginator')) { throw new LogicException(get_class($this) . " relies on a GridFieldPaginator to be added " . "to the same GridField, but none are present."); } return $paginator; }
public function getManipulatedData(GridField $grid, SS_List $data) { $config = $grid->getConfig(); $config->removeComponentsByType('GridFieldDeleteAction'); $config->removeComponentsByType('GridFieldEditButton'); $class = $data->dataClass; return $class::get(); }
/** * @covers GridField::__construct * @covers GridField::setComponents */ public function testGridFieldSetCustomConfig() { $config = GridFieldConfig::create(); $config->addComponent(new GridFieldSortableHeader()); $config->addComponent(new GridFieldDataColumns()); $obj = new GridField('testfield', 'testfield', ArrayList::create(array()), $config); $expectedComponents = new ArrayList(array(0 => new GridFieldSortableHeader(), 1 => new GridFieldDataColumns(), 2 => new GridState_Component())); $this->assertEquals($expectedComponents, $obj->getConfig()->getComponents(), 'Testing default Config'); }
public function testAppendToTopAutoSort() { if (Member::currentUser()) { Member::currentUser()->logOut(); } $this->gridField->getConfig()->getComponentByType('GridFieldSortableRows')->setAppendToTop(true); $this->assertEquals(0, $this->list->last()->SortOrder, 'Auto sort should not have run'); $stateID = 'testGridStateActionField'; Session::set($stateID, array('grid' => '', 'actionName' => 'sortableRowsToggle', 'args' => array('GridFieldSortableRows' => array('sortableToggle' => true)))); $request = new SS_HTTPRequest('POST', 'url', array(), array('action_gridFieldAlterAction?StateID=' . $stateID => true)); $this->gridField->gridFieldAlterAction(array('StateID' => $stateID), $this->form, $request); //Insure sort ran $this->assertEquals(3, $this->list->last()->SortOrder, 'Auto sort should have run'); //Check for duplicates (there shouldn't be any) $count = $this->list->Count(); $indexes = count(array_unique($this->list->column('SortOrder'))); $this->assertEquals(0, $count - $indexes, 'Duplicate indexes detected'); }
/** * adds a Files Tab to the page with a GridField * * @return FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); $silvercartFileField = new GridField('SilvercartFiles', $this->fieldLabel('SilvercartFiles'), $this->SilvercartFiles(), SilvercartGridFieldConfig_RelationEditor::create()); $silvercartFileField->getConfig()->removeComponentsByType('GridFieldAddExistingAutocompleter'); $fields->findOrMakeTab('Root.SilvercartFiles', $this->fieldLabel('SilvercartFiles')); $fields->addFieldToTab('Root.SilvercartFiles', $silvercartFileField); return $fields; }
public function updateCMSFields(FieldList $fields) { $config = GridFieldConfig_RelationEditor::create(10); $settings = new GridField('SiteBannerConfigurationSettings', 'SiteBannerConfigurationSetting', SiteBannerConfigurationSetting::get(), $config); $settings->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('SiteBannerMessage' => 'Message', 'SiteBannerRank' => 'Rank', 'Language' => 'Language')); $fields->addFieldToTab("Root.SiteBanner", new LiteralField('SiteBanner', '<h2>Site Banner</h2><p>The site banner displays at the top of all pages.</p>')); $fields->addFieldToTab("Root.SiteBanner", new CheckboxField('DisplaySiteBanner', 'Display The Site Banner')); $fields->addFieldToTab("Root.SiteBanner", $settings); }
function getCMSFields() { $fields = parent::getCMSFields(); //graphics $graphics = new GridField('Graphics', 'Graphics', $this->Graphics(), GridFieldConfig_RecordEditor::create(10)); $graphics->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Name' => 'Name', 'SmallPreview' => 'Thumbnail')); $graphics->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $graphics_title_editor = new HTMLEditorField('GraphicsNotes', 'Graphics Subtitle', 15, 10); $fields->addFieldsToTab('Root.Graphics', array($graphics_title_editor, $graphics)); // presentations $collateral_presentations = new GridField('Presentations', 'Presentations', $this->Presentations(), GridFieldConfig_RecordEditor::create(10)); $collateral_presentations->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Name' => 'Name', 'FileName' => 'File Name')); $collateral_presentations->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab('Root.Collateral+Presentations', array($collateral_presentations)); // event materials $event_materials = new GridField('Materials', 'Materials', $this->Materials(), GridFieldConfig_RecordEditor::create(10)); $event_materials->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Name' => 'Name', 'FileName' => 'File Name')); $event_materials->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab('Root.Events Materials', array($event_materials)); //case studies $case_study = new GridField('CaseStudies', 'CaseStudies', $this->CaseStudies(), GridFieldConfig_RecordEditor::create(10)); $case_study->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Name' => 'Name', 'SmallPreview' => 'Preview', 'Link' => 'Link')); $case_study->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab('Root.Case Studies', array($case_study)); //Announcements $announcements = new GridField('Announcements', 'Announcements', $this->Announcements(), GridFieldConfig_RecordEditor::create(10)); $announcements->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('Content' => 'Content')); $announcements->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab('Root.Announcements', array(new TextField('AnnouncementsNotes', 'Announcements Title'), $announcements)); //section links $section_links = new GridField('SectionLinks', 'SectionLinks', $this->SectionLinks(), GridFieldConfig_RecordEditor::create(10)); $section_links->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('FileName' => 'Thumbnail File Name', 'SmallPreview' => 'Preview', 'Link' => 'Link')); $section_links->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab('Root.Section Links', array($section_links)); //videos $youtube_vids = new GridField('YouTubeVideos', 'YouTubeVideos', $this->YouTubeVideos(), GridFieldConfig_RecordEditor::create(10)); $youtube_vids->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('FileName' => 'Thumbnail File Name', 'SmallPreview' => 'Preview', 'Url' => 'Url')); $youtube_vids->getConfig()->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab('Root.Section YouTube Videos ', array($youtube_vids)); //remove main content $fields->removeFieldFromTab("Root.Main", "Content"); return $fields; }
/** * @param FieldSet $fields */ public function updateCMSFields(FieldList $fields) { if ($this->owner instanceof Folder || !$this->owner->ID) { return; } $fields->addFieldToTab('Root.Main', new ReadonlyField('VersionNumber', _t('VersionedFiles.CURRENTVERSION', 'Current Version')), 'Created'); // History $gridFieldConfig = GridFieldConfig::create()->addComponents(new GridFieldToolbarHeader(), new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator(15), new GridFieldViewButton(), new GridFieldDetailForm()); $gridField = new GridField('Versions', 'Versions', $this->owner->Versions(), $gridFieldConfig); $columns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); $columns->setDisplayFields(array('VersionNumber' => _t('VersionedFiles.VERSIONNUMBER', 'Version Number'), 'Creator.Name' => _t('VersionedFiles.CREATOR', 'Creator'), 'Created' => _t('VersionedFiles.DATE', 'Date'), 'Link' => _t('VersionedFiles.LINK', 'Link'), 'IsCurrent' => _t('VersionedFiles.ISCURRENT', 'Is Current'))); $columns->setFieldCasting(array('Created' => 'Date->Nice')); $columns->setFieldFormatting(array('Link' => '<a href=\\"$URL\\" target=\\"_blank\\">$Name</a>', 'IsCurrent' => '{$IsCurrent()->Nice()}', 'Created' => '{$obj(\'Created\')->Nice()}')); // history $versions = $this->owner->Versions(sprintf('"VersionNumber" <> %d', $this->getVersionNumber())); if ($versions && $versions->Count() && $this->owner->canEdit()) { $fields->addFieldToTab('Root.History', new HeaderField('RollbackHeader', _t('VersionedFiles.ROLLBACKPREVVERSION', 'Rollback to a Previous Version'))); $fields->addFieldToTab('Root.History', $versionDropdown = new DropdownField('PreviousVersion', '', $versions->map('VersionNumber'))); $versionDropdown->setEmptyString(_t('VersionedFiles.SELECTAVERSION', '(Select a Version)')); } $fields->addFieldToTab('Root.History', $gridField); // Replace if (!$this->owner->config()->get('disableReplaceTab')) { if (!$this->owner->canEdit()) { return; } $folder = $this->owner->Parent(); $uploadField = new VersionedFileUploadField('ReplacementFile', ''); $uploadField->setConfig('previewMaxWidth', 40); $uploadField->setConfig('previewMaxHeight', 30); $uploadField->setConfig('allowedMaxFileNumber', 1); $uploadField->addExtraClass('ss-assetuploadfield'); $uploadField->removeExtraClass('ss-uploadfield'); $uploadField->setTemplate('VersionedFileUploadField'); $uploadField->currentVersionFile = $this->owner; $uploadField->relationAutoSetting = false; $uploadField->setOverwriteWarning(false); if ($folder->exists() && $folder->getFilename()) { $path = preg_replace('/^' . ASSETS_DIR . '\\//', '', $folder->getFilename()); $uploadField->setFolderName($path); } else { $uploadField->setFolderName(ASSETS_DIR); } // set the valid extensions to only that of the original file $ext = strtolower($this->owner->Extension); $uploadField->getValidator()->setAllowedExtensions(array($ext)); // css / js requirements for asset admin style file uploader Requirements::javascript(FRAMEWORK_DIR . '/javascript/AssetUploadField.js'); Requirements::css(FRAMEWORK_DIR . '/css/AssetUploadField.css'); $fields->addFieldToTab('Root.Replace', $uploadField); $sameTypeMessage = sprintf(_t('VersionedFiles.SAMETYPEMESSAGE', 'You may only replace this file with another of the same type: .%s'), $this->owner->getExtension()); $fields->addFieldToTab('Root.Replace', new LiteralField('SameTypeMessage', "<p>{$sameTypeMessage}</p>")); } return; }
/** * * @return \FieldList */ public function getCMSFields() { $fieldList = new FieldList(); $fieldList->push(new ReadonlyField('Name', 'Name', $this->Name)); $fieldList->push(new ReadonlyField('Size', 'Size', $this->Size)); $jobs = new GridField('Jobs', 'Jobs', $this->getJobs()); $dataComponent = $jobs->getConfig()->getComponentByType('GridFieldDataColumns'); $dataComponent->setDisplayFields(array('Name' => 'Name', 'Value' => 'Value')); $fieldList->push($jobs); return $fieldList; }
public function getCMSFields() { $fields = parent::getCMSFields(); $displayFieldsList = array("ZoneID" => "Zone", "WeightMin" => "WeightMin", "WeightMax" => "WeightMax", "VolumeMin" => "VolumeMin", "VolumeMax" => "VolumeMax", "ValueMin" => "ValueMin", "ValueMax" => "ValueMax", "QuantityMin" => "QuantityMin", "QuantityMax" => "QuantityMax", "Rate" => "Rate"); $fields->fieldByName('Root')->removeByName("Rates"); if ($this->isInDB()) { $gridField = new GridField("Rates", "ZonedShippingRate", $this->Rates(), new GridFieldConfig_RelationEditor()); $gridField->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields($displayFieldsList); $fields->addFieldToTab("Root.Main", $gridField); } return $fields; }
public function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab('Root.Details', new ReadonlyField('CategoryList', 'Categories', implode(', ', $this->Categories->map('Name', 'Name')))); $fields->addFieldsToTab('Root.Users', array(new ReadonlyField('UserID', 'User ID', $this->UserID), new ReadonlyField('Author', null, $this->Author), new ReadonlyField('AuthorID', 'Author ID', $this->AuthorID), new ReadonlyField('AuthorName', 'Author Name', $this->AuthorName))); $fields->addFieldsToTab('Root.Metadata', array(new ReadonlyField('Slug', null, $this->Slug), new ReadonlyField('Link', null, $this->Link), new ReadonlyField('Permalink', null, $this->Permalink))); $fields->addFieldsToTab('Root.Behaviour', array(new ReadonlyField('ParentID', 'Parent ID', $this->ParentID), new ReadonlyField('ParentTitle', 'Parent Title', $this->ParentTitle), new ReadonlyField('AllowComments', 'Allow Comments', $this->AllowComments), new ReadonlyField('AllowPings', 'Allow Pings', $this->AllowPings), new ReadonlyField('Password', null, $this->Password), new ReadonlyField('Template', null, $this->Template), new ReadonlyField('Order', null, $this->Order))); $fields->addFieldToTab('Root.CustomFields', $custom = new GridField('CustomFields', null, $this->CustomFields, new GridFieldConfig_RecordViewer())); $config = $custom->getConfig(); $config->removeComponentsByType('GridFieldFilterHeader'); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('ID' => 'ID', 'Key' => 'Key', 'Value' => 'Value')); return $fields; }
public function updateCMSFields(FieldList $fields) { //Get all data changes relating to this page filter them by publish/unpublish $dataChanges = DataChangeRecord::get()->filter('ClassID', $this->owner->ID)->exclude('ChangeType', 'Change'); //create a gridfield out of them $gridFieldConfig = GridFieldConfig_RecordViewer::create(); $publishedGrid = new GridField('PublishStates', 'Published States', $dataChanges, $gridFieldConfig); $dataColumns = $publishedGrid->getConfig()->getComponentByType('GridFieldDataColumns'); $dataColumns->setDisplayFields(array('ChangeType' => 'Change Type', 'ObjectTitle' => 'Page Title', 'ChangedBy.Title' => 'User', 'Created' => 'Modification Date')); //linking through to the datachanges modeladmin $fields->addFieldsToTab('Root.PublishedState', $publishedGrid); return $fields; }
/** * Gets fields used in the cms * @return {FieldList} Fields to be used */ public function getCMSFields() { $fields = new FieldList(new TabSet('Root', new Tab('Main', _t('SnippetPackage.MAIN', '_Main'), new TextField('Title', _t('SnippetPackage.TITLE', '_Title'), null, 300))), new HiddenField('ID', 'ID')); if ($this->ID == 0) { $fields->addFieldToTab('Root.Main', new LabelField('Snippets', _t('SnippetPackage.SNIPPETS_AFTER_FIRST_SAVE', '_Snippets can be added after saving for the first time'))); } else { $packageGrid = new GridField('Snippets', _t('SnippetPackage.PACKAGE_SNIPPETS', '_Package Snippets'), $this->Snippets(), GridFieldConfig_RelationEditor::create(10)); $packageGrid->getConfig()->removeComponentsByType('GridFieldEditButton')->removeComponentsByType('GridFieldAddNewButton')->addComponent(new PackageViewButton())->getComponentByType('GridFieldAddExistingAutocompleter')->setSearchFields(array('Title'))->setplaceholderText(_t('SnippetPackage.FIND_SNIPPETS_BY_TITLE', '_Find Snippets by Title')); $fields->addFieldToTab('Root.Main', new LiteralField('SnippetAddWarning', '<p class="message warning">' . _t('SnippetPackage.ADD_WARNING', '_Warning if you link a snippet that is already in another package it will be moved to this package') . '</p>')); $fields->addFieldToTab('Root.Main', $packageGrid); } return $fields; }
/** * @param int|null $id * @param array|null $fields * @return \Form */ public function getEditForm($id = null, $fields = null) { $queues = $this->getQueues(); $gridField = new GridField('Queues', 'Queues', $queues, new GridFieldConfig_RecordEditor()); $dataComponent = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); $dataComponent->setDisplayFields(array('Name' => 'Name', 'Size' => 'Size')); $form = new Form($this, 'EditForm', new FieldList($gridField), new FieldList()); $form->addExtraClass('cms-edit-form cms-panel-padded center'); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); return $form; }
/** * Handles adding a new instance of the grid's model class. * * @param GridField $grid * @param SS_HTTPRequest $request * @throws Exception * @return \GridFieldAddNewMultiClassHandler */ public function handleAdd($grid, $request) { $component = $grid->getConfig()->getComponentByType('GridFieldDetailForm'); if (!$component) { throw new Exception('The ReplicantAddNewButton component requires a detail form component in the grid.'); } $controller = $grid->getForm()->getController(); $className = $grid->getModelClass(); $obj = $className::create(); $handler = new ReplicantAddNewButtonHandler($grid, $component, $obj, $controller); $handler->setTemplate($component->getTemplate()); return $handler; }
public function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab('Root.Details', new ReadonlyField('CategoryList', 'Categories', implode(', ', $this->Categories->map('Name', 'Name')))); $fields->addFieldsToTab('Root.Users', array(new ReadonlyField('UserID', 'User ID', $this->UserID), new ReadonlyField('AuthorID', 'Author ID', $this->AuthorID), new ReadonlyField('AuthorName', 'Author Name', $this->AuthorName))); $fields->addFieldsToTab('Root.Metadata', array(new ReadonlyField('Keywords', null, $this->Keywords), new ReadonlyField('Slug', null, $this->Slug), new ReadonlyField('Link', null, $this->Link), new ReadonlyField('Permalink', null, $this->Permalink))); $fields->addFieldsToTab('Root.Behaviour', array(new ReadonlyField('AllowComments', 'Allow Comments', $this->AllowComments), new ReadonlyField('AllowPings', 'Allow Pings', $this->AllowPings), new ReadonlyField('Password', null, $this->Password), new ReadonlyField('PostFormat', 'Post Format', $this->PostFormat), new ReadonlyField('Sticky', null, $this->Sticky))); $fields->addFieldToTab('Root.CustomFields', $custom = new GridField('CustomFields', null, $this->CustomFields, new GridFieldConfig_RecordViewer())); $config = $custom->getConfig(); $config->removeComponentsByType('GridFieldFilterHeader'); $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array('ID' => 'ID', 'Key' => 'Key', 'Value' => 'Value')); if (!class_exists('BlogEntry')) { $fields->addFieldToTab('Root.Import', new LiteralField('RequiresBlogImport', '<p>The Wordpress connector requires the blog module to import posts.</p>')); } return $fields; }
public function updateCMSFields(FieldList $fields) { $fields->removeByName('ContactEmail'); $fields->removeByName('ContactPhone'); // Ecommerce Fields // Compress default commerce settings $contact_fields = ToggleCompositeField::create('ContactDetails', 'Contact Details', array(TextField::create('ContactEmail', 'Email Address'), TextField::create('ContactPhone', 'Phone Number')))->setHeadingLevel(4); // Compress default commerce settings $settings_fields = ToggleCompositeField::create('CommerceSettings', 'Default Settings', array(TextField::create('OrderPrefix', 'Short code that can appear at the start of order numbers', null, 9), DropdownField::create('CurrencyID', 'Currency to use', CommerceCurrency::get()->map(), $this->owner->CurrencyID)->setEmptyString('Please Select'), DropdownField::create('WeightID', 'Weight to use', ProductWeight::get()->map(), $this->owner->WeightID)->setEmptyString('Please Select'), UploadField::create('NoProductImage', 'Overwrite default "image unavailable" image')))->setHeadingLevel(4); // Compress shopping cart settings $cart_fields = ToggleCompositeField::create('CartProcess', 'Cart and Checkout Content', array(HtmlEditorField::create('CartCopy', 'Shopping cart')->setRows(15)->addExtraClass('stacked'), TextAreaField::create('SuccessCopy', 'Order success page')->setRows(4)->setColumns(30)->addExtraClass('stacked'), TextAreaField::create('FailerCopy', 'Order failer page')->setRows(4)->setColumns(30)->addExtraClass('stacked')))->setHeadingLevel(4); // Compress email alerts $email_fields = ToggleCompositeField::create('EmailAlerts', 'Email Alerts', array(TextField::create('EmailFromAddress', 'Send commerce notifications from?'), LiteralField::create('OrderPlacedHeader', '<div class="field"><h4>When an order is placed</h4></div>'), DropdownField::create('SendPaidEmail', 'Send emails to', $this->owner->dbObject('SendPaidEmail')->enumValues()), TextField::create('PaidEmailAddress', 'Vendor address'), LiteralField::create('OrderFailedHeader', '<div class="field"><h4>When an order fails</h4></div>'), DropdownField::create('SendFailedEmail', 'Send emails to', $this->owner->dbObject('SendPaidEmail')->enumValues()), TextField::create('FailedEmailAddress', 'Vendor address'), LiteralField::create('OrderProcessingHeader', '<div class="field"><h4>When an order is marked as processing</h4></div>'), DropdownField::create('SendProcessingEmail', 'Send emails to', $this->owner->dbObject('SendProcessingEmail')->enumValues()), TextField::create('ProcessingEmailAddress', 'Vendor address'), LiteralField::create('OrderPlacedHeader', '<div class="field"><h4>When an order is marked as dispatched</h4></div>'), DropdownField::create('SendDispatchedEmail', 'Send emails to', $this->owner->dbObject('SendDispatchedEmail')->enumValues()), TextField::create('DispatchedEmailAddress', 'Vendor address'), LiteralField::create('FooterContent', '<div class="field"><h4>Footer Content</h4></div>'), TextareaField::create('VendorEmailFooter', 'Add custom content to the footer of vendor emails?')))->setHeadingLevel(4); // Add html description of how to edit contries $country_html = "<div class=\"field\">"; $country_html .= "<p>First select valid countries using the 2 character "; $country_html .= "shortcode (see http://fasteri.com/list/2/short-names-of-countries-and-iso-3166-codes).</p>"; $country_html .= "<p>You can add multiple countries seperating them with"; $country_html .= "a comma or use a '*' for all countries.</p>"; $country_html .= "</div>"; $country_html_field = LiteralField::create("CountryDescription", $country_html); // Deal with product features $postage_field = new GridField('PostageAreas', '', $this->owner->PostageAreas(), GridFieldConfig::create()->addComponents(new GridFieldButtonRow('before'), new GridFieldToolbarHeader(), new GridFieldTitleHeader(), new GridFieldEditableColumns(), new GridFieldDeleteAction(), new GridFieldAddNewInlineButton('toolbar-header-left'))); // Add country dropdown to inline editing $postage_field->getConfig()->getComponentByType('GridFieldEditableColumns')->setDisplayFields(array('Title' => array('title' => 'Title', 'field' => 'TextField'), 'Country' => array('title' => 'ISO 3166 codes', 'field' => 'TextField'), 'ZipCode' => array('title' => 'Zip/Post Codes', 'field' => 'TextField'), 'Calculation' => array('title' => 'Base unit', 'callback' => function ($record, $column, $grid) { return DropdownField::create($column, "Based on", singleton('PostageArea')->dbObject('Calculation')->enumValues())->setValue("Weight"); }), 'Unit' => array('title' => 'Unit (equals or above)', 'field' => 'NumericField'), 'Cost' => array('title' => 'Cost', 'field' => 'NumericField'))); // Setup compressed postage options $postage_fields = ToggleCompositeField::create('PostageFields', 'Postage Options', array($country_html_field, $postage_field)); // Setup compressed postage options $discounts_fields = ToggleCompositeField::create('DiscountFields', 'Discounts', array(GridField::create('Discounts', '', $this->owner->Discounts(), GridFieldConfig_RecordEditor::create()))); // Payment Methods $payment_table = GridField::create('PaymentMethods', 'CommercePaymentMethod', $this->owner->PaymentMethods(), GridFieldConfig::create()->addComponents(new GridFieldToolbarHeader(), new GridFieldAddNewButton('toolbar-header-right'), new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator(20), new GridFieldEditButton(), new GridFieldDeleteAction(), new GridFieldDetailForm())); // setup compressed payment options $payment_fields = ToggleCompositeField::create('PaymentFields', 'Payment Options', array($payment_table)); // Compress tax fields $tax_fields = ToggleCompositeField::create('TaxDetails', 'Tax', array(NumericField::create('TaxRate'), TextField::create("TaxName", "Name of your tax (EG 'VAT')"), CheckboxField::create('TaxPriceInclude', 'Show price including tax?')))->setHeadingLevel(4); // Add config sets $fields->addFieldToTab('Root.Commerce', $contact_fields); $fields->addFieldToTab('Root.Commerce', $settings_fields); $fields->addFieldToTab('Root.Commerce', $cart_fields); $fields->addFieldToTab('Root.Commerce', $email_fields); $fields->addFieldToTab('Root.Commerce', $postage_fields); $fields->addFieldToTab('Root.Commerce', $discounts_fields); $fields->addFieldToTab('Root.Commerce', $payment_fields); $fields->addFieldToTab('Root.Commerce', $tax_fields); }
/** * Generate export fields for EXCEL. * * @param GridField $gridField * @return array */ public function generateExportFileData($gridField) { $excelColumns = $this->exportColumns ? $this->exportColumns : singleton($gridField->getModelClass())->summaryFields(); $objPHPExcel = new \PHPExcel\Spreadsheet(); $worksheet = $objPHPExcel->getActiveSheet()->setTitle($gridField->getModelClass()); $col = 'A'; foreach ($excelColumns as $columnSource => $columnHeader) { $heading = !is_string($columnHeader) && is_callable($columnHeader) ? $columnSource : $columnHeader; $worksheet->setCellValue($col . '1', $heading); $col++; } $worksheet->freezePane('A2'); $items = $gridField->getManipulatedList(); // @todo should GridFieldComponents change behaviour based on whether others are available in the config? foreach ($gridField->getConfig()->getComponents() as $component) { if ($component instanceof GridFieldFilterHeader || $component instanceof GridFieldSortableHeader) { $items = $component->getManipulatedData($gridField, $items); } } $row = 2; foreach ($items->limit(null) as $item) { $columnData = array(); $col = 'A'; foreach ($excelColumns as $columnSource => $columnHeader) { if (!is_string($columnHeader) && is_callable($columnHeader)) { if ($item->hasMethod($columnSource)) { $relObj = $item->{$columnSource}(); } else { $relObj = $item->relObject($columnSource); } $value = $columnHeader($relObj); } else { $value = $gridField->getDataFieldValue($item, $columnSource); } $worksheet->getCell($col . $row)->setValueExplicit($value, PHPExcel\Cell\DataType::TYPE_STRING); $col++; } $row++; $item->destroy(); } $writer = PHPExcel\IOFactory::createWriter($objPHPExcel, 'Excel2007'); ob_start(); $writer->save('php://output'); $data = ob_get_clean(); return $data; }