You are here

public function SimplesitemapManager::removeSitemapVariants in Simple XML sitemap 8.3

Parameters

null|array|string $variant_names: Limit removal by specific variants.

Return value

$this

Throws

\Drupal\Component\Plugin\Exception\PluginException

1 call to SimplesitemapManager::removeSitemapVariants()
SimplesitemapManager::addSitemapVariant in src/SimplesitemapManager.php

File

src/SimplesitemapManager.php, line 249

Class

SimplesitemapManager
Class SimplesitemapManager @package Drupal\simple_sitemap

Namespace

Drupal\simple_sitemap

Code

public function removeSitemapVariants($variant_names = NULL) {
  if (NULL === $variant_names || !empty((array) $variant_names)) {

    // Remove sitemap instances.
    $this
      ->removeSitemap($variant_names);
    if (NULL === $variant_names) {

      // Remove all variants and their bundle settings.
      foreach ([
        'variants',
        'bundle_settings',
        'custom_links',
      ] as $config_name_part) {
        foreach ($this->configFactory
          ->listAll("simple_sitemap.{$config_name_part}.") as $config_name) {
          $this->configFactory
            ->getEditable($config_name)
            ->delete();
        }
      }
    }
    else {

      // Remove bundle settings for specific variants.
      foreach ((array) $variant_names as $variant_name) {
        foreach ($this->configFactory
          ->listAll("simple_sitemap.bundle_settings.{$variant_name}.") as $config_name) {
          $this->configFactory
            ->getEditable($config_name)
            ->delete();
        }
      }

      // Remove custom links for specific variants.
      foreach ((array) $variant_names as $variant_name) {
        foreach ($this->configFactory
          ->listAll("simple_sitemap.custom_links.{$variant_name}") as $config_name) {
          $this->configFactory
            ->getEditable($config_name)
            ->delete();
        }
      }

      // Remove specific variants from configuration.
      $remove_variants = [];
      $variants = $this
        ->getSitemapVariants();
      foreach ((array) $variant_names as $variant_name) {
        if (isset($variants[$variant_name])) {
          $remove_variants[$variants[$variant_name]['type']][$variant_name] = $variant_name;
        }
      }
      foreach ($remove_variants as $type => $variants_per_type) {
        $this->configFactory
          ->getEditable("simple_sitemap.variants.{$type}")
          ->set('variants', array_diff_key($this
          ->getSitemapVariants($type, FALSE), $variants_per_type))
          ->save();
      }
    }

    // Remove bundle setting overrides for entities.
    $query = $this->db
      ->delete('simple_sitemap_entity_overrides');
    if (NULL !== $variant_names) {
      $query
        ->condition('type', (array) $variant_names, 'IN');
    }
    $query
      ->execute();

    // Remove default variant setting.
    if (NULL === $variant_names || in_array($this->settings
      ->getSetting('default_variant', ''), (array) $variant_names)) {
      $this->settings
        ->saveSetting('default_variant', '');
    }
  }
  return $this;
}