Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / file / tests / src / Functional / FileFieldCreationTrait.php
1 <?php
2
3 namespace Drupal\Tests\file\Functional;
4
5 use Drupal\field\Entity\FieldStorageConfig;
6 use Drupal\field\Entity\FieldConfig;
7
8 /**
9  * Provides methods for creating file fields.
10  */
11 trait FileFieldCreationTrait {
12
13   /**
14    * Creates a new file field.
15    *
16    * @param string $name
17    *   The name of the new field (all lowercase), exclude the "field_" prefix.
18    * @param string $entity_type
19    *   The entity type.
20    * @param string $bundle
21    *   The bundle that this field will be added to.
22    * @param array $storage_settings
23    *   A list of field storage settings that will be added to the defaults.
24    * @param array $field_settings
25    *   A list of instance settings that will be added to the instance defaults.
26    * @param array $widget_settings
27    *   A list of widget settings that will be added to the widget defaults.
28    *
29    * @return \Drupal\field\FieldStorageConfigInterface
30    *   The file field.
31    */
32   public function createFileField($name, $entity_type, $bundle, $storage_settings = [], $field_settings = [], $widget_settings = []) {
33     $field_storage = FieldStorageConfig::create([
34       'entity_type' => $entity_type,
35       'field_name' => $name,
36       'type' => 'file',
37       'settings' => $storage_settings,
38       'cardinality' => !empty($storage_settings['cardinality']) ? $storage_settings['cardinality'] : 1,
39     ]);
40     $field_storage->save();
41
42     $this->attachFileField($name, $entity_type, $bundle, $field_settings, $widget_settings);
43     return $field_storage;
44   }
45
46   /**
47    * Attaches a file field to an entity.
48    *
49    * @param string $name
50    *   The name of the new field (all lowercase), exclude the "field_" prefix.
51    * @param string $entity_type
52    *   The entity type this field will be added to.
53    * @param string $bundle
54    *   The bundle this field will be added to.
55    * @param array $field_settings
56    *   A list of field settings that will be added to the defaults.
57    * @param array $widget_settings
58    *   A list of widget settings that will be added to the widget defaults.
59    */
60   public function attachFileField($name, $entity_type, $bundle, $field_settings = [], $widget_settings = []) {
61     $field = [
62       'field_name' => $name,
63       'label' => $name,
64       'entity_type' => $entity_type,
65       'bundle' => $bundle,
66       'required' => !empty($field_settings['required']),
67       'settings' => $field_settings,
68     ];
69     FieldConfig::create($field)->save();
70
71     entity_get_form_display($entity_type, $bundle, 'default')
72       ->setComponent($name, [
73         'type' => 'file_generic',
74         'settings' => $widget_settings,
75       ])
76       ->save();
77     // Assign display settings.
78     entity_get_display($entity_type, $bundle, 'default')
79       ->setComponent($name, [
80         'label' => 'hidden',
81         'type' => 'file_default',
82       ])
83       ->save();
84   }
85
86 }