From c56c88a587f3441abc800d9a51df59ac62ffec67 Mon Sep 17 00:00:00 2001 From: Bob den Otter Date: Wed, 29 Jul 2020 08:04:24 +0200 Subject: [PATCH 1/2] Allow extensions to have an `install` method, which is called on installation (to install assets, for example) --- src/Command/ExtensionsConfigureCommand.php | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Command/ExtensionsConfigureCommand.php b/src/Command/ExtensionsConfigureCommand.php index 22ce9fbcf..1f0ef1d70 100644 --- a/src/Command/ExtensionsConfigureCommand.php +++ b/src/Command/ExtensionsConfigureCommand.php @@ -48,17 +48,19 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->copyExtensionConfig($extensions); } + $this->runExtensionInstall($extensions); + return 0; } - public function copyExtensionConfig(array $packages): void + private function copyExtensionConfig(array $packages): void { // @todo: Combine this with Bolt\Extension\ConfigTrait.php foreach ($packages as $package) { $path = $this->getPackagePath($package); $origin = $this->getRelativePath($path) . '/config/config.yaml'; - [$namespace, $name] = explode('\\', mb_strtolower($this->getNamespace($package))); + [$namespace, $name] = explode('\\', mb_strtolower($this->getNamespace($package). '\\')); $destination = $this->getExtensionConfigPath($namespace, $name); if (file_exists($origin) && ! file_exists($destination)) { @@ -67,7 +69,7 @@ public function copyExtensionConfig(array $packages): void } } - public function copyExtensionRoutesAndServices(array $packages): void + private function copyExtensionRoutesAndServices(array $packages): void { $oldExtensionsRoutes = glob($this->getExtensionRoutesPath()); $oldExtensionsServices = glob($this->getExtensionServicesPath()); @@ -97,6 +99,15 @@ public function copyExtensionRoutesAndServices(array $packages): void array_map('unlink', $oldExtensionsServices); } + private function runExtensionInstall(array $packages): void + { + foreach ($packages as $package) { + if (method_exists($package, 'install')) { + $package->install(); + } + } + } + private function getRelativePath(string $path): string { return Path::makeRelative($path, $this->projectDir); @@ -122,7 +133,11 @@ private function getExtensionServicesPath(string $path = '*'): string private function getExtensionConfigPath(string $namespace, string $name): string { - return $this->projectDir . '/config/extensions/' . $namespace . '-' . $name . '.yaml'; + return sprintf("%s/config/extensions/%s%s%s.yaml", + $this->projectDir, + $namespace, + (! empty($name) ? '-' : '' ), + $name); } private function getPackagePath($package): string From 86cbde2107fd4e3bff66ecd35edb8c3ab7ddab1a Mon Sep 17 00:00:00 2001 From: Bob den Otter Date: Wed, 29 Jul 2020 09:50:07 +0200 Subject: [PATCH 2/2] CS fixes --- src/Command/ExtensionsConfigureCommand.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Command/ExtensionsConfigureCommand.php b/src/Command/ExtensionsConfigureCommand.php index 1f0ef1d70..a8c580eb4 100644 --- a/src/Command/ExtensionsConfigureCommand.php +++ b/src/Command/ExtensionsConfigureCommand.php @@ -60,7 +60,7 @@ private function copyExtensionConfig(array $packages): void $path = $this->getPackagePath($package); $origin = $this->getRelativePath($path) . '/config/config.yaml'; - [$namespace, $name] = explode('\\', mb_strtolower($this->getNamespace($package). '\\')); + [$namespace, $name] = explode('\\', mb_strtolower($this->getNamespace($package) . '\\')); $destination = $this->getExtensionConfigPath($namespace, $name); if (file_exists($origin) && ! file_exists($destination)) { @@ -133,10 +133,10 @@ private function getExtensionServicesPath(string $path = '*'): string private function getExtensionConfigPath(string $namespace, string $name): string { - return sprintf("%s/config/extensions/%s%s%s.yaml", + return sprintf('%s/config/extensions/%s%s%s.yaml', $this->projectDir, $namespace, - (! empty($name) ? '-' : '' ), + (! empty($name) ? '-' : ''), $name); }