From e63fecb7e090a4a3c1067eb292741df4ffbc76d8 Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen@paragon-es.de> Date: Mon, 3 Apr 2017 14:01:13 +0200 Subject: [PATCH] Fix dependency with lakedrops/d8-project-scaffold and the order of plugin events --- src/Handler.php | 83 ++++++++++++++++++++++++++----------------------- src/Plugin.php | 15 ++------- 2 files changed, 47 insertions(+), 51 deletions(-) diff --git a/src/Handler.php b/src/Handler.php index 64561fd..20bc100 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -72,22 +72,14 @@ class Handler { * Configure Drupal Project for Docker. * * @param ScriptEvent $event - * @param bool $force */ - public function configureProject($event, $force = FALSE) { + public function configureProject($event) { // We only do the fancy stuff for developers if (!$event->isDevMode()) { return; } - // If the d8-project-scaffold plugin is present we only execute this one - // if $force is TRUE. This way we can make sure that we get executed after - // d8-project-scaffold. - if ($this->getPackage('lakedrops/d8-project-scaffold') && !$force) { - return; - } - $options = $this->getOptions(); $fs = new Filesystem(); $installationManager = $this->composer->getInstallationManager(); @@ -102,17 +94,28 @@ class Handler { // Directory where this plugin is being installed $pluginRoot = $installationManager->getInstallPath($this->getPackage('lakedrops/docker4drupal')); + // If the d8-project-scaffold plugin is present we only execute this one + // if $force is TRUE. This way we can make sure that we get executed after + // d8-project-scaffold. + $settingsPath = $webRoot . '/sites/default'; + if ($this->getPackage('lakedrops/d8-project-scaffold')) { + if (!$fs->exists($projectRoot . '/settings/default')) { + return; + } + $settingsPath = 'settings/default'; + } + // Link Drupal site's settings files $twig_loader = new \Twig_Loader_Array([]); $twig = new \Twig_Environment($twig_loader); - foreach ($this->getFiles($projectRoot, $webRoot) as $template => $def) { + foreach ($this->getFiles($projectRoot, $webRoot, $settingsPath) as $template => $def) { $file = $def['dest'] . '/' . $template; if (!$fs->exists($file)) { $twig_loader->setTemplate($template, file_get_contents($pluginRoot . '/templates/' . $template . '.twig')); $rendered = $twig->render($template, $options); file_put_contents($file, $rendered); } - if (isset($def['link'])) { + if (isset($def['link']) && ($def['link'] != $settingsPath)) { $link = $def['link'] . '/' . $template; if (!$fs->exists($link)) { $rel = substr($fs->makePathRelative($file, $projectRoot . '/' . $link), 3, -1); @@ -123,11 +126,13 @@ class Handler { } // Make sure that settings.docker.php gets called from settings.php - $settingsPhpFile = $webRoot . '/sites/default/settings.php'; - $settingsPhp = file_get_contents($settingsPhpFile); - if (strpos($settingsPhp, 'settings.docker.php') === FALSE) { - $settingsPhp .= "\n\nif (file_exists(__DIR__ . '/settings.docker.php')) {include __DIR__ . '/settings.docker.php';}\n"; - file_put_contents($settingsPhpFile, $settingsPhp); + $settingsPhpFile = $settingsPath . '/settings.php'; + if ($fs->exists(($settingsPhpFile))) { + $settingsPhp = file_get_contents($settingsPhpFile); + if (strpos($settingsPhp, 'settings.docker.php') === FALSE) { + $settingsPhp .= "\n\nif (file_exists(__DIR__ . '/settings.docker.php')) {include __DIR__ . '/settings.docker.php';}\n"; + file_put_contents($settingsPhpFile, $settingsPhp); + } } // Initialize local git working copy @@ -141,10 +146,10 @@ class Handler { } - protected function getFiles($projectRoot, $webRoot) { + protected function getFiles($projectRoot, $webRoot, $settingsPath) { return [ 'settings.docker.php' => [ - 'dest' => $projectRoot . '/settings/default', + 'dest' => $projectRoot . '/' . $settingsPath, 'link' => $webRoot . '/sites/default', ], 'docker-compose.yml' => [ @@ -161,27 +166,27 @@ class Handler { protected function getOptions() { $extra = $this->composer->getPackage()->getExtra() + ['docker4drupal' => []]; $options = $extra['docker4drupal'] + [ - 'port' => 8000, - 'drupal' => [ - 'version' => '8', - ], - 'php' => [ - 'version' => '7.0',# 5.3|5.6|7.1 - 'xdebug' => 1, - ], - 'nginx' => [ - 'version' => '1.10', - ], - 'varnish' => [ - 'enable' => 0, - ], - 'solr' => [ - 'enable' => 0, - ], - 'node' => [ - 'enable' => 0, - ], - ]; + 'port' => 8000, + 'drupal' => [ + 'version' => '8', + ], + 'php' => [ + 'version' => '7.0',# 5.3|5.6|7.1 + 'xdebug' => 1, + ], + 'nginx' => [ + 'version' => '1.10', + ], + 'varnish' => [ + 'enable' => 0, + ], + 'solr' => [ + 'enable' => 0, + ], + 'node' => [ + 'enable' => 0, + ], + ]; return $options; } diff --git a/src/Plugin.php b/src/Plugin.php index 858eb53..5897d0d 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -35,8 +35,8 @@ class Plugin implements PluginInterface, EventSubscriberInterface { public static function getSubscribedEvents() { return array( ScriptEvents::POST_CREATE_PROJECT_CMD => 'configureProject', - ScriptEvents::POST_INSTALL_CMD => 'configureProjectForce', - ScriptEvents::POST_UPDATE_CMD => 'configureProjectForce', + ScriptEvents::POST_INSTALL_CMD => 'configureProject', + ScriptEvents::POST_UPDATE_CMD => 'configureProject', ); } @@ -49,15 +49,6 @@ class Plugin implements PluginInterface, EventSubscriberInterface { $this->handler->configureProject($event); } - /** - * Configure project event callback. - * - * @param \Composer\Script\Event $event - */ - public function configureProjectForce($event) { - $this->handler->configureProject($event, TRUE); - } - /** * Script callback for putting in composer scripts to configure the project. * @@ -65,7 +56,7 @@ class Plugin implements PluginInterface, EventSubscriberInterface { */ public static function config($event) { $handler = new Handler($event->getComposer(), $event->getIO()); - $handler->configureProject($event, TRUE); + $handler->configureProject($event); } } -- GitLab