Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / simple_sitemap / simple_sitemap.module
index d10a41d0b2bfdaada51c3074fb04a9a1401b7a57..fc0c7a39074fef6591aa54b3a41811ec7125ab5c 100644 (file)
@@ -9,9 +9,14 @@ use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\system\MenuInterface;
+use Drupal\language\ConfigurableLanguageInterface;
 
 /**
- * Implements hook_help.
+ *Implements hook_help.
+ *
+ * @param $route_name
+ * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+ * @return \Drupal\Component\Render\MarkupInterface|null
  */
 function simple_sitemap_help($route_name, RouteMatchInterface $route_match) {
   return $route_name === 'help.page.simple_sitemap' ?
@@ -22,14 +27,18 @@ function simple_sitemap_help($route_name, RouteMatchInterface $route_match) {
  * Implements hook_form_alter.
  *
  * Adds sitemap settings to entity types that are supported via plugins.
+ *
+ * @param $form
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
+ * @param $form_id
  */
 function simple_sitemap_form_alter(&$form, FormStateInterface $form_state, $form_id) {
 
   /**
    * @var Drupal\simple_sitemap\Form\FormHelper $f
    */
-  $f = \Drupal::service('simple_sitemap.form_helper')->processForm($form_state);
-  if (!$f->alteringForm()) {
+  $f = \Drupal::service('simple_sitemap.form_helper');
+  if (!$f->processForm($form_state)) {
     return;
   }
 
@@ -37,12 +46,12 @@ function simple_sitemap_form_alter(&$form, FormStateInterface $form_state, $form
     '#type' => 'details',
     '#group' => isset($form['additional_settings']) ? 'additional_settings' : 'advanced',
     '#title' => t('Simple XML sitemap'),
-    '#description' => $f->getEntityCategory() == 'instance' ? t('Settings for this entity can be overridden here.') : '',
+    '#description' => $f->getEntityCategory() === 'instance' ? t('Settings for this entity can be overridden here.') : '',
   ];
 
   // Attach some js magic to forms.
   // todo: JS not working on comment entity form, hence disabling.
-  if ($f->getEntityTypeId() != 'comment' || $f->getEntityCategory() != 'instance') {
+  if ($f->getEntityTypeId() !== 'comment' || $f->getEntityCategory() !== 'instance') {
     $form['#attached']['library'][] = 'simple_sitemap/form';
   }
 
@@ -58,7 +67,7 @@ function simple_sitemap_form_alter(&$form, FormStateInterface $form_state, $form
   // Add submission handler.
   if (isset($form['actions']['submit']['#submit'])) {
     foreach (array_keys($form['actions']) as $action) {
-      if ($action != 'preview'
+      if ($action !== 'preview'
         && isset($form['actions'][$action]['#type'])
         && $form['actions'][$action]['#type'] === 'submit') {
         $form['actions'][$action]['#submit'][] = 'simple_sitemap_entity_form_submit';
@@ -73,13 +82,19 @@ function simple_sitemap_form_alter(&$form, FormStateInterface $form_state, $form
 
 /**
  * Form submission handler called in hook_form_alter.
+ *
+ * @param $form
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
  */
 function simple_sitemap_entity_form_submit($form, FormStateInterface &$form_state) {
 
   /**
    * @var Drupal\simple_sitemap\Form\FormHelper $f
    */
-  $f = \Drupal::service('simple_sitemap.form_helper')->processForm($form_state);
+  $f = \Drupal::service('simple_sitemap.form_helper');
+  if (!$f->processForm($form_state)) {
+    return;
+  }
 
   $values = $form_state->getValues();
 
@@ -94,16 +109,20 @@ function simple_sitemap_entity_form_submit($form, FormStateInterface &$form_stat
      */
     $generator = \Drupal::service('simple_sitemap.generator');
 
+    $settings = [
+      'index' => $values['simple_sitemap_index_content'],
+      'priority' => $values['simple_sitemap_priority'],
+      'changefreq' => $values['simple_sitemap_changefreq'],
+      'include_images' => $values['simple_sitemap_include_images'],
+    ];
+
     switch ($f->getEntityCategory()) {
 
       case 'bundle':
         $generator->setBundleSettings(
           $f->getEntityTypeId(),
           !empty($f->getBundleName()) ? $f->getBundleName() : $f->getFormEntityId(),
-          [
-            'index' => $values['simple_sitemap_index_content'],
-            'priority' => $values['simple_sitemap_priority']
-          ]
+          $settings
         );
         break;
 
@@ -111,10 +130,7 @@ function simple_sitemap_entity_form_submit($form, FormStateInterface &$form_stat
         $generator->setEntityInstanceSettings(
           $f->getEntityTypeId(),
           !empty($f->getInstanceId()) ? $f->getInstanceId() : $f->getFormEntityId(),
-          [
-            'index' => $values['simple_sitemap_index_content'],
-            'priority' => $values['simple_sitemap_priority']
-          ]
+          $settings
         );
         break;
     }
@@ -136,7 +152,30 @@ function simple_sitemap_cron() {
    */
   $generator = \Drupal::service('simple_sitemap.generator');
   if ($generator->getSetting('cron_generate')) {
-    $generator->generateSitemap('backend');
+    $interval = (int) $generator->getSetting('cron_generate_interval', 0) * 60 * 60;
+    $requestTime = \Drupal::service('datetime.time')->getRequestTime();
+    if ($interval === 0 || ((\Drupal::state()->get('simple_sitemap.last_cron_generate', 0) + $interval) <= $requestTime)) {
+      \Drupal::state()->set('simple_sitemap.last_cron_generate', $requestTime);
+      $generator->generateSitemap('backend');
+    }
+  }
+}
+
+/**
+ * Implements hook_ENTITY_TYPE_delete().
+ *
+ * When a language is removed from the system remove it also from settings.
+ */
+function simple_sitemap_configurable_language_delete(ConfigurableLanguageInterface $language) {
+
+  /**
+   * @var \Drupal\simple_sitemap\Simplesitemap $generator
+   */
+  $generator = \Drupal::service('simple_sitemap.generator');
+  $excluded_languages = $generator->getSetting('excluded_languages');
+  if (isset($excluded_languages[$language->id()])) {
+    unset($excluded_languages[$language->id()]);
+    $generator->saveSetting('excluded_languages', $excluded_languages);
   }
 }
 
@@ -162,6 +201,9 @@ function simple_sitemap_entity_delete(EntityInterface $entity) {
  * Implements hook_entity_bundle_delete().
  *
  * Removes settings of the removed bundle.
+ *
+ * @param string $entity_type_id
+ * @param string $bundle
  */
 function simple_sitemap_entity_bundle_delete($entity_type_id, $bundle) {
   simple_sitemap_delete_bundle_config($entity_type_id, $bundle);
@@ -198,9 +240,9 @@ function simple_sitemap_delete_bundle_config($entity_type_id, $bundle) {
     // Delete bundle settings.
     \Drupal::service('config.factory')->getEditable("simple_sitemap.bundle_settings.$entity_type_id.$bundle")->delete();
 
-    $message = "You may want to <a href='@url'>regenerate</a> your XML sitemap now.";
+    $message = 'You may want to <a href="@url">regenerate</a> your XML sitemap now.';
     if ($generator->getSetting('cron_generate')) {
-      $message .= ' Otherwise the sitemap will be regenerated on the next cron run.';
+      $message .= ' Otherwise the sitemap will be regenerated during a future cron run.';
     }
     drupal_set_message(t($message, ['@url' => $GLOBALS['base_url'] . '/admin/config/search/simplesitemap']));
   }
@@ -212,6 +254,6 @@ function simple_sitemap_delete_bundle_config($entity_type_id, $bundle) {
 function simple_sitemap_robotstxt() {
   return [
     '# XML sitemap',
-    'Sitemap: ' . $GLOBALS['base_url'] . '/sitemap.xml',
+    'Sitemap: ' . $GLOBALS['base_url'] . '/sitemap.xml', //todo: Use base URL setting?
   ];
 }