Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / simple_sitemap / src / Form / SimplesitemapSettingsForm.php
index b1645310fecb742b0226f9c6d0e833242243cbde..f9291f62479c75f40567fc042db79895f12ba1be 100644 (file)
@@ -11,22 +11,10 @@ use Drupal\Component\Utility\UrlHelper;
  */
 class SimplesitemapSettingsForm extends SimplesitemapFormBase {
 
-  /**
-   * @var array
-   */
-  protected $formSettings = [
-    'max_links',
-    'cron_generate',
-    'remove_duplicates',
-    'skip_untranslated',
-    'batch_process_limit',
-    'base_url',
-  ];
-
   /**
    * {@inheritdoc}
    */
-  public function getFormID() {
+  public function getFormId() {
     return 'simple_sitemap_settings_form';
   }
 
@@ -40,14 +28,14 @@ class SimplesitemapSettingsForm extends SimplesitemapFormBase {
     $form['simple_sitemap_settings']['regenerate'] = [
       '#type' => 'fieldset',
       '#title' => $this->t('Regenerate sitemap'),
-      '#markup' => '<p>' . $this->t('This will regenerate the XML sitemap for all languages.') . '</p>',
+      '#markup' => '<p>' . $this->t('This will regenerate the XML sitemap immediately.') . '</p>',
     ];
 
     $form['simple_sitemap_settings']['regenerate']['regenerate_submit'] = [
       '#type' => 'submit',
       '#value' => $this->t('Regenerate sitemap'),
       '#submit' => ['::generateSitemap'],
-    // Skip form-level validator.
+      // Skip form-level validator.
       '#validate' => [],
     ];
 
@@ -58,11 +46,37 @@ class SimplesitemapSettingsForm extends SimplesitemapFormBase {
 
     $form['simple_sitemap_settings']['settings']['cron_generate'] = [
       '#type' => 'checkbox',
-      '#title' => $this->t('Regenerate the sitemap on every cron run'),
+      '#title' => $this->t('Regenerate the sitemap during cron runs'),
       '#description' => $this->t('Uncheck this if you intend to only regenerate the sitemap manually or via drush.'),
       '#default_value' => $this->generator->getSetting('cron_generate', TRUE),
     ];
 
+    $form['simple_sitemap_settings']['settings']['cron_generate_interval'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Sitemap generation interval'),
+      '#description' => $this->t('The sitemap will be generated according to this interval.'),
+      '#default_value' => $this->generator->getSetting('cron_generate_interval', 0),
+      '#options' => [
+        0 => $this->t('On every cron run'),
+        1 => $this->t('Once an hour'),
+        3 => $this->t('Once every @hours hours', ['@hours' => 3]),
+        6 => $this->t('Once every @hours hours', ['@hours' => 6]),
+        12 => $this->t('Once every @hours hours', ['@hours' => 12]),
+        24 => $this->t('Once a day'),
+        48 => $this->t('Once every @days days', ['@days' => 48/24]),
+        72 => $this->t('Once every @days days', ['@days' => 72/24]),
+        96 => $this->t('Once every @days days', ['@days' => 96/24]),
+        120 => $this->t('Once every @days days', ['@days' => 120/24]),
+        144 => $this->t('Once every @days days', ['@days' => 144/24]),
+        168 => $this->t('Once a week'),
+      ],
+      '#states' => [
+        'visible' => [
+          ':input[name="cron_generate"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
     $form['simple_sitemap_settings']['advanced'] = [
       '#type' => 'details',
       '#title' => $this->t('Advanced settings'),
@@ -84,18 +98,11 @@ class SimplesitemapSettingsForm extends SimplesitemapFormBase {
       '#default_value' => $this->generator->getSetting('remove_duplicates', TRUE),
     ];
 
-    $form['simple_sitemap_settings']['advanced']['skip_untranslated'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Skip non-existent translations'),
-      '#description' => $this->t('If unchecked, entity links are generated for every language installed on the site, regardless whether the entity has been translated to a language or not.<br/>If checked, entity links are generated exclusively for languages the entity has been translated to. This setting has no effect on non-entity paths like homepage.'),
-      '#default_value' => $this->generator->getSetting('skip_untranslated', FALSE),
-    ];
-
     $form['simple_sitemap_settings']['advanced']['max_links'] = [
       '#type' => 'number',
       '#title' => $this->t('Maximum links in a sitemap'),
       '#min' => 1,
-      '#description' => $this->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."),
+      '#description' => $this->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.'),
       '#default_value' => $this->generator->getSetting('max_links', 2000),
     ];
 
@@ -103,11 +110,41 @@ class SimplesitemapSettingsForm extends SimplesitemapFormBase {
       '#type' => 'number',
       '#title' => $this->t('Refresh batch every n links'),
       '#min' => 1,
-      '#description' => $this->t("During sitemap generation, the batch process will issue a page refresh after n links processed to prevent PHP timeouts and memory exhaustion.<br/>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."),
+      '#description' => $this->t('During sitemap generation, the batch process will issue a page refresh after n links processed to prevent PHP timeouts and memory exhaustion.<br/>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.'),
       '#default_value' => $this->generator->getSetting('batch_process_limit', 1500),
       '#required' => TRUE,
     ];
 
+    $form['simple_sitemap_settings']['advanced']['languages'] = [
+      '#type' => 'details',
+      '#title' => $this->t('Language settings'),
+      '#open' => FALSE,
+    ];
+
+    $language_options = [];
+    foreach ($this->languageManager->getLanguages() as $language) {
+      if (!$language->isDefault()) {
+        $language_options[$language->getId()] = $language->getName();
+      }
+    }
+
+    $form['simple_sitemap_settings']['advanced']['languages']['skip_untranslated'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Skip non-existent translations'),
+      '#description' => $this->t('If checked, entity links are generated exclusively for languages the entity has been translated to as long as the language is not excluded below.<br/>Otherwise entity links are generated for every language installed on the site apart from languages excluded below.<br/>Bear in mind that non-entity paths like homepage will always be generated for every non-excluded language.'),
+      '#default_value' => $this->generator->getSetting('skip_untranslated', FALSE),
+    ];
+
+    $form['simple_sitemap_settings']['advanced']['languages']['excluded_languages'] = [
+      '#title' => $this->t('Exclude languages'),
+      '#type' => 'checkboxes',
+      '#options' => $language_options,
+      '#description' => !empty($language_options)
+        ? $this->t('There will be no links generated for languages checked here.')
+        : $this->t('There are no languages other than the default language <a href="@url">available</a>.', ['@url' => $GLOBALS['base_url'] . '/admin/config/regional/language']),
+      '#default_value' => $this->generator->getSetting('excluded_languages', []),
+    ];
+
     $this->formHelper->displayRegenerateNow($form['simple_sitemap_settings']);
 
     return parent::buildForm($form, $form_state);
@@ -119,7 +156,7 @@ class SimplesitemapSettingsForm extends SimplesitemapFormBase {
   public function validateForm(array &$form, FormStateInterface $form_state) {
     $base_url = $form_state->getValue('base_url');
     $form_state->setValue('base_url', rtrim($base_url, '/'));
-    if ($base_url != '' && !UrlHelper::isValid($base_url, TRUE)) {
+    if ($base_url !== '' && !UrlHelper::isValid($base_url, TRUE)) {
       $form_state->setErrorByName('base_url', t('The base URL is invalid.'));
     }
   }
@@ -128,9 +165,17 @@ class SimplesitemapSettingsForm extends SimplesitemapFormBase {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    foreach ($this->formSettings as $setting_name) {
+    foreach (['max_links',
+               'cron_generate',
+               'cron_generate_interval',
+               'remove_duplicates',
+               'skip_untranslated',
+               'batch_process_limit',
+               'base_url',] as $setting_name) {
       $this->generator->saveSetting($setting_name, $form_state->getValue($setting_name));
     }
+    $this->generator->saveSetting('excluded_languages', array_filter($form_state->getValue('excluded_languages')));
+
     parent::submitForm($form, $form_state);
 
     // Regenerate sitemaps according to user setting.