Ejemplo n.º 1
0
 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));
         }
     }
 }
Ejemplo n.º 9
0
	/**
	 * @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();
 }
Ejemplo n.º 15
0
 /**
  * @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;
 }
Ejemplo n.º 18
0
 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);
 }
Ejemplo n.º 19
0
 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;
 }
Ejemplo n.º 21
0
 /**
  *
  * @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;
 }