Skip to content

Commit

Permalink
Merge pull request #75 from openeuropa/OPENEUROPA-1140
Browse files Browse the repository at this point in the history
OPENEUROPA-1140: Add pre and post install perms commands.
  • Loading branch information
upchuk authored Oct 2, 2018
2 parents 77372d2 + 9d31614 commit 30bff59
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 4 deletions.
5 changes: 5 additions & 0 deletions config/commands/drupal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ command:
database-password: ${drupal.database.password}
sites-subdir: ${drupal.site.sites_subdir}
config-dir: ${drupal.site.config_dir}
skip-permissions-setup: ${drupal.site.skip_permissions_setup}
drush-setup:
options:
config-dir: ${drupal.root}/drush
Expand All @@ -32,3 +33,7 @@ command:
sites-subdir: ${drupal.site.sites_subdir}
settings-override-file: ${drupal.site.settings_override_file}
force: ${drupal.site.force}
skip-permissions-setup: ${drupal.site.skip_permissions_setup}
permissions-setup:
options:
sites-subdir: ${drupal.site.sites_subdir}
62 changes: 58 additions & 4 deletions src/Commands/DrupalCommands.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ public function setRuntimeConfig(ConsoleCommandEvent $event)
public function validateSiteInstall(CommandData $commandData)
{
$input = $commandData->input();

// Validate if permissions will be set up.
if (!$input->getOption('skip-permissions-setup')) {
return;
}

$siteDirectory = implode('/', [
getcwd(),
$input->getOption('root'),
Expand Down Expand Up @@ -126,6 +132,7 @@ public function siteInstall(array $options = [
'database-name' => InputOption::VALUE_REQUIRED,
'sites-subdir' => InputOption::VALUE_REQUIRED,
'config-dir' => InputOption::VALUE_REQUIRED,
'skip-permissions-setup' => false,
])
{
if ($options['database-type']) {
Expand Down Expand Up @@ -155,11 +162,17 @@ public function siteInstall(array $options = [
$task->setConfigDir($options['config-dir']);
}

return $this->collectionBuilder()->addTaskList([
// Define collection of tasks.
$collection = [
$this->sitePreInstall(),
$task->siteInstall(),
$this->sitePostInstall(),
]);
];
if (!$options['skip-permissions-setup']) {
$collection[] = $this->permissionsSetup($options);
}
$collection[] = $task->siteInstall();
$collection[] = $this->sitePostInstall();

return $this->collectionBuilder()->addTaskList($collection);
}

/**
Expand Down Expand Up @@ -281,6 +294,7 @@ public function drushSetup(array $options = [
* @option sites-subdir Drupal site subdirectory.
* @option settings-override-file Drupal site settings override filename.
* @option force Drupal force generation of a new settings.php.
* @option skip-permissions-setup Drupal skip permissions setup.
*
* @param array $options
*
Expand All @@ -291,6 +305,7 @@ public function settingsSetup(array $options = [
'sites-subdir' => InputOption::VALUE_REQUIRED,
'settings-override-file' => InputOption::VALUE_REQUIRED,
'force' => false,
'skip-permissions-setup' => false,
])
{
$settings_default_path = $options['root'] . '/sites/' . $options['sites-subdir'] . '/default.settings.php';
Expand Down Expand Up @@ -327,6 +342,45 @@ public function settingsSetup(array $options = [
$this->getConfig()
)->setConfigKey('drupal.settings');

if (!$options['skip-permissions-setup']) {
$collection[] = $this->permissionsSetup($options);
}

return $this->collectionBuilder()->addTaskList($collection);
}

/**
* Setup Drupal permissions.
*
* This command will set the necessary permissions on the default folder.
* Note that the chmod command takes decimal values.
*
* @command drupal:permissions-setup
*
* @option root Drupal root.
* @option sites-subdir Drupal site subdirectory.
* @option skip-permissions-setup Drupal skip permissions setup.
*
* @param array $options
*
* @return \Robo\Collection\CollectionBuilder
*/
public function permissionsSetup(array $options = [
'root' => InputOption::VALUE_REQUIRED,
'sites-subdir' => InputOption::VALUE_REQUIRED,
])
{
$subdirPath = $options['root'] . '/sites/' . $options['sites-subdir'];

// Define collection of tasks.
$collection = [
$this->taskFilesystemStack()->chmod($subdirPath, '509', 0000, true),
];

if (file_exists($subdirPath . '/settings.php')) {
$collection[] = $this->taskFilesystemStack()->chmod($subdirPath . '/settings.php', '436');
}

return $this->collectionBuilder()->addTaskList($collection);
}
}
58 changes: 58 additions & 0 deletions tests/Commands/DrupalCommandsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php

namespace OpenEuropa\TaskRunner\Tests\Commands;

use OpenEuropa\TaskRunner\Tests\AbstractTest;
use OpenEuropa\TaskRunner\TaskRunner;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Yaml\Yaml;

/**
* Class DrupalCommandsTest
*
* @package OpenEuropa\TaskRunner\Tests\DrupalSettings
*/
class DrupalCommandsTest extends AbstractTest
{
/**
* @param array $config
*
* @dataProvider drupalSettingsDataProvider
*/
public function testPermissions(array $config)
{
$configFile = $this->getSandboxFilepath('runner.yml');
file_put_contents($configFile, Yaml::dump($config));

// Prepare site directory.
$sitesSubdir = $this->getSandboxFilepath('build/sites/default/');
mkdir($sitesSubdir, 0777, true);

// Prepare site settings file.
$siteSettings = $sitesSubdir . 'settings.php';
touch($siteSettings);
chmod($siteSettings, 0777);

// Run command.
$input = new StringInput("drupal:permissions-setup --working-dir=" . $this->getSandboxRoot());
$runner = new TaskRunner($input, new BufferedOutput(), $this->getClassLoader());
$runner->run();

// Check site directory.
$sitesSubdirPermissions = substr(sprintf('%o', fileperms($sitesSubdir)), -4);
$this->assertEquals('0775', $sitesSubdirPermissions);

// Check site settings file.
$siteSettingsPermissions = substr(sprintf('%o', fileperms($siteSettings)), -4);
$this->assertEquals('0664', $siteSettingsPermissions);
}

/**
* @return array
*/
public function drupalSettingsDataProvider()
{
return $this->getFixtureContent('commands/drupal-site-install.yml');
}
}
5 changes: 5 additions & 0 deletions tests/fixtures/commands/drupal-site-install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- configuration:
drupal:
settings:
sites-subdir: "build/sites/default/"
settings_file: "settings.php"

0 comments on commit 30bff59

Please sign in to comment.