/**
  * Gets the form fields as defined through the metadata
  * on {@link $obj} and the custom parameters passed to FormScaffolder.
  * Depending on those parameters, the fields can be used in ajax-context,
  * contain {@link TabSet}s etc.
  * 
  * Uses SilvercartGridFieldConfig_RelationEditor and 
  * SilvercartGridFieldConfig_ExclusiveRelationEditor instead of
  * GridFieldConfig_RelationEditor.
  * 
  * @return FieldList
  */
 public function getFieldList()
 {
     $fields = new FieldList();
     $excludeFromScaffolding = array();
     if ($this->obj->hasMethod('excludeFromScaffolding')) {
         $excludeFromScaffolding = $this->obj->excludeFromScaffolding();
     }
     // tabbed or untabbed
     if ($this->tabbed) {
         $fields->push(new TabSet("Root", $mainTab = new Tab("Main")));
         $mainTab->setTitle(_t('SiteTree.TABMAIN', "Main"));
     }
     // add database fields
     foreach ($this->obj->db() as $fieldName => $fieldType) {
         if (in_array($fieldName, $excludeFromScaffolding) || $this->restrictFields && !in_array($fieldName, $this->restrictFields)) {
             continue;
         }
         // @todo Pass localized title
         if ($this->fieldClasses && isset($this->fieldClasses[$fieldName])) {
             $fieldClass = $this->fieldClasses[$fieldName];
             $fieldObject = new $fieldClass($fieldName);
         } else {
             $fieldObject = $this->obj->dbObject($fieldName)->scaffoldFormField(null, $this->getParamsArray());
         }
         $fieldObject->setTitle($this->obj->fieldLabel($fieldName));
         if ($this->tabbed) {
             $fields->addFieldToTab("Root.Main", $fieldObject);
         } else {
             $fields->push($fieldObject);
         }
     }
     // add has_one relation fields
     if ($this->obj->has_one()) {
         foreach ($this->obj->has_one() as $relationship => $component) {
             if (in_array($relationship, $excludeFromScaffolding) || $this->restrictFields && !in_array($relationship, $this->restrictFields)) {
                 continue;
             }
             $fieldName = "{$relationship}ID";
             if ($this->fieldClasses && isset($this->fieldClasses[$fieldName])) {
                 $fieldClass = $this->fieldClasses[$fieldName];
                 $hasOneField = new $fieldClass($fieldName);
             } else {
                 $hasOneField = $this->obj->dbObject($fieldName)->scaffoldFormField(null, $this->getParamsArray());
             }
             $hasOneField->setTitle($this->obj->fieldLabel($relationship));
             if ($this->tabbed) {
                 $fields->addFieldToTab("Root.Main", $hasOneField);
             } else {
                 $fields->push($hasOneField);
             }
         }
     }
     // only add relational fields if an ID is present
     if ($this->obj->ID) {
         // add has_many relation fields
         if ($this->obj->has_many() && ($this->includeRelations === true || isset($this->includeRelations['has_many']))) {
             foreach ($this->obj->has_many() as $relationship => $component) {
                 if (in_array($relationship, $excludeFromScaffolding)) {
                     continue;
                 }
                 if ($this->tabbed) {
                     $relationTab = $fields->findOrMakeTab("Root.{$relationship}", $this->obj->fieldLabel($relationship));
                 }
                 $fieldClass = isset($this->fieldClasses[$relationship]) ? $this->fieldClasses[$relationship] : 'GridField';
                 if (singleton($component) instanceof SilvercartModelAdmin_ReadonlyInterface) {
                     $config = SilvercartGridFieldConfig_Readonly::create();
                 } elseif (singleton($component) instanceof SilvercartModelAdmin_ExclusiveRelationInterface || $this->obj->has_extension($this->obj->{$relationship}()->dataClass(), 'SilvercartLanguageDecorator')) {
                     $config = SilvercartGridFieldConfig_ExclusiveRelationEditor::create();
                 } else {
                     $config = SilvercartGridFieldConfig_RelationEditor::create();
                 }
                 $grid = Object::create($fieldClass, $relationship, $this->obj->fieldLabel($relationship), $this->obj->{$relationship}(), $config);
                 if ($this->tabbed) {
                     $fields->addFieldToTab("Root.{$relationship}", $grid);
                 } else {
                     $fields->push($grid);
                 }
             }
         }
         if ($this->obj->many_many() && ($this->includeRelations === true || isset($this->includeRelations['many_many']))) {
             foreach ($this->obj->many_many() as $relationship => $component) {
                 if (in_array($relationship, $excludeFromScaffolding)) {
                     continue;
                 }
                 if ($this->tabbed) {
                     $relationTab = $fields->findOrMakeTab("Root.{$relationship}", $this->obj->fieldLabel($relationship));
                 }
                 $fieldClass = isset($this->fieldClasses[$relationship]) ? $this->fieldClasses[$relationship] : 'GridField';
                 $grid = Object::create($fieldClass, $relationship, $this->obj->fieldLabel($relationship), $this->obj->{$relationship}(), SilvercartGridFieldConfig_RelationEditor::create());
                 if ($this->tabbed) {
                     $fields->addFieldToTab("Root.{$relationship}", $grid);
                 } else {
                     $fields->push($grid);
                 }
             }
         }
     }
     return $fields;
 }
 /**
  * input fields for editing
  *
  * @param mixed $params optional
  *
  * @return FieldList
  */
 public function getCMSFields($params = null)
 {
     $fields = parent::getCMSFieldsForModules($params);
     $fields->removeByName('InvoiceInfo');
     $fields->removeByName('TextBankAccountInfo');
     // Add fields to default tab ------------------------------------------
     $channelField = new ReadonlyField('DisplayPaymentChannel', _t('SilvercartPaymentPrepayment.PAYMENT_CHANNEL'), $this->getPaymentChannelName($this->PaymentChannel));
     $fields->addFieldToTab('Root.Basic', $channelField, 'mode');
     // Additional tabs and fields -----------------------------------------
     $tabTextTemplates = new Tab(_t('SilvercartPaymentPrepayment.TEXT_TEMPLATES', 'text templates', null, 'Textvorlagen'));
     $fields->fieldByName('Root')->push($tabTextTemplates);
     // text templates for tab fields
     // Textvorlagen Tab Felder --------------------------------------------
     $languageFields = SilvercartLanguageHelper::prepareCMSFields($this->getLanguageClassName());
     switch ($this->PaymentChannel) {
         case 'invoice':
             $tabTextTemplates->setChildren(new FieldList($languageFields->fieldByName('InvoiceInfo')));
             break;
         case 'prepayment':
         default:
             $tabTextTemplates->setChildren(new FieldList($languageFields->fieldByName('TextBankAccountInfo')));
     }
     $translations = new GridField('SilvercartPaymentPrepaymentLanguages', $this->fieldLabel('SilvercartPaymentPrepaymentLanguages'), $this->SilvercartPaymentPrepaymentLanguages(), SilvercartGridFieldConfig_ExclusiveRelationEditor::create());
     $fields->addFieldToTab('Root.Translations', $translations);
     return $fields;
 }
 /**
  * Returns the input fields for this widget without scaffolding
  * 
  * @return FieldList
  * 
  * @author Sascha Koehler <*****@*****.**>, Sebastian Diel <*****@*****.**>
  * @since 03.09.2012
  */
 public function getCMSFields()
 {
     $fields = new FieldList();
     $rootTabSet = new TabSet('Root');
     $basicTab = new Tab('Basic', $this->fieldLabel('BasicTab'));
     $translationTab = new Tab('Translations', $this->fieldLabel('TranslationsTab'));
     $titleField = new TextField('FrontTitle', $this->fieldLabel('FrontTitle'));
     $contentField = new TextareaField('FrontContent', $this->fieldLabel('FrontContent'), 10);
     $imageTable = new GridField('SilvercartImages', $this->fieldLabel('Images'), $this->SilvercartImages()->sort('Sort'), SilvercartGridFieldConfig_RelationEditor::create());
     $imageTable->getConfig()->removeComponentsByType('GridFieldAddNewButton');
     $imageTable->getConfig()->removeComponentsByType('GridFieldAddExistingAutocompleter');
     $imageTable->getConfig()->addComponent(new GridFieldDeleteAction());
     $imageTable->getConfig()->addComponent(new GridFieldSortableRows('Sort'));
     $imagesUploadDescription = sprintf($this->fieldLabel('SilvercartImagesDescription'), $this->getSliderHeight());
     $imagesUploadField = new SilvercartImageUploadField('UploadSilvercartImages', $this->fieldLabel('AddImage'));
     $imagesUploadField->setFolderName('Uploads/silvercart-images');
     $imagesUploadField->setDescription($imagesUploadDescription);
     $translationsTableField = new GridField('SilvercartSlidorionProductGroupWidgetLanguages', $this->fieldLabel('translations'), $this->SilvercartSlidorionProductGroupWidgetLanguages(), SilvercartGridFieldConfig_ExclusiveRelationEditor::create());
     $widgetHeightField = new TextField('widgetHeight', $this->fieldLabel('widgetHeight'));
     $speedField = new TextField('speed', $this->fieldLabel('speed'));
     $intervalField = new TextField('interval', $this->fieldLabel('interval'));
     $effectField = new DropdownField('effect', $this->fieldLabel('effect'), singleton('SilvercartSlidorionProductGroupWidget')->dbObject('effect')->enumValues(), $this->effect);
     $hoverPauseField = new CheckboxField('hoverPause', $this->fieldLabel('hoverPause'));
     $autoPlayField = new CheckboxField('autoPlay', $this->fieldLabel('autoPlay'));
     $advancedToggle = ToggleCompositeField::create('AdvancedToggle', $this->fieldLabel('AdvancedTab'), array($widgetHeightField, $speedField, $intervalField, $effectField, $hoverPauseField, $autoPlayField))->setHeadingLevel(4);
     $basicTab->push($titleField);
     $basicTab->push($contentField);
     $basicTab->push($imagesUploadField);
     $basicTab->push($imageTable);
     $basicTab->push($advancedToggle);
     $translationTab->push($translationsTableField);
     $fields->push($rootTabSet);
     $rootTabSet->push($basicTab);
     $rootTabSet->push($translationTab);
     return $fields;
 }