SimplesitemapSettingsForm.php 5.42 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

39 40
    $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.", array('@url' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5AFYRSBLGSC3W')) . "</div>";

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

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

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

Pawel G's avatar
Pawel G committed
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    $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'),
76
      '#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
77 78 79 80
      '#default_value' => $sitemap->get_setting('remove_duplicates'),
    );

    $form['simple_sitemap_settings']['advanced']['max_links'] = array(
81 82 83 84 85
      '#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,
86 87 88
      '#default_value' => $sitemap->get_setting('max_links'),
    );

Pawel G's avatar
Pawel G committed
89 90 91 92 93 94 95
    $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'),
96 97 98 99 100 101 102 103 104 105 106 107
    );

    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)) {
108
        $form_state->setErrorByName('', t("The value of the max links field must be a positive integer greater than 0."));
109 110
      }
    }
Pawel G's avatar
Pawel G committed
111 112 113

  $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)) {
114
      $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
115
    }
116 117 118 119 120 121
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
122
    $sitemap = \Drupal::service('simple_sitemap.generator');
123 124
    $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
125 126
    $sitemap->save_setting('remove_duplicates', $form_state->getValue('remove_duplicates'));
    $sitemap->save_setting('batch_process_limit', $form_state->getValue('batch_process_limit'));
127
    parent::submitForm($form, $form_state);
128 129
  }

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