Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / field_ui / src / Form / FieldStorageAddForm.php
index e1f278796e577dbdff111cc6cbbb375d03a68ce8..584cc96846746129429b01e25d95ab675b7b81e3 100644 (file)
@@ -14,6 +14,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides a form for the "field storage" add page.
+ *
+ * @internal
  */
 class FieldStorageAddForm extends FormBase {
 
@@ -310,14 +312,16 @@ class FieldStorageAddForm extends FormBase {
         'translatable' => FALSE,
       ];
       $widget_id = $formatter_id = NULL;
+      $widget_settings = $formatter_settings = [];
 
       // Check if we're dealing with a preconfigured field.
       if (strpos($field_storage_values['type'], 'field_ui:') !== FALSE) {
         list(, $field_type, $option_key) = explode(':', $field_storage_values['type'], 3);
         $field_storage_values['type'] = $field_type;
 
-        $field_type_class = $this->fieldTypePluginManager->getDefinition($field_type)['class'];
-        $field_options = $field_type_class::getPreconfiguredOptions()[$option_key];
+        $field_definition = $this->fieldTypePluginManager->getDefinition($field_type);
+        $options = $this->fieldTypePluginManager->getPreconfiguredOptions($field_definition['id']);
+        $field_options = $options[$option_key];
 
         // Merge in preconfigured field storage options.
         if (isset($field_options['field_storage_config'])) {
@@ -338,7 +342,9 @@ class FieldStorageAddForm extends FormBase {
         }
 
         $widget_id = isset($field_options['entity_form_display']['type']) ? $field_options['entity_form_display']['type'] : NULL;
+        $widget_settings = isset($field_options['entity_form_display']['settings']) ? $field_options['entity_form_display']['settings'] : [];
         $formatter_id = isset($field_options['entity_view_display']['type']) ? $field_options['entity_view_display']['type'] : NULL;
+        $formatter_settings = isset($field_options['entity_view_display']['settings']) ? $field_options['entity_view_display']['settings'] : [];
       }
 
       // Create the field storage and field.
@@ -347,8 +353,8 @@ class FieldStorageAddForm extends FormBase {
         $field = $this->entityManager->getStorage('field_config')->create($field_values);
         $field->save();
 
-        $this->configureEntityFormDisplay($values['field_name'], $widget_id);
-        $this->configureEntityViewDisplay($values['field_name'], $formatter_id);
+        $this->configureEntityFormDisplay($values['field_name'], $widget_id, $widget_settings);
+        $this->configureEntityViewDisplay($values['field_name'], $formatter_id, $formatter_settings);
 
         // Always show the field settings step, as the cardinality needs to be
         // configured for new fields.
@@ -416,12 +422,20 @@ class FieldStorageAddForm extends FormBase {
    *   The field name.
    * @param string|null $widget_id
    *   (optional) The plugin ID of the widget. Defaults to NULL.
+   * @param array $widget_settings
+   *   (optional) An array of widget settings. Defaults to an empty array.
    */
-  protected function configureEntityFormDisplay($field_name, $widget_id = NULL) {
+  protected function configureEntityFormDisplay($field_name, $widget_id = NULL, array $widget_settings = []) {
+    $options = [];
+    if ($widget_id) {
+      $options['type'] = $widget_id;
+      if (!empty($widget_settings)) {
+        $options['settings'] = $widget_settings;
+      }
+    }
     // Make sure the field is displayed in the 'default' form mode (using
     // default widget and settings). It stays hidden for other form modes
     // until it is explicitly configured.
-    $options = $widget_id ? ['type' => $widget_id] : [];
     entity_get_form_display($this->entityTypeId, $this->bundle, 'default')
       ->setComponent($field_name, $options)
       ->save();
@@ -434,12 +448,20 @@ class FieldStorageAddForm extends FormBase {
    *   The field name.
    * @param string|null $formatter_id
    *   (optional) The plugin ID of the formatter. Defaults to NULL.
+   * @param array $formatter_settings
+   *   (optional) An array of formatter settings. Defaults to an empty array.
    */
-  protected function configureEntityViewDisplay($field_name, $formatter_id = NULL) {
+  protected function configureEntityViewDisplay($field_name, $formatter_id = NULL, array $formatter_settings = []) {
+    $options = [];
+    if ($formatter_id) {
+      $options['type'] = $formatter_id;
+      if (!empty($formatter_settings)) {
+        $options['settings'] = $formatter_settings;
+      }
+    }
     // Make sure the field is displayed in the 'default' view mode (using
     // default formatter and settings). It stays hidden for other view
     // modes until it is explicitly configured.
-    $options = $formatter_id ? ['type' => $formatter_id] : [];
     entity_get_display($this->entityTypeId, $this->bundle, 'default')
       ->setComponent($field_name, $options)
       ->save();