Version 1
[yaffs-website] / web / core / modules / field / tests / modules / field_test / src / Plugin / Field / FieldWidget / TestFieldWidget.php
1 <?php
2
3 namespace Drupal\field_test\Plugin\Field\FieldWidget;
4
5 use Drupal\Core\Field\FieldItemListInterface;
6 use Drupal\Core\Field\WidgetBase;
7 use Drupal\Core\Form\FormStateInterface;
8 use Symfony\Component\Validator\ConstraintViolationInterface;
9
10 /**
11  * Plugin implementation of the 'test_field_widget' widget.
12  *
13  * @FieldWidget(
14  *   id = "test_field_widget",
15  *   label = @Translation("Test widget"),
16  *   field_types = {
17  *     "test_field",
18  *     "hidden_test_field",
19  *     "test_field_with_preconfigured_options"
20  *   },
21  *   weight = -10
22  * )
23  */
24 class TestFieldWidget extends WidgetBase {
25
26   /**
27    * {@inheritdoc}
28    */
29   public static function defaultSettings() {
30     return [
31       'test_widget_setting' => 'dummy test string',
32       'role' => 'anonymous',
33       'role2' => 'anonymous',
34     ] + parent::defaultSettings();
35   }
36
37   /**
38    * {@inheritdoc}
39    */
40   public function settingsForm(array $form, FormStateInterface $form_state) {
41     $element['test_widget_setting'] = [
42       '#type' => 'textfield',
43       '#title' => t('Field test field widget setting'),
44       '#description' => t('A dummy form element to simulate field widget setting.'),
45       '#default_value' => $this->getSetting('test_widget_setting'),
46       '#required' => FALSE,
47     ];
48     return $element;
49   }
50
51   /**
52    * {@inheritdoc}
53    */
54   public function settingsSummary() {
55     $summary = [];
56     $summary[] = t('@setting: @value', ['@setting' => 'test_widget_setting', '@value' => $this->getSetting('test_widget_setting')]);
57     return $summary;
58   }
59
60   /**
61    * {@inheritdoc}
62    */
63   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
64     $element += [
65       '#type' => 'textfield',
66       '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : '',
67     ];
68     return ['value' => $element];
69   }
70
71   /**
72    * {@inheritdoc}
73    */
74   public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) {
75     return $element['value'];
76   }
77
78   /**
79    * {@inheritdoc}
80    */
81   public function calculateDependencies() {
82     $dependencies = parent::calculateDependencies();
83
84     foreach (['role', 'role2'] as $setting) {
85       if (!empty($role_id = $this->getSetting($setting))) {
86         // Create a dependency on the role config entity referenced in settings.
87         $dependencies['config'][] = "user.role.$role_id";
88       }
89     }
90
91     return $dependencies;
92   }
93
94   /**
95    * {@inheritdoc}
96    */
97   public function onDependencyRemoval(array $dependencies) {
98     $changed = parent::onDependencyRemoval($dependencies);
99
100     // Only the setting 'role' is resolved here. When the dependency related to
101     // this setting is removed, is expected that the widget component will be
102     // update accordingly in the display entity. The 'role2' setting is
103     // deliberately left out from being updated. When the dependency
104     // corresponding to this setting is removed, is expected that the widget
105     // component will be disabled in the display entity.
106     if (!empty($role_id = $this->getSetting('role'))) {
107       if (!empty($dependencies['config']["user.role.$role_id"])) {
108         $this->setSetting('role', 'anonymous');
109         $changed = TRUE;
110       }
111     }
112
113     return $changed;
114   }
115
116 }