SimplesitemapSettingsForm.php 5.29 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 12 13 14 15 16 17 18 19 20 21

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

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

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

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

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

37
    $sitemap = \Drupal::service('simple_sitemap.generator');
38

Pawel G's avatar
Pawel G committed
39
    $form['simple_sitemap_settings']['#prefix'] = "<div class='description'>" .t("If you would like to say thanks and support the development of this module, a <a target='_blank' href='@url'>donation</a> is always appreciated.", ['@url' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5AFYRSBLGSC3W']) . "</div>";
40

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

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

Pawel G's avatar
Pawel G committed
54
    $form['simple_sitemap_settings']['settings'] = [
Pawel G's avatar
Pawel G committed
55
      '#title' => t('Settings'),
56
      '#type' => 'fieldset',
Pawel G's avatar
Pawel G committed
57
    ];
58

Pawel G's avatar
Pawel G committed
59
    $form['simple_sitemap_settings']['settings']['cron_generate'] = [
Pawel G's avatar
Pawel G committed
60 61 62
      '#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.'),
63
      '#default_value' => $sitemap->getSetting('cron_generate'),
Pawel G's avatar
Pawel G committed
64
    ];
Pawel G's avatar
Pawel G committed
65

Pawel G's avatar
Pawel G committed
66
    $form['simple_sitemap_settings']['advanced'] = [
Pawel G's avatar
Pawel G committed
67 68
      '#title' => t('Advanced settings'),
      '#type' => 'details',
Pawel G's avatar
Pawel G committed
69
    ];
Pawel G's avatar
Pawel G committed
70

Pawel G's avatar
Pawel G committed
71
    $form['simple_sitemap_settings']['advanced']['remove_duplicates'] = [
Pawel G's avatar
Pawel G committed
72
      '#type' => 'checkbox',
73
      '#title' => t('Exclude duplicate links'),
74
      '#description' => t('Uncheck this to significantly speed up the sitemap generation process on a huge site (more than 20 000 indexed entities).'),
75
      '#default_value' => $sitemap->getSetting('remove_duplicates'),
Pawel G's avatar
Pawel G committed
76
    ];
Pawel G's avatar
Pawel G committed
77

Pawel G's avatar
Pawel G committed
78
    $form['simple_sitemap_settings']['advanced']['max_links'] = [
79 80 81 82 83
      '#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,
84
      '#default_value' => $sitemap->getSetting('max_links'),
Pawel G's avatar
Pawel G committed
85
    ];
86

Pawel G's avatar
Pawel G committed
87
    $form['simple_sitemap_settings']['advanced']['batch_process_limit'] = [
Pawel G's avatar
Pawel G committed
88
      '#title' => t('Refresh batch every n links'),
89
      '#description' => t("During sitemap generation, the batch process will issue a page refresh after n links processed to prevent PHP timeouts 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."),
Pawel G's avatar
Pawel G committed
90 91 92
      '#type' => 'textfield',
      '#maxlength' => 5,
      '#size' => 5,
93
      '#default_value' => $sitemap->getSetting('batch_process_limit'),
Pawel G's avatar
Pawel G committed
94
    ];
95 96 97 98 99 100 101 102 103 104 105

    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)) {
106
        $form_state->setErrorByName('', t("The value of the <em>Maximum links in a sitemap</em> field must be empty, or a positive integer greater than 0."));
107 108
      }
    }
Pawel G's avatar
Pawel G committed
109 110 111

  $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)) {
112
      $form_state->setErrorByName('', t("The value of the <em>Refresh batch every n links</em> field must be a positive integer greater than 0."));
Pawel G's avatar
Pawel G committed
113
    }
114 115 116 117 118 119
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
120
    $sitemap = \Drupal::service('simple_sitemap.generator');
121 122 123 124
    $sitemap->saveSetting('max_links', $form_state->getValue('max_links'));
    $sitemap->saveSetting('cron_generate', $form_state->getValue('cron_generate'));
    $sitemap->saveSetting('remove_duplicates', $form_state->getValue('remove_duplicates'));
    $sitemap->saveSetting('batch_process_limit', $form_state->getValue('batch_process_limit'));
125
    parent::submitForm($form, $form_state);
126 127
  }

128
  public function generateSitemap(array &$form, FormStateInterface $form_state) {
129
    $sitemap = \Drupal::service('simple_sitemap.generator');
130
    $sitemap->generateSitemap();
131 132
  }
}