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 {
* 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;
}
......
......@@ -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);
}
}
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