Completed
Pull Request — 8.x-1.x (#138)
by
unknown
02:43
created

NewDisplay::defaultConfiguration()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
3
/**
4
 * Contains \Drupal\entity_browser\Plugin\EntityBrowser\SelectionDisplay\NewDisplay.
5
 */
6
7
namespace Drupal\entity_browser\Plugin\EntityBrowser\SelectionDisplay;
8
9
use Drupal\Component\Utility\SortArray;
10
use Drupal\Core\Form\FormStateInterface;
11
use Drupal\entity_browser\SelectionDisplayBase;
12
13
/**
14
 * Show current selection and delivers selected entities.
15
 *
16
 * @EntityBrowserSelectionDisplay(
17
 *   id = "new_display",
18
 *   label = @Translation("New selection display"),
19
 *   description = @Translation("Show current selection display and delivers selected entities.")
20
 * )
21
 */
22
class NewDisplay extends SelectionDisplayBase {
23
24
  /**
25
   * {@inheritdoc}
26
   */
27
  public function defaultConfiguration() {
28
    return array(
29
      'view' => NULL,
30
      'view_display' => NULL,
31
    ) + parent::defaultConfiguration();
32
  }
33
34
  /**
35
   * {@inheritdoc}
36
   */
37
  public function getForm(array &$original_form, FormStateInterface $form_state) {
38
    $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
39
40
    $form = [];
41
    $form['#attached']['library'][] = 'entity_browser/new_display';
42
    $form['selected'] = [
43
      '#theme_wrappers' => ['container'],
44
      '#attributes' => ['class' => ['selected-entities-list']],
45
      '#tree' => TRUE
46
    ];
47
    foreach ($selected_entities as $id => $entity) {
48
      $form['selected']['items_'. $entity->id()] = [
49
        '#theme_wrappers' => ['container'],
50
        '#attributes' => [
51
          'class' => ['selected-item-container'],
52
          'data-entity-id' => $entity->id()
53
        ],
54
        'display' => ['#markup' => $entity->label()],
55
        'remove_button' => [
56
          '#type' => 'submit',
57
          '#value' => $this->t('Remove'),
58
          '#submit' => [[get_class($this), 'removeItemSubmit']],
59
          '#name' => 'remove_' . $entity->id(),
60
          '#attributes' => [
61
            'data-row-id' => $id,
62
            'data-remove-entity' => 'items_' . $entity->id(),
63
          ]
64
        ],
65
        'weight' => [
66
          '#type' => 'hidden',
67
          '#default_value' => $id,
68
          '#attributes' => ['class' => ['weight']]
69
        ]
70
      ];
71
    }
72
    $form['use_selected'] = array(
73
      '#type' => 'submit',
74
      '#value' => t('Use selected'),
75
      '#name' => 'use_selected',
76
    );
77
78
    return $form;
79
  }
80
81
  /**
82
   * Submit callback for remove buttons.
83
   *
84
   * @param array $form
85
   * @param \Drupal\Core\Form\FormStateInterface $form_state
86
   */
87
  public static function removeItemSubmit(array &$form, FormStateInterface $form_state) {
88
    $id = $form_state->getTriggeringElement()['#attributes']['data-row-id'];
89
    $entity = $form_state->getTriggeringElement()['#attributes']['data-remove-entity'];
90
    $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
91
    $selected = $form_state->getValue('selected');
92
    unset($selected_entities[$id]);
93
    $weight = $selected[$entity]['weight'];
94
    unset($selected[$entity]);
95
    $ordered = $selected;
96
    foreach ($selected as $key => $sel) {
97
      if ($sel['weight'] > $weight) {
98
        $ordered[$key]['weight'] = (string)($sel['weight'] - 1);
99
      }
100
    }
101
    $form_state->set(['entity_browser', 'selected_entities'], $selected_entities);
102
    $form_state->setValue('selected', $ordered);
103
    $form_state->setRebuild();
104
  }
105
106
  /**
107
   * {@inheritdoc}
108
   */
109
  public function submit(array &$form, FormStateInterface $form_state) {
110
    $selected = $form_state->getValue('selected');
111
    if (!empty($selected)) {
112
      $weights = array_column($selected, 'weight');
113
      $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
114
      $ordered = $selected_entities;
115
      if (is_array($weights)) {
116
        foreach ($weights as $key => $value) {
117
          $ordered[$value] = $selected_entities[$key];
118
        }
119
      }
120
      $form_state->set(['entity_browser', 'selected_entities'], $ordered);
121
    }
122
    if ($form_state->getTriggeringElement()['#name'] == 'use_selected') {
123
      $this->selectionDone($form_state);
124
    }
125
  }
126
127
}
128