aeef26f8ffb58406cf688f2a4e278955689eba4e
[yaffs-website] / web / core / modules / locale / src / Form / TranslateFilterForm.php
1 <?php
2
3 namespace Drupal\locale\Form;
4
5 use Drupal\Core\Form\FormStateInterface;
6
7 /**
8  * Provides a filtered translation edit form.
9  */
10 class TranslateFilterForm extends TranslateFormBase {
11
12   /**
13    * {@inheritdoc}
14    */
15   public function getFormId() {
16     return 'locale_translate_filter_form';
17   }
18
19   /**
20    * {@inheritdoc}
21    */
22   public function buildForm(array $form, FormStateInterface $form_state) {
23     $filters = $this->translateFilters();
24     $filter_values = $this->translateFilterValues();
25
26     $form['#attached']['library'][] = 'locale/drupal.locale.admin';
27
28     $form['filters'] = [
29       '#type' => 'details',
30       '#title' => $this->t('Filter translatable strings'),
31       '#open' => TRUE,
32     ];
33     foreach ($filters as $key => $filter) {
34       // Special case for 'string' filter.
35       if ($key == 'string') {
36         $form['filters']['status']['string'] = [
37           '#type' => 'search',
38           '#title' => $filter['title'],
39           '#description' => $filter['description'],
40           '#default_value' => $filter_values[$key],
41         ];
42       }
43       else {
44         $empty_option = isset($filter['options'][$filter['default']]) ? $filter['options'][$filter['default']] : '- None -';
45         $form['filters']['status'][$key] = [
46           '#title' => $filter['title'],
47           '#type' => 'select',
48           '#empty_value' => $filter['default'],
49           '#empty_option' => $empty_option,
50           '#size' => 0,
51           '#options' => $filter['options'],
52           '#default_value' => $filter_values[$key],
53         ];
54         if (isset($filter['states'])) {
55           $form['filters']['status'][$key]['#states'] = $filter['states'];
56         }
57       }
58     }
59
60     $form['filters']['actions'] = [
61       '#type' => 'actions',
62       '#attributes' => ['class' => ['container-inline']],
63     ];
64     $form['filters']['actions']['submit'] = [
65       '#type' => 'submit',
66       '#value' => $this->t('Filter'),
67     ];
68     if (!empty($_SESSION['locale_translate_filter'])) {
69       $form['filters']['actions']['reset'] = [
70         '#type' => 'submit',
71         '#value' => $this->t('Reset'),
72         '#submit' => ['::resetForm'],
73       ];
74     }
75
76     return $form;
77   }
78
79   /**
80    * {@inheritdoc}
81    */
82   public function submitForm(array &$form, FormStateInterface $form_state) {
83     $filters = $this->translateFilters();
84     foreach ($filters as $name => $filter) {
85       if ($form_state->hasValue($name)) {
86         $_SESSION['locale_translate_filter'][$name] = $form_state->getValue($name);
87       }
88     }
89     $form_state->setRedirect('locale.translate_page');
90   }
91
92   /**
93    * Provides a submit handler for the reset button.
94    */
95   public function resetForm(array &$form, FormStateInterface $form_state) {
96     $_SESSION['locale_translate_filter'] = [];
97     $form_state->setRedirect('locale.translate_page');
98   }
99
100 }