mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 07:23:13 +00:00
Merge branch '3.8'
Conflicts: .gitignore bin/console composer.json composer.lock hudson/fixtures.sql lib/Alchemy/Phrasea/Command/Developer/IniReset.php lib/Alchemy/Phrasea/Command/Setup/Install.php lib/Alchemy/Phrasea/Controller/Api/Oauth2.php lib/Alchemy/Phrasea/Controller/Api/V1.php lib/Alchemy/Phrasea/Controller/Prod/Export.php lib/Alchemy/Phrasea/Controller/Root/Login.php lib/Alchemy/Phrasea/Core/Provider/PhraseanetServiceProvider.php lib/Alchemy/Phrasea/Core/Version.php lib/Alchemy/Phrasea/Helper/DatabaseHelper.php lib/Alchemy/Phrasea/Helper/Prod.php lib/classes/API/OAuth2/Application.php lib/classes/API/V1/Interface.php lib/classes/API/V1/adapter.php lib/classes/Setup/Upgrade.php lib/classes/media/subdef.php lib/classes/task/period/RecordMover.php templates/web/prod/index.html.twig templates/web/setup/step2.html.twig tests/Alchemy/Tests/Phrasea/Controller/Admin/RootTest.php tests/Alchemy/Tests/Phrasea/Controller/Root/LoginTest.php tests/classes/api/v1/api_v1_adapterTest.php tests/db-ref.sqlite vagrant/vms/phraseanet-php54-nginx/puphpet/config.yaml vagrant/vms/phraseanet-php54-nginx/puphpet/files/exec-once/setup
This commit is contained in:
@@ -12,13 +12,16 @@
|
||||
namespace Alchemy\Phrasea\Command\Developer;
|
||||
|
||||
use Alchemy\Phrasea\Command\Command;
|
||||
use Alchemy\Phrasea\Core\Version;
|
||||
use Alchemy\Phrasea\Exception\RuntimeException;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Process\ExecutableFinder;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
use Symfony\Component\Process\Process;
|
||||
use vierbergenlars\SemVer\version as SemVer;
|
||||
|
||||
class IniReset extends Command
|
||||
{
|
||||
@@ -27,15 +30,20 @@ class IniReset extends Command
|
||||
parent::__construct('ini:reset');
|
||||
|
||||
$this->setDescription('Reset environment')
|
||||
->addOption('name', null, InputOption::VALUE_OPTIONAL, 'Databox name to reset, in case of multiple databox are mounted', null)
|
||||
->addOption('yes', 'y', InputOption::VALUE_NONE, 'Answers yes to all questions and do not ask the user')
|
||||
->addOption('email', null, InputOption::VALUE_OPTIONAL, 'Admin e-mail address', null)
|
||||
->addOption('password', null, InputOption::VALUE_OPTIONAL, 'Admin password', null)
|
||||
->addOption('db-name', null, InputOption::VALUE_OPTIONAL, 'Databox name to reset, in case of multiple databox are mounted', null)
|
||||
->addOption('dependencies', null, InputOption::VALUE_NONE, 'Fetch dependencies', null)
|
||||
->addOption('v3.1', null, InputOption::VALUE_NONE, 'Reset with v3.1 fixtures', null)
|
||||
->addOption('uninstall', null, InputOption::VALUE_NONE, 'Uninstall Phraseanet', null);
|
||||
->addOption('run-patches', null, InputOption::VALUE_NONE, 'Reset in v3.1 states & apply all patches', null)
|
||||
;
|
||||
}
|
||||
|
||||
protected function doExecute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$interactive = !$input->getOption('yes');
|
||||
$dialog = $this->getHelperSet()->get('dialog');
|
||||
|
||||
if (!$this->container['phraseanet.configuration']->isSetup()) {
|
||||
throw new RuntimeException(sprintf(
|
||||
'Phraseanet is not setup. You can run <info>bin/setup system::install</info> command to install Phraseanet.'
|
||||
@@ -46,52 +54,66 @@ class IniReset extends Command
|
||||
$conf = $this->container['phraseanet.configuration']->getConfig();
|
||||
$dbs = array('ab' => $conf['main']['database']['dbname'], 'dbs' => array(), 'setup_dbs' => array());
|
||||
foreach($this->container['phraseanet.appbox']->get_databoxes() as $databox) {
|
||||
$dbs['dbs'][] = $databox->get_dbname();
|
||||
}
|
||||
|
||||
//uninstall
|
||||
if ($input->getOption('uninstall')) {
|
||||
$command = $this->getApplication()->find('system:uninstall');
|
||||
|
||||
$output->writeln('Uninstalling...<info>OK</info>');
|
||||
$input = new ArrayInput(array(
|
||||
'command' => 'system:uninstall'
|
||||
));
|
||||
$command->run($input, $output);
|
||||
}
|
||||
|
||||
//run composer
|
||||
//run bower
|
||||
if ($input->getOption('dependencies')) {
|
||||
$command = $this->getApplication()->find('dependencies:composer');
|
||||
|
||||
$input = new ArrayInput(array(
|
||||
'command' => 'dependencies:composer'
|
||||
));
|
||||
$command->run($input, $output);
|
||||
|
||||
$command = $this->getApplication()->find('dependencies:bower');
|
||||
|
||||
$input = new ArrayInput(array(
|
||||
'command' => 'dependencies:bower'
|
||||
));
|
||||
$command->run($input, $output);
|
||||
$dbs['dbs'][] = $databox;
|
||||
}
|
||||
|
||||
if (count($dbs['dbs']) > 1) {
|
||||
if ($input->getOption('name')) {
|
||||
$dbName = $input->getOption('name');
|
||||
if ($input->getOption('db-name')) {
|
||||
$dbName = $input->getOption('db-name');
|
||||
} else {
|
||||
$dialog = $this->getHelperSet()->get('dialog');
|
||||
$dbName = $dialog->ask(
|
||||
$output,
|
||||
_('Please enter the databox name to reset')
|
||||
_('Please enter the databox name to reset or create')
|
||||
);
|
||||
}
|
||||
} else if ($input->getOption('db-name')) {
|
||||
$dbName = $input->getOption('db-name');
|
||||
} else {
|
||||
$dbName = current($dbs['dbs']);
|
||||
$dbName = current($dbs['dbs'])->get_dbname();
|
||||
}
|
||||
|
||||
$continue = 'y';
|
||||
if (count($dbs['dbs']) > 1 && in_array($dbName, array_map(function($db) { return $db->get_dbname();}, $dbs['dbs']))) {
|
||||
if ($interactive) {
|
||||
do {
|
||||
$continue = mb_strtolower($dialog->ask($output, '<question>' .$dbName.' database is going to be truncated, do you want to continue ? (Y/n)</question>', 'Y'));
|
||||
} while (!in_array($continue, array('y', 'n')));
|
||||
}
|
||||
}
|
||||
|
||||
if ('y' !== $continue) {
|
||||
return;
|
||||
}
|
||||
|
||||
$unmountedDbs = $dbToMount = array_diff(array_map(function($db) { return $db->get_dbname();}, $dbs['dbs']), array($dbName));
|
||||
|
||||
if (count($unmountedDbs) > 1 && $interactive) {
|
||||
array_unshift($unmountedDbs, 'all');
|
||||
$selected = $dialog->select(
|
||||
$output,
|
||||
'Choose Dbs to mount',
|
||||
$unmountedDbs,
|
||||
0,
|
||||
false,
|
||||
'Invalid choice',
|
||||
true
|
||||
);
|
||||
|
||||
$dbToMount = array_map(function($c) use ($unmountedDbs) {
|
||||
return $unmountedDbs[$c];
|
||||
}, $selected);
|
||||
}
|
||||
|
||||
if ($input->getOption('dependencies') || !SemVer::eq($this->container['phraseanet.appbox']->get_version(), $this->container['phraseanet.version']->getNumber())) {
|
||||
$this->getApplication()->find('dependencies:all')->run( new ArrayInput(array(
|
||||
'command' => 'dependencies:all'
|
||||
)), $output);
|
||||
}
|
||||
|
||||
// get data paths
|
||||
$dataPath = $this->container['phraseanet.registry']->get('GV_base_datapath_noweb', $this->container['root.path'].'/datas');
|
||||
|
||||
$schema = $this->container['EM']->getConnection()->getSchemaManager();
|
||||
$output->writeln('Creating database "'.$dbs['ab'].'"...<info>OK</info>');
|
||||
$schema->dropAndCreateDatabase($dbs['ab']);
|
||||
@@ -99,31 +121,69 @@ class IniReset extends Command
|
||||
$schema->dropAndCreateDatabase($dbName);
|
||||
|
||||
// inject v3.1 fixtures
|
||||
if ($input->getOption('v3.1')) {
|
||||
$this->container['filesystem']->copy($this->container['root.path'].'/resources/hudson/connexion.inc', $this->container['root.path'].'/config/connexion.inc');
|
||||
$this->container['filesystem']->copy($this->container['root.path'].'/resources//hudson/_GV.php', $this->container['root.path'].'/config/_GV.php');
|
||||
if ($input->getOption('run-patches')) {
|
||||
$this->container['filesystem']->copy($this->container['root.path'].'/hudson/connexion.inc', $this->container['root.path'].'/config/connexion.inc');
|
||||
$this->container['filesystem']->copy($this->container['root.path'].'/hudson/_GV.php', $this->container['root.path'].'/config/_GV.php');
|
||||
|
||||
$command = $this->getApplication()->find('dbal:import');
|
||||
|
||||
$content = file_get_contents($this->container['root.path'] . '/resources//hudson/fixtures.sql');
|
||||
$content = str_replace('ab_test', $dbs['ab'], $content);
|
||||
$content = str_replace('db_test', $dbName, $content);
|
||||
$content = file_get_contents($this->container['root.path'] . '/hudson/fixtures.sql');
|
||||
$content = str_replace('{{APPLICATION_BOX}}', $dbs['ab'], $content);
|
||||
$content = str_replace('{{DATA_BOX}}', $dbName, $content);
|
||||
$content = str_replace('{{USER_EMAIL}}', $input->getOption('email'), $content);
|
||||
$content = str_replace('{{USER_PASSWORD}}', hash('sha256', $input->getOption('password')), $content);
|
||||
|
||||
$tmpFile = tempnam(sys_get_temp_dir(), 'fixtures-v3.1-');
|
||||
$this->container['filesystem']->dumpFile($tmpFile, $content);
|
||||
|
||||
$input = new ArrayInput(array(
|
||||
'command' => 'dbal:import',
|
||||
'file' => $tmpFile
|
||||
));
|
||||
|
||||
$verbosity = $output->getVerbosity();
|
||||
$output->setVerbosity(OutputInterface::VERBOSITY_QUIET);
|
||||
$command->run($input, $output);
|
||||
$this->getApplication()->find('dbal:import')->run(new ArrayInput(array(
|
||||
'command' => 'dbal:import',
|
||||
'file' => $tmpFile
|
||||
)), $output);
|
||||
$output->setVerbosity($verbosity);
|
||||
$output->writeln('Importing Phraseanet v3.1 fixtures...<info>OK</info>');
|
||||
} else {
|
||||
$this->getApplication()->find('system:uninstall')->run(new ArrayInput(array(
|
||||
'command' => 'system:uninstall'
|
||||
)), $output);
|
||||
|
||||
$process = new Process(sprintf('php ' . __DIR__ . '/../../../../../bin/setup system:install --email=%s --password=%s --db-user=%s --db-template=%s --db-password=%s --databox=%s --appbox=%s --server-name=%s --db-host=%s --db-port=%s -y',
|
||||
$input->getOption('email'),
|
||||
$input->getOption('password'),
|
||||
$conf['main']['database']['user'],
|
||||
'en',
|
||||
$conf['main']['database']['password'],
|
||||
$dbName,
|
||||
$dbs['ab'],
|
||||
$conf['main']['servername'],
|
||||
$conf['main']['database']['host'],
|
||||
$conf['main']['database']['port']
|
||||
));
|
||||
$process->run();
|
||||
|
||||
$output->writeln("<info>Install successful !</info>");
|
||||
}
|
||||
|
||||
foreach ($dbs['dbs'] as $databox) {
|
||||
if (!in_array($databox->get_dbname(), $dbToMount) && !in_array('all', $dbToMount)) {
|
||||
continue;
|
||||
}
|
||||
$credentials = $databox->get_connection()->get_credentials();
|
||||
|
||||
\databox::mount(
|
||||
$this->container,
|
||||
$credentials['hostname'],
|
||||
$credentials['port'],
|
||||
$credentials['user'],
|
||||
$credentials['password'],
|
||||
$databox->get_dbname()
|
||||
);
|
||||
$output->writeln('Mounting database "'.$databox->get_dbname().'"...<info>OK</info>');
|
||||
}
|
||||
|
||||
$process = new Process(('php ' . __DIR__ . '/../../../../../bin/setup system:upgrade -y -f'));
|
||||
$process->run();
|
||||
|
||||
// create setup dbs
|
||||
$command = $this->getApplication()->find('ini:setup-tests-dbs');
|
||||
$input = new ArrayInput(array(
|
||||
@@ -131,6 +191,8 @@ class IniReset extends Command
|
||||
));
|
||||
$command->run($input, $output);
|
||||
|
||||
$this->container['phraseanet.registry']->set('GV_base_datapath_noweb', $dataPath, \registry::TYPE_STRING);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user