8f17aa5601f13497f68743a36dd0d163a6993eb2
[yaffs-website] / web / modules / contrib / simple_sitemap / src / Form / SimplesitemapEntitiesForm.php
1 <?php
2
3 namespace Drupal\simple_sitemap\Form;
4
5 use Drupal\Core\Form\FormStateInterface;
6
7 /**
8  * Class SimplesitemapEntitiesForm
9  * @package Drupal\simple_sitemap\Form
10  */
11 class SimplesitemapEntitiesForm extends SimplesitemapFormBase {
12
13   /**
14    * {@inheritdoc}
15    */
16   public function getFormID() {
17     return 'simple_sitemap_entities_form';
18   }
19
20   /**
21    * {@inheritdoc}
22    */
23   public function buildForm(array $form, FormStateInterface $form_state) {
24
25     $form['simple_sitemap_entities']['#prefix'] = $this->getDonationText();
26
27     $form['simple_sitemap_entities']['entities'] = [
28       '#title' => $this->t('Sitemap entities'),
29       '#type' => 'fieldset',
30       '#markup' => '<p>' . $this->t("Simple XML sitemap settings will be added only to entity forms of entity types enabled here. For all entity types featuring bundles (e.g. <em>node</em>) sitemap settings have to be set on their bundle pages (e.g. <em>page</em>).") . '</p>',
31     ];
32
33     $form['#attached']['library'][] = 'simple_sitemap/sitemapEntities';
34     $form['#attached']['drupalSettings']['simple_sitemap'] = ['all_entities' => [], 'atomic_entities' => []];
35
36     $entity_type_labels = [];
37     foreach ($this->entityHelper->getSitemapEntityTypes() as $entity_type_id => $entity_type) {
38       $entity_type_labels[$entity_type_id] = $entity_type->getLabel() ? : $entity_type_id;
39     }
40     asort($entity_type_labels);
41
42     $this->formHelper->processForm($form_state);
43
44     foreach ($entity_type_labels as $entity_type_id => $entity_type_label) {
45
46       $css_entity_type_id = str_replace('_', '-', $entity_type_id);
47
48       $form['simple_sitemap_entities']['entities'][$entity_type_id] = [
49         '#type' => 'details',
50         '#title' => $entity_type_label,
51         '#open' => $this->generator->entityTypeIsEnabled($entity_type_id),
52       ];
53
54       $form['simple_sitemap_entities']['entities'][$entity_type_id][$entity_type_id . '_enabled'] = [
55         '#type' => 'checkbox',
56         '#title' => $this->t('Enable @entity_type_label <em>(@entity_type_id)</em> support', ['@entity_type_label' => strtolower($entity_type_label), '@entity_type_id' => $entity_type_id]),
57         '#description' => $this->t('Sitemap settings for this entity type can be set on its bundle pages and overridden on its entity pages.'),
58         '#default_value' => $this->generator->entityTypeIsEnabled($entity_type_id),
59       ];
60
61       if ($form['simple_sitemap_entities']['entities'][$entity_type_id][$entity_type_id . '_enabled']['#default_value']) {
62         $form['simple_sitemap_entities']['entities'][$entity_type_id][$entity_type_id . '_enabled']['#suffix']
63           = "<div id='warning-$css_entity_type_id'>"
64           . $this->t("<strong>Warning:</strong> This entity type's sitemap settings including per-entity overrides will be deleted after hitting <em>Save</em>.")
65           . "</div>";
66       }
67
68       $form['#attached']['drupalSettings']['simple_sitemap']['all_entities'][] = $css_entity_type_id;
69
70       if ($this->entityHelper->entityTypeIsAtomic($entity_type_id)) {
71         $form['simple_sitemap_entities']['entities'][$entity_type_id][$entity_type_id . '_enabled']['#description'] = $this->t('Sitemap settings for this entity type can be set below and overridden on its entity pages.');
72         $this->formHelper->setEntityCategory('bundle')
73           ->setEntityTypeId($entity_type_id)
74           ->setBundleName($entity_type_id)
75           ->displayEntitySettings($form['simple_sitemap_entities']['entities'][$entity_type_id][$entity_type_id . '_settings'], TRUE);
76         $form['#attached']['drupalSettings']['simple_sitemap']['atomic_entities'][] = $css_entity_type_id;
77       }
78     }
79
80     $this->formHelper->displayRegenerateNow($form['simple_sitemap_entities']['entities']);
81
82     return parent::buildForm($form, $form_state);
83   }
84
85   /**
86    * {@inheritdoc}
87    */
88   public function submitForm(array &$form, FormStateInterface $form_state) {
89     $values = $form_state->getValues();
90     foreach ($values as $field_name => $value) {
91       if (substr($field_name, -strlen('_enabled')) == '_enabled') {
92         $entity_type_id = substr($field_name, 0, -8);
93         if ($value) {
94           $this->generator->enableEntityType($entity_type_id);
95           if ($this->entityHelper->entityTypeIsAtomic($entity_type_id)) {
96             $this->generator->setBundleSettings($entity_type_id, $entity_type_id, [
97               'index' => TRUE,
98               'priority' => $values[$entity_type_id . '_simple_sitemap_priority'],
99             ]);
100           }
101         }
102         else {
103           $this->generator->disableEntityType($entity_type_id);
104         }
105       }
106     }
107     parent::submitForm($form, $form_state);
108
109     // Regenerate sitemaps according to user setting.
110     if ($form_state->getValue('simple_sitemap_regenerate_now')) {
111       $this->generator->generateSitemap();
112     }
113   }
114
115 }