Completed
Pull Request — 8.x-1.x (#138)
by
unknown
06:49
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\Core\Form\FormStateInterface;
10
use Drupal\entity_browser\SelectionDisplayBase;
11
12
/**
13
 * Show current selection and delivers selected entities.
14
 *
15
 * @EntityBrowserSelectionDisplay(
16
 *   id = "new_display",
17
 *   label = @Translation("New selection display"),
18
 *   description = @Translation("Show current selection display and delivers selected entities.")
19
 * )
20
 */
21
class NewDisplay extends SelectionDisplayBase {
22
23
  /**
24
   * {@inheritdoc}
25
   */
26
  public function defaultConfiguration() {
27
    return array(
28
      'view' => NULL,
29
      'view_display' => NULL,
30
    ) + parent::defaultConfiguration();
31
  }
32
33
  /**
34
   * {@inheritdoc}
35
   */
36
  public function getForm(array &$original_form, FormStateInterface $form_state) {
37
    $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
38
39
    $form = [];
40
    $form['#attached']['library'][] = 'entity_browser/new_display';
41
    $form['selected'] = [
42
      '#theme_wrappers' => ['container'],
43
      '#attributes' => ['class' => ['selected-entities-list']],
44
    ];
45
    $form['selected']['weights'] = [
46
      '#type' => 'hidden',
47
      '#attributes' => ['class' => ['selected-entities-weights']]
48
    ];
49
    foreach ($selected_entities as $id => $entity) {
50
      $form['selected']['items'][$id] = [
51
        '#theme_wrappers' => ['container'],
52
        '#attributes' => [
53
          'class' => ['selected-item-container'],
54
          'data-entity-id' => $id
55
        ],
56
        'display' => ['#markup' => $entity->label()],
57
        'remove_button' => [
58
          '#type' => 'submit',
59
          '#value' => $this->t('Remove'),
60
          '#submit' => [[get_class($this), 'removeItemSubmit']],
61
          '#name' => 'remove_' . $id,
62
          '#attributes' => ['data-entity-id' => $id]
63
        ],
64
      ];
65
    }
66
    $form['use_selected'] = array(
67
      '#type' => 'submit',
68
      '#value' => t('Use selected'),
69
      '#name' => 'use_selected',
70
    );
71
72
    return $form;
73
  }
74
75
  /**
76
   * Submit callback for remove buttons.
77
   */
78
  public static function removeItemSubmit(&$form, FormStateInterface $form_state) {
79
    $id = $form_state->getTriggeringElement()['#attributes']['data-entity-id'];
80
    $selected_entities = $form_state->get(['entity_browser', 'selected_entities']);
81
    unset($selected_entities[$id]);
82
    $form_state->set(['entity_browser', 'selected_entities'], $selected_entities);
83
    $form_state->setRebuild();
84
  }
85
86
  /**
87
   * {@inheritdoc}
88
   */
89
  public function submit(array &$form, FormStateInterface $form_state) {
90
    $order = explode(" ", $form_state->getValue('weights'));
91
    $selected = $form_state->get(['entity_browser', 'selected_entities']);
92
    $new_order = [];
93
    if ($form_state->getTriggeringElement()['#name'] == 'use_selected') {
94
      if(!empty($order[0])){
95
        foreach($order as $key => $value) {
96
          $new_order[$key] = $selected[$value];
97
        }
98
        $form_state->set(['entity_browser', 'selected_entities'], $new_order);
99
      }
100
      $this->selectionDone($form_state);
101
    }
102
  }
103
104
}
105