SimplesitemapSettingsForm.php 5.05 KB
Newer Older
1
2
3
4
<?php

/**
 * @file
Pawel G's avatar
Pawel G committed
5
 * Contains \Drupal\simple_sitemap\Form\SimplesitemapSettingsForm.
6
7
 */

Pawel G's avatar
Pawel G committed
8
namespace Drupal\simple_sitemap\Form;
9
10
11

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
Pawel G's avatar
Pawel G committed
12
use Drupal\simple_sitemap\Simplesitemap;
13
14
15
16
17
18
19
20
21
22

/**
 * SimplesitemapSettingsFrom
 */
class SimplesitemapSettingsForm extends ConfigFormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormID() {
Pawel G's avatar
Pawel G committed
23
    return 'simple_sitemap_settings_form';
24
25
26
27
28
29
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
Pawel G's avatar
Pawel G committed
30
    return ['simple_sitemap.settings'];
31
32
33
34
35
36
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
37

38
39
    $sitemap = new Simplesitemap;

Pawel G's avatar
Pawel G committed
40
    $form['simple_sitemap_settings']['regenerate'] = array(
41
      '#title' => t('Regenerate sitemap'),
42
      '#type' => 'fieldset',
43
      '#markup' => '<p>' . t('This will regenerate the XML sitemap for all languages.') . '</p>',
44
45
    );

Pawel G's avatar
Pawel G committed
46
    $form['simple_sitemap_settings']['regenerate']['regenerate_submit'] = array(
47
      '#type' => 'submit',
48
49
      '#value' => t('Regenerate sitemap'),
      '#submit' => array('::generate_sitemap'),
50
51
52
      '#validate' => array(), // Skip form-level validator.
    );

Pawel G's avatar
Pawel G committed
53
54
    $form['simple_sitemap_settings']['settings'] = array(
      '#title' => t('Settings'),
55
      '#type' => 'fieldset',
Pawel G's avatar
Pawel G committed
56
//      '#markup' => '<p>' . t('Various sitemap settings.') . '</p>',
57
58
    );

Pawel G's avatar
Pawel G committed
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
    $form['simple_sitemap_settings']['settings']['cron_generate'] = array(
      '#type' => 'checkbox',
      '#title' => t('Regenerate the sitemap on every cron run'),
      '#description' => t('Uncheck this if you intend to only regenerate the sitemap manually or via drush.'),
      '#default_value' => $sitemap->get_setting('cron_generate'),
    );

    $form['simple_sitemap_settings']['advanced'] = array(
      '#title' => t('Advanced settings'),
      '#type' => 'details',
//      '#markup' => '<p>' . t('Various performance settings.') . '</p>',
    );

    $form['simple_sitemap_settings']['advanced']['remove_duplicates'] = array(
      '#type' => 'checkbox',
      '#title' => t('Remove duplicate links'),
75
      '#description' => t('Uncheck this to significantly speed up the sitemap generation process on a huge site (>20 000 entities).'),
Pawel G's avatar
Pawel G committed
76
77
78
79
      '#default_value' => $sitemap->get_setting('remove_duplicates'),
    );

    $form['simple_sitemap_settings']['advanced']['max_links'] = array(
80
81
82
83
84
      '#title' => t('Maximum links in a sitemap'),
      '#description' => t("The maximum number of links one sitemap can hold. If more links are generated than set here, a sitemap index will be created and the links split into several sub-sitemaps.<br/>50 000 links is the maximum Google will parse per sitemap, however it is advisable to set this to a lower number. If left blank, all links will be shown on a single sitemap."),
      '#type' => 'textfield',
      '#maxlength' => 5,
      '#size' => 5,
85
86
87
      '#default_value' => $sitemap->get_setting('max_links'),
    );

Pawel G's avatar
Pawel G committed
88
89
90
91
92
93
94
    $form['simple_sitemap_settings']['advanced']['batch_process_limit'] = array(
      '#title' => t('Refresh batch every n links'),
      '#description' => t("During sitemap generation, the batch process will issue a page refresh after n links processed to prevent PHP timeout and memory exhaustion. Increasing this number will reduce the number of times Drupal has to bootstrap (thus speeding up the generation process), but will require more memory and less strict PHP timeout settings."),
      '#type' => 'textfield',
      '#maxlength' => 5,
      '#size' => 5,
      '#default_value' => $sitemap->get_setting('batch_process_limit'),
95
96
97
98
99
100
101
102
103
104
105
106
    );

    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    $max_links = $form_state->getValue('max_links');
    if ($max_links != '') {
      if (!is_numeric($max_links) || $max_links < 1 || $max_links != round($max_links)) {
107
        $form_state->setErrorByName('', t("The value of the max links field must be a positive integer greater than 0."));
108
109
      }
    }
Pawel G's avatar
Pawel G committed
110
111
112

  $batch_process_limit = $form_state->getValue('batch_process_limit');
    if (!is_numeric($batch_process_limit) || $batch_process_limit < 1 || $batch_process_limit != round($batch_process_limit)) {
113
      $form_state->setErrorByName('', t("The value of the batch refresh rate field must be a positive integer greater than 0."));
Pawel G's avatar
Pawel G committed
114
    }
115
116
117
118
119
120
121
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $sitemap = new Simplesitemap;
122
123
    $sitemap->save_setting('max_links', $form_state->getValue('max_links'));
    $sitemap->save_setting('cron_generate', $form_state->getValue('cron_generate'));
Pawel G's avatar
Pawel G committed
124
125
    $sitemap->save_setting('remove_duplicates', $form_state->getValue('remove_duplicates'));
    $sitemap->save_setting('batch_process_limit', $form_state->getValue('batch_process_limit'));
126
    parent::submitForm($form, $form_state);
127
128
  }

129
  public function generate_sitemap(array &$form, FormStateInterface $form_state) {
130
131
    $sitemap = new Simplesitemap;
    $sitemap->generate_sitemap();
132
133
  }
}