Example #1
0
 /**
  * Execute command
  *
  * @param  InputInterface  $input  Input instance
  * @param  OutputInterface $output Output instance
  *
  * @return int|null|void
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $database = $input->getArgument('db');
     $dumpFile = $input->getArgument('file');
     if (!is_file($dumpFile) || !is_readable($dumpFile)) {
         $output->writeln('<p-error>File is not readable</p-error>');
         return 1;
     }
     $dumpFileType = PhpUtility::getMimeType($dumpFile);
     $output->writeln('<h2>Restoring dump "' . $dumpFile . '" into database "' . $database . '"</h2>');
     if (DatabaseConnection::databaseExists($database)) {
         // Dropping
         $output->writeln('<p>Dropping database</p>');
         $query = 'DROP DATABASE IF EXISTS ' . DatabaseConnection::sanitizeSqlDatabase($database);
         DatabaseConnection::exec($query);
     }
     // Creating
     $output->writeln('<p>Creating database</p>');
     $query = 'CREATE DATABASE ' . DatabaseConnection::sanitizeSqlDatabase($database);
     DatabaseConnection::exec($query);
     // Inserting
     putenv('USER='******'MYSQL_PWD=' . DatabaseConnection::getDbPassword());
     $commandMysql = new CommandBuilder('mysql', '--user=%s %s --one-database', array(DatabaseConnection::getDbUsername(), $database));
     // Set server connection details
     if ($input->getOption('host')) {
         $commandMysql->addArgumentTemplate('-h %s', $input->getOption('host'));
     }
     if ($input->getOption('port')) {
         $commandMysql->addArgumentTemplate('-P %s', $input->getOption('port'));
     }
     $commandFile = new CommandBuilder();
     $commandFile->addArgument($dumpFile);
     $commandFile->addPipeCommand($commandMysql);
     switch ($dumpFileType) {
         case 'application/x-bzip2':
             $output->writeln('<p>Using BZIP2 decompression</p>');
             $commandFile->setCommand('bzcat');
             break;
         case 'application/gzip':
         case 'application/x-gzip':
             $output->writeln('<p>Using GZIP decompression</p>');
             $commandFile->setCommand('gzcat');
             break;
         case 'application/x-lzma':
         case 'application/x-xz':
             $output->writeln('<p>Using LZMA decompression</p>');
             $commandFile->setCommand('xzcat');
             break;
         default:
             $output->writeln('<p>Using plaintext (no decompression)</p>');
             $commandFile->setCommand('cat');
             break;
     }
     $output->writeln('<p>Reading dump</p>');
     $commandFile->executeInteractive();
     $output->writeln('<h2>Database "' . $database . '" restored</h2>');
     return 0;
 }
Example #2
0
 /**
  * Execute command
  *
  * @param  InputInterface  $input  Input instance
  * @param  OutputInterface $output Output instance
  *
  * @return int|null|void
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $database = $input->getArgument('db');
     $output->writeln('<h2>Dropping Database "' . $database . '"...</h2>');
     $query = 'DROP DATABASE IF EXISTS ' . DatabaseConnection::sanitizeSqlDatabase($database);
     DatabaseConnection::exec($query);
     $output->writeln('<p>Database dropped</p>');
     return 0;
 }
Example #3
0
 /**
  * Execute command
  *
  * @param  InputInterface  $input  Input instance
  * @param  OutputInterface $output Output instance
  *
  * @return int|null|void
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $database = $input->getArgument('db');
     $output->writeln('<h2>Clearing database "' . $database . '"</h2>');
     if (DatabaseConnection::databaseExists($database)) {
         $output->writeln('<p>Dropping database</p>');
         $query = 'DROP DATABASE ' . DatabaseConnection::sanitizeSqlDatabase($database);
         DatabaseConnection::exec($query);
     }
     $output->writeln('<p>Creating database</p>');
     $query = 'CREATE DATABASE ' . DatabaseConnection::sanitizeSqlDatabase($database);
     DatabaseConnection::exec($query);
     $output->writeln('<h2>Database "' . $database . '" recreated</h2>');
     return 0;
 }
Example #4
0
 /**
  * Execute command
  *
  * @param  InputInterface  $input  Input instance
  * @param  OutputInterface $output Output instance
  *
  * @return int|null|void
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $charset = 'utf8';
     $collation = 'utf8_general_ci';
     $stdout = false;
     $database = $input->getArgument('database');
     if ($input->getOption('charset')) {
         $charset = (string) $input->getOption('charset');
     }
     if ($input->getOption('collation')) {
         $collation = (string) $input->getOption('collation');
     }
     if ($input->getOption('stdout')) {
         $stdout = true;
     }
     // ##################
     // Alter database
     // ##################
     $query = 'ALTER DATABASE %s CHARACTER SET %s COLLATE %s';
     $query = sprintf($query, DatabaseConnection::sanitizeSqlDatabase($database), DatabaseConnection::quote($charset), DatabaseConnection::quote($collation));
     if (!$stdout) {
         // Execute
         $output->writeln('<h2>Converting database ' . $database . '</h2>');
         DatabaseConnection::exec($query);
     } else {
         // Show only
         $output->writeln($query . ';');
     }
     // ##################
     // Alter tables
     // ##################
     $tableList = DatabaseConnection::tableList($database);
     foreach ($tableList as $table) {
         // Build statement
         $query = 'ALTER TABLE %s.%s CONVERT TO CHARACTER SET %s COLLATE %s';
         $query = sprintf($query, DatabaseConnection::sanitizeSqlDatabase($database), DatabaseConnection::sanitizeSqlTable($table), DatabaseConnection::quote($charset), DatabaseConnection::quote($collation));
         if (!$stdout) {
             // Execute
             $output->writeln('<p>Converting table ' . $table . '</p>');
             DatabaseConnection::exec($query);
         } else {
             // Show only
             $output->writeln($query . ';');
         }
     }
     return 0;
 }
Example #5
0
 /**
  * Set TYPO3 user for database
  *
  * @param string $database Database
  * @param string $username Username
  * @param string $password Password (salted/hashed)
  */
 protected function setTypo3UserForDatabase($database, $username, $password)
 {
     // ##################
     // Update/insert user
     // ##################
     // Default UserTS
     $tsConfig = array('options.clearCache.system = 1', 'options.clearCache.all = 1', 'options.enableShowPalettes = 1', 'options.alertPopups = 254', 'options.pageTree.showPageIdWithTitle = 1', 'options.pageTree.showPathAboveMounts = 1', 'options.pageTree.showDomainNameWithTitle = 1', 'admPanel.enable.edit = 1', 'admPanel.module.edit.forceDisplayFieldIcons = 1', 'admPanel.hide = 0', 'setup.default.thumbnailsByDefault = 1', 'setup.default.enableFlashUploader = 0', 'setup.default.recursiveDelete = 1', 'setup.default.showHiddenFilesAndFolders = 1', 'setup.default.resizeTextareas_Flexible = 1', 'setup.default.copyLevels = 99', 'setup.default.rteResize = 99', 'setup.default.moduleData.web_list.bigControlPanel = 1', 'setup.default.moduleData.web_list.clipBoard = 1', 'setup.default.moduleData.web_list.localization = 1', 'setup.default.moduleData.web_list.showPalettes = 1', 'setup.default.moduleData.file_list.bigControlPanel = 1', 'setup.default.moduleData.file_list.clipBoard = 1', 'setup.default.moduleData.file_list.localization = 1', 'setup.default.moduleData.file_list.showPalettes = 1');
     $tsConfig = implode("\n", $tsConfig);
     try {
         // Get uid from current dev user (if already existing)
         $query = 'SELECT uid
                     FROM ' . DatabaseConnection::sanitizeSqlDatabase($database) . '.be_users
                    WHERE username = '******'
                      AND deleted = 0';
         $beUserId = DatabaseConnection::getOne($query);
         // Insert or update user in TYPO3 database
         $query = 'INSERT INTO ' . DatabaseConnection::sanitizeSqlDatabase($database) . '.be_users
                               (uid, tstamp, crdate, realName, username, password, TSconfig, admin, disable, starttime, endtime)
                    VALUES(
                       ' . DatabaseConnection::quote($beUserId) . ',
                       UNIX_TIMESTAMP(),
                       UNIX_TIMESTAMP(),
                       ' . DatabaseConnection::quote('DEVELOPMENT') . ',
                       ' . DatabaseConnection::quote($username) . ',
                       ' . DatabaseConnection::quote($password) . ',
                       ' . DatabaseConnection::quote($tsConfig) . ',
                       1,
                       0,
                       0,
                       0
                    ) ON DUPLICATE KEY UPDATE
                         realName  = VALUES(realName),
                         password  = VALUES(password),
                         TSconfig  = VALUES(TSconfig),
                         disable   = VALUES(disable),
                         starttime = VALUES(starttime),
                         endtime   = VALUES(endtime)';
         DatabaseConnection::exec($query);
         if ($beUserId) {
             $this->output->writeln('<p>User successfully updated to "' . $database . '"</p>');
         } else {
             $this->output->writeln('<p>User successfully added to "' . $database . '"</p>');
         }
     } catch (\Exception $e) {
         $this->output->writeln('<p-error>User adding failed</p-error>');
     }
 }
