diff --git a/core/lib/Drupal/Core/Extension/ThemeInstaller.php b/core/lib/Drupal/Core/Extension/ThemeInstaller.php index b3b391e..d141d82 100644 --- a/core/lib/Drupal/Core/Extension/ThemeInstaller.php +++ b/core/lib/Drupal/Core/Extension/ThemeInstaller.php @@ -61,6 +61,11 @@ class ThemeInstaller implements ThemeInstallerInterface { */ protected $logger; + /** + * @var \Drupal\Core\Extension\ModuleInstallerInterface|NULL + */ + protected $moduleInstaller; + /** * Constructs a new ThemeInstaller. @@ -87,7 +92,7 @@ class ThemeInstaller implements ThemeInstallerInterface { * @param \Drupal\Core\State\StateInterface $state * The state store. */ - 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) { + 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, ModuleInstallerInterface $module_installer = NULL) { $this->themeHandler = $theme_handler; $this->configFactory = $config_factory; $this->configInstaller = $config_installer; @@ -97,6 +102,17 @@ public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryI $this->routeBuilder = $route_builder; $this->logger = $logger; $this->state = $state; + $this->moduleInstaller = $module_installer; + } + + /** + * @return \Drupal\Core\Extension\ModuleInstallerInterface + */ + protected function getModuleInstaller() { + if (!isset($this->moduleInstaller)) { + $this->moduleInstaller = \Drupal::service('module_installer'); + } + return $this->moduleInstaller; } /** @@ -123,6 +139,10 @@ public function install(array $theme_list, $install_dependencies = TRUE) { } while (list($theme) = each($theme_list)) { + $module_dependencies = isset($theme_data[$theme]->requires['modules']) ? $theme_data[$theme]->requires['modules'] : []; + $this->moduleInstaller->install($module_dependencies); + unset($theme_data[$theme]->requires['modules']); + // Add dependencies to the list. The new themes will be processed as // the while loop continues. foreach (array_keys($theme_data[$theme]->requires) as $dependency) {