use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\NullOutput;
+use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
use Symfony\Component\Console\Question\Question;
protected function checkRequirements()
{
$this->defaultOutput->writeln('<info><comment>Step 1 of 4.</comment> Checking system requirements.</info>');
+ $doctrineManager = $this->getContainer()->get('doctrine')->getManager();
$rows = [];
$help = '';
try {
- $this->getContainer()->get('doctrine')->getManager()->getConnection()->connect();
+ $doctrineManager->getConnection()->connect();
} catch (\Exception $e) {
- if (false === strpos($e->getMessage(), 'Unknown database')) {
+ if (false === strpos($e->getMessage(), 'Unknown database')
+ && false === strpos($e->getMessage(), 'database "'.$this->getContainer()->getParameter('database_name').'" does not exist')) {
$fulfilled = false;
$status = '<error>ERROR!</error>';
$help = 'Can\'t connect to the database: '.$e->getMessage();
$rows[] = [$label, $status, $help];
+ // testing if PostgreSQL > 9.1
+ $label = '<comment>SGBD version</comment>';
+ $status = '<info>OK!</info>';
+ $help = '';
+
+ if ('postgresql' === $doctrineManager->getConnection()->getSchemaManager()->getDatabasePlatform()->getName()) {
+ // return version should be like "PostgreSQL 9.5.4 on x86_64-apple-darwin15.6.0, compiled by Apple LLVM version 8.0.0 (clang-800.0.38), 64-bit"
+ $version = $doctrineManager->getConnection()->query('SELECT version();')->fetchColumn();
+
+ preg_match('/PostgreSQL ([0-9\.]+)/i', $version, $matches);
+
+ if (isset($matches[1]) & version_compare($matches[1], '9.2.0', '<')) {
+ $fulfilled = false;
+ $status = '<error>ERROR!</error>';
+ $help = 'PostgreSQL should be greater than 9.1 (actual version: '.$matches[1].')';
+ }
+ }
+
+ $rows[] = [$label, $status, $help];
+
foreach ($this->functionExists as $functionRequired) {
$label = '<comment>'.$functionRequired.'</comment>';
$status = '<info>OK!</info>';
],
[
'name' => 'piwik_host',
- 'value' => 'http://v2.wallabag.org',
+ 'value' => 'v2.wallabag.org',
'section' => 'analytics',
],
[
}
$this->getApplication()->setAutoExit(false);
- $exitCode = $this->getApplication()->run(new ArrayInput($parameters), new NullOutput());
+
+ $output = new BufferedOutput();
+ $exitCode = $this->getApplication()->run(new ArrayInput($parameters), $output);
if (0 !== $exitCode) {
$this->getApplication()->setAutoExit(true);
- $errorMessage = sprintf('The command "%s" terminated with an error code: %u.', $command, $exitCode);
- $this->defaultOutput->writeln("<error>$errorMessage</error>");
- $exception = new \Exception($errorMessage, $exitCode);
+ $this->defaultOutput->writeln('');
+ $this->defaultOutput->writeln('<error>The command "'.$command.'" generates some errors: </error>');
+ $this->defaultOutput->writeln($output->fetch());
- throw $exception;
+ die();
}
// PDO does not always close the connection after Doctrine commands.