Version 1
[yaffs-website] / web / core / modules / color / src / EventSubscriber / ColorConfigCacheInvalidator.php
diff --git a/web/core/modules/color/src/EventSubscriber/ColorConfigCacheInvalidator.php b/web/core/modules/color/src/EventSubscriber/ColorConfigCacheInvalidator.php
new file mode 100644 (file)
index 0000000..46b67a1
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+namespace Drupal\color\EventSubscriber;
+
+use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
+use Drupal\Core\Config\ConfigCrudEvent;
+use Drupal\Core\Config\ConfigEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * A subscriber invalidating cache tags when color config objects are saved.
+ */
+class ColorConfigCacheInvalidator implements EventSubscriberInterface {
+
+  /**
+   * The cache tags invalidator.
+   *
+   * @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface
+   */
+  protected $cacheTagsInvalidator;
+
+  /**
+   * Constructs a ColorConfigCacheInvalidator object.
+   *
+   * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_tags_invalidator
+   *   The cache tags invalidator.
+   */
+  public function __construct(CacheTagsInvalidatorInterface $cache_tags_invalidator) {
+    $this->cacheTagsInvalidator = $cache_tags_invalidator;
+  }
+
+  /**
+   * Invalidate cache tags when a color theme config object changes.
+   *
+   * @param \Drupal\Core\Config\ConfigCrudEvent $event
+   *   The Event to process.
+   */
+  public function onChange(ConfigCrudEvent $event) {
+    // Changing a theme's color settings causes the theme's asset library
+    // containing the color CSS file to be altered to use a different file.
+    if (strpos($event->getConfig()->getName(), 'color.theme.') === 0) {
+      $this->cacheTagsInvalidator->invalidateTags(['library_info']);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events[ConfigEvents::SAVE][] = ['onChange'];
+    $events[ConfigEvents::DELETE][] = ['onChange'];
+
+    return $events;
+  }
+
+}