Skip to content
Snippets Groups Projects
Commit e63fecb7 authored by jurgenhaas's avatar jurgenhaas
Browse files

Fix dependency with lakedrops/d8-project-scaffold and the order of plugin events

parent 3d4fc559
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -72,22 +72,14 @@ class Handler { ...@@ -72,22 +72,14 @@ class Handler {
* Configure Drupal Project for Docker. * Configure Drupal Project for Docker.
* *
* @param ScriptEvent $event * @param ScriptEvent $event
* @param bool $force
*/ */
public function configureProject($event, $force = FALSE) { public function configureProject($event) {
// We only do the fancy stuff for developers // We only do the fancy stuff for developers
if (!$event->isDevMode()) { if (!$event->isDevMode()) {
return; 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(); $options = $this->getOptions();
$fs = new Filesystem(); $fs = new Filesystem();
$installationManager = $this->composer->getInstallationManager(); $installationManager = $this->composer->getInstallationManager();
...@@ -102,17 +94,28 @@ class Handler { ...@@ -102,17 +94,28 @@ class Handler {
// Directory where this plugin is being installed // Directory where this plugin is being installed
$pluginRoot = $installationManager->getInstallPath($this->getPackage('lakedrops/docker4drupal')); $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 // Link Drupal site's settings files
$twig_loader = new \Twig_Loader_Array([]); $twig_loader = new \Twig_Loader_Array([]);
$twig = new \Twig_Environment($twig_loader); $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; $file = $def['dest'] . '/' . $template;
if (!$fs->exists($file)) { if (!$fs->exists($file)) {
$twig_loader->setTemplate($template, file_get_contents($pluginRoot . '/templates/' . $template . '.twig')); $twig_loader->setTemplate($template, file_get_contents($pluginRoot . '/templates/' . $template . '.twig'));
$rendered = $twig->render($template, $options); $rendered = $twig->render($template, $options);
file_put_contents($file, $rendered); file_put_contents($file, $rendered);
} }
if (isset($def['link'])) { if (isset($def['link']) && ($def['link'] != $settingsPath)) {
$link = $def['link'] . '/' . $template; $link = $def['link'] . '/' . $template;
if (!$fs->exists($link)) { if (!$fs->exists($link)) {
$rel = substr($fs->makePathRelative($file, $projectRoot . '/' . $link), 3, -1); $rel = substr($fs->makePathRelative($file, $projectRoot . '/' . $link), 3, -1);
...@@ -123,11 +126,13 @@ class Handler { ...@@ -123,11 +126,13 @@ class Handler {
} }
// Make sure that settings.docker.php gets called from settings.php // Make sure that settings.docker.php gets called from settings.php
$settingsPhpFile = $webRoot . '/sites/default/settings.php'; $settingsPhpFile = $settingsPath . '/settings.php';
$settingsPhp = file_get_contents($settingsPhpFile); if ($fs->exists(($settingsPhpFile))) {
if (strpos($settingsPhp, 'settings.docker.php') === FALSE) { $settingsPhp = file_get_contents($settingsPhpFile);
$settingsPhp .= "\n\nif (file_exists(__DIR__ . '/settings.docker.php')) {include __DIR__ . '/settings.docker.php';}\n"; if (strpos($settingsPhp, 'settings.docker.php') === FALSE) {
file_put_contents($settingsPhpFile, $settingsPhp); $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 // Initialize local git working copy
...@@ -141,10 +146,10 @@ class Handler { ...@@ -141,10 +146,10 @@ class Handler {
} }
protected function getFiles($projectRoot, $webRoot) { protected function getFiles($projectRoot, $webRoot, $settingsPath) {
return [ return [
'settings.docker.php' => [ 'settings.docker.php' => [
'dest' => $projectRoot . '/settings/default', 'dest' => $projectRoot . '/' . $settingsPath,
'link' => $webRoot . '/sites/default', 'link' => $webRoot . '/sites/default',
], ],
'docker-compose.yml' => [ 'docker-compose.yml' => [
...@@ -161,27 +166,27 @@ class Handler { ...@@ -161,27 +166,27 @@ class Handler {
protected function getOptions() { protected function getOptions() {
$extra = $this->composer->getPackage()->getExtra() + ['docker4drupal' => []]; $extra = $this->composer->getPackage()->getExtra() + ['docker4drupal' => []];
$options = $extra['docker4drupal'] + [ $options = $extra['docker4drupal'] + [
'port' => 8000, 'port' => 8000,
'drupal' => [ 'drupal' => [
'version' => '8', 'version' => '8',
], ],
'php' => [ 'php' => [
'version' => '7.0',# 5.3|5.6|7.1 'version' => '7.0',# 5.3|5.6|7.1
'xdebug' => 1, 'xdebug' => 1,
], ],
'nginx' => [ 'nginx' => [
'version' => '1.10', 'version' => '1.10',
], ],
'varnish' => [ 'varnish' => [
'enable' => 0, 'enable' => 0,
], ],
'solr' => [ 'solr' => [
'enable' => 0, 'enable' => 0,
], ],
'node' => [ 'node' => [
'enable' => 0, 'enable' => 0,
], ],
]; ];
return $options; return $options;
} }
......
...@@ -35,8 +35,8 @@ class Plugin implements PluginInterface, EventSubscriberInterface { ...@@ -35,8 +35,8 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
public static function getSubscribedEvents() { public static function getSubscribedEvents() {
return array( return array(
ScriptEvents::POST_CREATE_PROJECT_CMD => 'configureProject', ScriptEvents::POST_CREATE_PROJECT_CMD => 'configureProject',
ScriptEvents::POST_INSTALL_CMD => 'configureProjectForce', ScriptEvents::POST_INSTALL_CMD => 'configureProject',
ScriptEvents::POST_UPDATE_CMD => 'configureProjectForce', ScriptEvents::POST_UPDATE_CMD => 'configureProject',
); );
} }
...@@ -49,15 +49,6 @@ class Plugin implements PluginInterface, EventSubscriberInterface { ...@@ -49,15 +49,6 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
$this->handler->configureProject($event); $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. * Script callback for putting in composer scripts to configure the project.
* *
...@@ -65,7 +56,7 @@ class Plugin implements PluginInterface, EventSubscriberInterface { ...@@ -65,7 +56,7 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
*/ */
public static function config($event) { public static function config($event) {
$handler = new Handler($event->getComposer(), $event->getIO()); $handler = new Handler($event->getComposer(), $event->getIO());
$handler->configureProject($event, TRUE); $handler->configureProject($event);
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment