plus-8.x-4.x-dev/src/Core/Extension/ThemeInstaller.php
src/Core/Extension/ThemeInstaller.php
<?php namespace Drupal\plus\Core\Extension; use Drupal\Core\Asset\AssetCollectionOptimizerInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Config\ConfigInstallerInterface; use Drupal\Core\Config\ConfigManagerInterface; use Drupal\plus\Events\ThemeEvents; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Extension\ThemeHandlerInterface; use Drupal\Core\Extension\ThemeInstaller as CoreThemeInstaller; use Drupal\Core\Routing\RouteBuilderInterface; use Drupal\Core\State\StateInterface; use Drupal\plus\Events\ThemeEvent; use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * {@inheritdoc} */ class ThemeInstaller extends CoreThemeInstaller { /** * The Event Dispatcher service. * * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface */ protected $eventDispatcher; /** * {@inheritdoc} */ public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, ConfigInstallerInterface $config_installer, ModuleHandlerInterface $module_handler, ConfigManagerInterface $config_manager, AssetCollectionOptimizerInterface $css_collection_optimizer, RouteBuilderInterface $route_builder, LoggerInterface $logger, StateInterface $state, EventDispatcherInterface $event_dispatcher) { parent::__construct($theme_handler, $config_factory, $config_installer, $module_handler, $config_manager, $css_collection_optimizer, $route_builder, $logger, $state); $this->eventDispatcher = $event_dispatcher; } /** * {@inheritdoc} */ public function install(array $theme_list, $install_dependencies = TRUE) { // Install (before). $event = new ThemeEvent($theme_list); $this->eventDispatcher->dispatch(ThemeEvents::INSTALL, $event); if ($event->isPropagationStopped()) { return FALSE; } // Invoke original core method. $result = parent::install($theme_list, $install_dependencies); // Installed (after). $this->eventDispatcher->dispatch(ThemeEvents::INSTALLED, $event); return $result; } /** * {@inheritdoc} */ public function uninstall(array $theme_list) { // Uninstall (before). $event = new ThemeEvent($theme_list); $this->eventDispatcher->dispatch(ThemeEvents::UNINSTALL, $event); if ($event->isPropagationStopped()) { return; } // Invoke original core method. parent::uninstall($theme_list); // Uninstalled (after). $this->eventDispatcher->dispatch(ThemeEvents::UNINSTALLED, $event); } }