Пример #1
0
 public function __construct(TranslatorInterface $translator, EventDispatcherInterface $dispatcher = null, LoggerInterface $logger = null, GuzzleClient $httpClient = null)
 {
     parent::__construct($translator, $dispatcher, $logger);
     $this->httpClient = $httpClient ?: new GuzzleClient();
     $version = new Version();
     $this->httpClient->setUserAgent(sprintf('Phraseanet/%s (%s)', $version->getNumber(), $version->getName()));
 }
Пример #2
0
 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.'));
     }
     // get dbs
     $conf = $this->container['phraseanet.configuration']->getConfig();
     $dbs = array('ab' => $conf['main']['database']['dbname'], 'dbs' => array(), 'setup_dbs' => array());
     foreach ($this->container->getDataboxes() as $databox) {
         $dbs['dbs'][] = $databox;
     }
     if (count($dbs['dbs']) > 1) {
         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 or create'));
         }
     } else {
         if ($input->getOption('db-name')) {
             $dbName = $input->getOption('db-name');
         } else {
             $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->getApplicationBox()->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['conf']->get(['main', 'storage', 'subdefs'], $this->container['root.path'] . '/datas');
     $schema = $this->container['orm.em']->getConnection()->getSchemaManager();
     $output->writeln('Creating database "' . $dbs['ab'] . '"...<info>OK</info>');
     $schema->dropAndCreateDatabase($dbs['ab']);
     $output->writeln('Creating database "' . $dbName . '"...<info>OK</info>');
     $schema->dropAndCreateDatabase($dbName);
     // inject v3.1 fixtures
     if ($input->getOption('run-patches')) {
         $content = file_get_contents($this->container['root.path'] . '/resources/hudson/connexion.inc');
         $content = str_replace('{{dbname}}', $conf['main']['database']['dbname'], $content);
         $content = str_replace('{{hostname}}', $conf['main']['database']['host'], $content);
         $content = str_replace('{{port}}', $conf['main']['database']['port'], $content);
         $content = str_replace('{{user}}', $conf['main']['database']['user'], $content);
         $content = str_replace('{{password}}', $conf['main']['database']['password'], $content);
         $tmpFile = tempnam(sys_get_temp_dir(), 'connexion.inc-v3.1-');
         $this->container['filesystem']->dumpFile($tmpFile, $content);
         $this->container['filesystem']->copy($tmpFile, $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');
         $content = file_get_contents($this->container['root.path'] . '/resources/hudson/fixtures.sql');
         $content = str_replace('{{APPLICATION_BOX}}', $dbs['ab'], $content);
         $content = str_replace('{{DATA_BOX}}', $dbName, $content);
         $content = str_replace('{{DB_HOST}}', $conf['main']['database']['host'], $content);
         $content = str_replace('{{DB_PORT}}', $conf['main']['database']['port'], $content);
         $content = str_replace('{{DB_USER}}', $conf['main']['database']['user'], $content);
         $content = str_replace('{{DB_PASSWORD}}', $conf['main']['database']['password'], $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);
         $verbosity = $output->getVerbosity();
         $output->setVerbosity(OutputInterface::VERBOSITY_QUIET);
         $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);
         $cmd = 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['servername'], $conf['main']['database']['host'], $conf['main']['database']['port']);
         $process = new Process($cmd);
         $process->setTimeout(300);
         $process->run(function ($type, $buffer) {
             if ('err' === $type) {
                 echo 'ERR > ' . $buffer;
             }
         });
         if (false === $process->isSuccessful()) {
             $output->writeln('<error>Failed to execute the following command "' . $cmd . '"</error>');
             return 1;
         }
         $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>');
     }
     if ($input->getOption('run-patches') || false === $this->container['phraseanet.configuration']->isUpToDate()) {
         $version = new Version();
         if ($input->getOption('run-patches')) {
             $output->write(sprintf('Upgrading... from version <info>3.1.21</info> to <info>%s</info>', $version->getNumber()), true);
         } else {
             $output->write(sprintf('Upgrading... from version <info>%s</info> to <info>%s</info>', $this->app->getApplicationBox()->get_version(), $version->getNumber()), true);
         }
         $cmd = 'php ' . __DIR__ . '/../../../../../bin/setup system:upgrade -y -f -v';
         $process = new Process($cmd);
         $process->setTimeout(600);
         $process->run(function ($type, $buffer) {
             if ('err' === $type) {
                 echo 'ERR > ' . $buffer;
             }
         });
         if (false === $process->isSuccessful()) {
             $output->writeln('<error>Failed to execute the following command "' . $cmd . '"</error>');
             return 1;
         }
     }
     if (!$input->getOption('no-setup-dbs')) {
         // create setup dbs
         $command = $this->getApplication()->find('ini:setup-tests-dbs');
         $input = new ArrayInput(array('command' => 'ini:setup-tests-dbs'));
         $command->run($input, $output);
     }
     $this->container['conf']->set(['main', 'storage', 'subdefs'], $dataPath);
     return 0;
 }