Example #6
0
 /**
  * Cleanup TYPO3 database
  *
  * @param string $database Database
  */
 protected function cleanupTypo3Database($database)
 {
     $cleanupTableList = array();
     // Check if database is TYPO3 instance
     $tableList = DatabaseConnection::tableList($database);
     foreach ($tableList as $table) {
         $clearTable = false;
         // Caching und indexing tables
         switch (true) {
             case strpos($table, 'cache_') === 0:
             case strpos($table, 'cachingframework_') === 0:
             case strpos($table, 'cf_') === 0:
                 // Caching framework
                 $clearTable = true;
                 break;
             case strpos($table, 'index_') === 0:
                 // EXT:indexed_search
                 $clearTable = true;
                 break;
         }
         switch ($table) {
             case 'sys_history':
             case 'sys_log':
                 // History/Log
                 $clearTable = true;
                 break;
             case 'sys_dmain':
                 // EXT:direct_mail
                 $clearTable = true;
                 break;
             case 'tx_devlog':
                 // EXT:devlog
                 $clearTable = true;
                 break;
             case 'tx_realurl_errorlog':
             case 'tx_realurl_pathcache':
             case 'tx_realurl_urldecodecache':
             case 'tx_realurl_urlencodecache':
                 // EXT: realurl
                 $clearTable = true;
                 break;
             case 'tx_solr_cache':
             case 'tx_solr_cache_tags':
                 // EXT:solr
                 $clearTable = true;
                 break;
         }
         if ($clearTable) {
             $cleanupTableList[] = $table;
         }
     }
     $this->output->writeln('<p>Starting cleanup of database "' . $database . '"</p>');
     DatabaseConnection::switchDatabase(DatabaseConnection::sanitizeSqlDatabase($database));
     foreach ($cleanupTableList as $table) {
         $query = 'TRUNCATE ' . DatabaseConnection::sanitizeSqlTable($table);
         DatabaseConnection::exec($query);
         if ($this->output->isVerbose()) {
             $this->output->writeln('<p>Truncating table ' . $table . '</p>');
         }
     }
     $this->output->writeln('<p>finished</p>');
 }