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

NewDisplay::submit()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
c 3
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 2
eloc 6
nc 2
nop 2
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
    ];
46
    foreach ($selected_entities as $id => $entity) {
47
      $form['selected']['items'][$id] = [
48
        '#theme_wrappers' => ['container'],
49
        '#attributes' => [
50
          'class' => ['selected-item-container'],
51
          'data-entity-id' => $entity->id()
52
        ],
53
        'display' => ['#markup' => $entity->label()],
54
        'remove_button' => [
55
          '#type' => 'submit',
56
          '#value' => $this->t('Remove'),
57
          '#submit' => [[get_class($this), 'removeItemSubmit']],
58
          '#name' => 'remove_' . $id,
59
          '#attributes' => ['data-row-id' => $id]
60
        ],
61
        'weight' => [
62
          '#type' => 'hidden',
63
          '#value' => $id,
64
          '#attributes' => ['class' => ['weight']]
65
        ]
66
      ];
67
    }
68
    $form['use_selected'] = array(
69
      '#type' => 'submit',
70
      '#value' => t('Use selected'),
71
      '#name' => 'use_selected',
72
    );
73
74
    return $form;
75
  }
76
77
  /**
78
   * Submit callback for remove buttons.
79
   *
80
   * @param \Drupal\Core\Form\FormStateInterface $form_state
81
   */
82
  public static function removeItemSubmit(array &$form, FormStateInterface $form_state) {
83
    $id = $form_state->getTriggeringElement()['#attributes']['data-row-id'];
84
    $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
85
    unset($selected_entities[$id]);
86
    $form_state->set(['entity_browser', 'selected_entities'], $selected_entities);
87
    $form_state->setRebuild();
88
  }
89
90
  /**
91
   * {@inheritdoc}
92
   */
93
  public function submit(array &$form, FormStateInterface $form_state) {
94
    if ($form_state->getTriggeringElement()['#name'] == 'use_selected') {
95
      $selected = $form_state->get(['entity_browser', 'selected_entities']);
96
      usort($selected, array(new SortArray(), "sortByWeightElement"));
97
      $form_state->set(['entity_browser', 'selected_entities'], $selected);
98
      $this->selectionDone($form_state);
99
    }
100
  }
101
102
}
103