Пример #3
0
 public function testGetName()
 {
     $this->assertTrue(is_string(Version::getName()));
     $this->assertTrue(strlen(Version::getName()) > 3);
 }
 /**
  * @param Version $version
  * @return bool
  * @throws \Doctrine\DBAL\DBALException
  */
 public function saveVersion(Version $version)
 {
     $this->connection->exec("DELETE FROM pref WHERE prop='version'");
     $statement = $this->connection->executeQuery('INSERT INTO pref (prop, value, locale, updated_on) VALUES ("version", :version, "", NOW())', [':version' => $version->getNumber()]);
     return $statement->rowCount() == 1;
 }
Пример #5
0
 protected function setVersion(PhraseaVersion $version)
 {
     try {
         $sql = '';
         if ($this->get_base_type() === self::APPLICATION_BOX) {
             $sql = 'UPDATE sitepreff SET version = "' . $version->getNumber() . '"';
         }
         if ($this->get_base_type() === self::DATA_BOX) {
             $sql = 'DELETE FROM pref WHERE prop="version" AND locale IS NULL';
             $this->get_connection()->query($sql);
             $sql = 'REPLACE INTO pref (id, prop, value,locale, updated_on) VALUES (null, "version", :version,"", NOW())';
         }
         if ($sql !== '') {
             $stmt = $this->get_connection()->prepare($sql);
             $stmt->execute([':version' => $version->getNumber()]);
             $stmt->closeCursor();
             $this->version = $version->getNumber();
             return true;
         }
     } catch (\Exception $e) {
         throw new Exception('Unable to set the database version : ' . $e->getMessage());
     }
     return;
 }
 /**
  * @param Version $version
  * @return bool
  */
 public function saveVersion(Version $version)
 {
     $statement = $this->connection->executeQuery('UPDATE sitepreff SET version = :version WHERE id = 1', [':version' => $version->getNumber()]);
     return $statement->rowCount() == 1;
 }
Пример #7
0
 public function testGetName()
 {
     $version = new Version();
     $this->assertTrue(is_string($version->getName()));
     $this->assertTrue(strlen($version->getName()) > 3);
 }
Пример #8
0
 protected function doExecute(InputInterface $input, OutputInterface $output)
 {
     $interactive = !$input->getOption('yes');
     while ($migrations = $this->container['phraseanet.configuration-tester']->getMigrations()) {
         foreach ($migrations as $migration) {
             $migration->migrate();
         }
     }
     if (!$this->getService('phraseanet.configuration-tester')->isInstalled()) {
         throw new \RuntimeException('Phraseanet must be set-up');
     }
     $output->write('Phraseanet is going to be upgraded', true);
     if ($interactive) {
         $dialog = $this->getHelperSet()->get('dialog');
         do {
             $continue = mb_strtolower($dialog->ask($output, '<question>' . $this->container->trans('Continuer ?') . ' (Y/n)</question>', 'Y'));
         } while (!in_array($continue, ['y', 'n']));
     } else {
         $continue = 'y';
     }
     if ($continue == 'y') {
         $output->write(sprintf('Upgrading... from version <info>%s</info> to <info>%s</info>', $this->container['phraseanet.appbox']->get_version(), Version::getNumber()), true);
         try {
             $upgrader = new Setup_Upgrade($this->container, $input->getOption('force'));
         } catch (\Exception_Setup_FixBadEmailAddresses $e) {
             return $output->writeln(sprintf('<error>You have to fix your database before upgrade with the system:mailCheck command </error>'));
         }
         $queries = $this->getService('phraseanet.appbox')->forceUpgrade($upgrader, $this->container);
         if ($input->getOption('dump') || $input->getOption('stderr')) {
             if (0 < count($queries)) {
                 $output->writeln("Some SQL queries can be executed to optimize\n");
                 $stderr = $input->getOption('stderr');
                 if ($stderr) {
                     $handle = fopen('php://stderr', 'a');
                 }
                 foreach ($queries as $query) {
                     if ($stderr) {
                         fwrite($handle, $query['sql'] . "\n");
                     } else {
                         $output->writeln(" " . $query['sql']);
                     }
                 }
                 if ($stderr) {
                     fclose($handle);
                 }
                 $output->writeln("\n");
             } else {
                 $output->writeln("No SQL queries to execute to optimize\n");
             }
         }
         foreach ($upgrader->getRecommendations() as $recommendation) {
             list($message, $command) = $recommendation;
             $output->writeln(sprintf('<info>%s</info>', $message));
             $output->writeln("");
             $output->writeln(sprintf("\t\t%s", $command));
             $output->writeln("");
             $output->writeln("");
         }
         if (null !== $this->getApplication()) {
             $command = $this->getApplication()->find('crossdomain:generate');
             $command->run(new ArrayInput(array('command' => 'crossdomain:generate')), $output);
         }
     } else {
         $output->write('<info>Canceled</info>', true);
     }
     $output->write('Finished !', true);
     return 0;
 }