Mercurial > hg > isophonics-drupal-site
diff core/modules/system/src/SystemConfigSubscriber.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/system/src/SystemConfigSubscriber.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,92 @@ +<?php + +namespace Drupal\system; + +use Drupal\Core\Config\ConfigCrudEvent; +use Drupal\Core\Config\ConfigEvents; +use Drupal\Core\Config\ConfigImporterEvent; +use Drupal\Core\Routing\RouteBuilderInterface; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * System Config subscriber. + */ +class SystemConfigSubscriber implements EventSubscriberInterface { + use StringTranslationTrait; + + /** + * The router builder. + * + * @var \Drupal\Core\Routing\RouteBuilderInterface + */ + protected $routerBuilder; + + /** + * Constructs the SystemConfigSubscriber. + * + * @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder + * The router builder service. + */ + public function __construct(RouteBuilderInterface $router_builder) { + $this->routerBuilder = $router_builder; + } + + /** + * Rebuilds the router when the default or admin theme is changed. + * + * @param \Drupal\Core\Config\ConfigCrudEvent $event + */ + public function onConfigSave(ConfigCrudEvent $event) { + $saved_config = $event->getConfig(); + if ($saved_config->getName() == 'system.theme' && ($event->isChanged('admin') || $event->isChanged('default'))) { + $this->routerBuilder->setRebuildNeeded(); + } + } + + /** + * Checks that the configuration synchronization is valid. + * + * This event listener prevents deleting all configuration. If there is + * nothing to import then event propagation is stopped because there is no + * config import to validate. + * + * @param \Drupal\Core\Config\ConfigImporterEvent $event + * The config import event. + */ + public function onConfigImporterValidateNotEmpty(ConfigImporterEvent $event) { + $importList = $event->getConfigImporter()->getStorageComparer()->getSourceStorage()->listAll(); + if (empty($importList)) { + $event->getConfigImporter()->logError($this->t('This import is empty and if applied would delete all of your configuration, so has been rejected.')); + $event->stopPropagation(); + } + } + + /** + * Checks that the configuration synchronization is valid. + * + * This event listener checks that the system.site:uuid's in the source and + * target match. + * + * @param ConfigImporterEvent $event + * The config import event. + */ + public function onConfigImporterValidateSiteUUID(ConfigImporterEvent $event) { + if (!$event->getConfigImporter()->getStorageComparer()->validateSiteUuid()) { + $event->getConfigImporter()->logError($this->t('Site UUID in source storage does not match the target storage.')); + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[ConfigEvents::SAVE][] = ['onConfigSave', 0]; + // The empty check has a high priority so that it can stop propagation if + // there is no configuration to import. + $events[ConfigEvents::IMPORT_VALIDATE][] = ['onConfigImporterValidateNotEmpty', 512]; + $events[ConfigEvents::IMPORT_VALIDATE][] = ['onConfigImporterValidateSiteUUID', 256]; + return $events; + } + +}