/**
  * This should be updateCMSFields and configured to be called last but configuration
  * priority does not seem to work to force this to be the last loaded/called extension.
  *
  * For now will call via extend.manualUpdate with the field list in ArtisanModel.getCMSFields
  *
  * @param FieldList $fields
  */
 public function manualUpdateCMSFields(FieldList $fields)
 {
     //        $formFields = $fields->dataFields();
     $formFields = $fields->VisibleFields();
     $selectorFieldName = parent::get_config_setting('selector_field_name');
     $hiddenCSSClass = parent::get_config_setting('hidden_css_class');
     $provider = Injector::inst()->get('AdaptableFormMetaDataProvider');
     $defaultFieldNames = $provider->getDefaultFieldNames();
     // keep track of fields we have encountered in the spec, other fields will be hidden,
     // we can initialise this to defaultFieldNames as we don't want to hide these ever
     $handled = array_combine($defaultFieldNames, $defaultFieldNames);
     // we want to get the form so we can remove fields later
     $form = null;
     $metaData = $provider->getMetaData();
     // the master list of content types by field name
     $this->contentTypes = [];
     foreach ($metaData as $contentType => $fieldSpec) {
         if (isset($fieldSpec['FormFields'])) {
             $fieldDefinitions = $fieldSpec['FormFields'];
             $specFields = array_merge($fieldDefinitions, $defaultFieldNames);
             $this->processFieldList($formFields, $contentType, $selectorFieldName, $specFields, $defaultFieldNames, $handled);
         }
     }
     $this->hideUnhandled($formFields, $handled, $hiddenCSSClass);
 }
Example #2
0
 /**
  * Test VisibleFields and HiddenFields
  */
 public function testVisibleAndHiddenFields()
 {
     $fields = new FieldList(new TextField("A"), new TextField("B"), new HiddenField("C"), new Tabset("Root", new Tab("D", new TextField("D1"), new HiddenField("D2"))));
     $hidden = $fields->HiddenFields();
     // Inside hidden fields, all HiddenField objects are included, even nested ones
     $this->assertNotNull($hidden->dataFieldByName('C'));
     $this->assertNotNull($hidden->dataFieldByName('D2'));
     // Visible fields are not
     $this->assertNull($hidden->dataFieldByName('B'));
     $this->assertNull($hidden->dataFieldByName('D1'));
     $visible = $fields->VisibleFields();
     // Visible fields exclude top level HiddenField objects
     $this->assertNotNull($visible->dataFieldByName('A'));
     $this->assertNull($visible->dataFieldByName('C'));
     // But they don't exclude nested HiddenField objects.  This is a limitation; you should
     // put all your HiddenFields at the top level.
     $this->assertNotNull($visible->dataFieldByName('D2'));
 }