You are here

public function SimpleSitemapSyncExtend::extendPush in CMS Content Sync 8

Same name and namespace in other branches
  1. 2.1.x modules/cms_content_sync_simple_sitemap/src/EventSubscriber/SimpleSitemapSyncExtend.php \Drupal\cms_content_sync_simple_sitemap\EventSubscriber\SimpleSitemapSyncExtend::extendPush()
  2. 2.0.x modules/cms_content_sync_simple_sitemap/src/EventSubscriber/SimpleSitemapSyncExtend.php \Drupal\cms_content_sync_simple_sitemap\EventSubscriber\SimpleSitemapSyncExtend::extendPush()

Alter the push to include the sitemap settings, if enabled for the entity type and cached by the form values. Will not support programmatically added sitemap settings, so that's not supported out of the box.

Parameters

\Drupal\cms_content_sync\Event\BeforeEntityPush $event:

Throws

\Drupal\Component\Plugin\Exception\PluginNotFoundException

File

modules/cms_content_sync_simple_sitemap/src/EventSubscriber/SimpleSitemapSyncExtend.php, line 113

Class

SimpleSitemapSyncExtend
Event subscriptions for events dispatched by Content Sync.

Namespace

Drupal\cms_content_sync_simple_sitemap\EventSubscriber

Code

public function extendPush(BeforeEntityPush $event) {
  $intent = $event->intent;
  $entity = $event->entity;
  if (!$this
    ->sitemapSupportsEntityType($entity
    ->getEntityTypeId(), $entity
    ->bundle())) {
    return;
  }

  // Use values from the entity form if present as the database might not be updated yet.
  $values = _cms_content_sync_submit_cache($entity
    ->getEntityTypeId(), $entity
    ->uuid());

  // Push isn't related to submitting the entity form. So we can take the values out of the database.
  if (empty($values)) {

    /**
     * @var \Drupal\simple_sitemap\Simplesitemap $generator
     */
    $generator = \Drupal::service('simple_sitemap.generator');
    $values = $generator
      ->getEntityInstanceSettings($entity
      ->getEntityTypeId(), $entity
      ->id());
    $intent
      ->setProperty(self::PROPERTY_NAME, $values);
    return;
  }
  else {

    // Fix for values appearing in a sub array on a commerce product entity.
    $values = isset($values['simple_sitemap']) ? $values['simple_sitemap'] : $values;
  }
  if (empty($values)) {
    $intent
      ->setProperty(self::PROPERTY_NAME, NULL);
    return;
  }
  $values = [
    'index' => empty($values['simple_sitemap_index_content']) ? empty($values['index_default_node_settings']) ? NULL : $values['index_default_node_settings'] : $values['simple_sitemap_index_content'],
    'priority' => empty($values['simple_sitemap_priority']) ? empty($values['priority_default_node_settings']) ? NULL : $values['priority_default_node_settings'] : $values['simple_sitemap_priority'],
    'changefreq' => empty($values['simple_sitemap_changefreq']) ? empty($values['changefreq_default_node_settings']) ? NULL : $values['changefreq_default_node_settings'] : $values['simple_sitemap_changefreq'],
    'include_images' => empty($values['simple_sitemap_include_images']) ? empty($values['include_images_default_node_settings']) ? NULL : $values['include_images_default_node_settings'] : $values['simple_sitemap_include_images'],
  ];
  $intent
    ->setProperty(self::PROPERTY_NAME, $values);
}