Beispiel #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)
 {
     // ##################
     // Init
     // ##################
     $dbName = $input->getArgument('db');
     $output->writeln('<h2>Updating TYPO3 domain entries</h2>');
     // ##############
     // Loop through databases
     // ##############
     if (empty($dbName)) {
         // ##############
         // All databases
         // ##############
         $databaseList = DatabaseConnection::databaseList();
         foreach ($databaseList as $dbName) {
             // Check if database is TYPO3 instance
             $query = 'SELECT COUNT(*) as count
                         FROM information_schema.tables
                        WHERE table_schema = ' . DatabaseConnection::quote($dbName) . '
                          AND table_name = \'sys_domain\'';
             $isTypo3Database = DatabaseConnection::getOne($query);
             if ($isTypo3Database) {
                 $this->runTaskForDomain($dbName);
             }
         }
     } else {
         // ##############
         // One databases
         // ##############
         $this->runTaskForDomain($dbName);
     }
 }
Beispiel #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)
 {
     // ##################
     // Init
     // ##################
     $dbName = $input->getArgument('db');
     $output->writeln('<h2>Cleanup TYPO3 database</h2>');
     // ##############
     // Loop through databases
     // ##############
     if (empty($dbName)) {
         // ##############
         // All databases
         // ##############
         // Get list of databases
         $query = 'SELECT SCHEMA_NAME
                 FROM information_schema.SCHEMATA';
         $databaseList = DatabaseConnection::getCol($query);
         foreach ($databaseList as $dbName) {
             // Skip internal mysql databases
             if (in_array(strtolower($dbName), array('mysql', 'information_schema', 'performance_schema'))) {
                 continue;
             }
             // Check if database is TYPO3 instance
             $query = 'SELECT COUNT(*) as count
                         FROM information_schema.tables
                        WHERE table_schema = ' . DatabaseConnection::quote($dbName) . '
                          AND table_name = \'be_users\'';
             $isTypo3Database = DatabaseConnection::getOne($query);
             if ($isTypo3Database) {
                 $this->cleanupTypo3Database($dbName);
             }
         }
     } else {
         // ##############
         // One databases
         // ##############
         $this->cleanupTypo3Database($dbName);
     }
     return 0;
 }
Beispiel #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)
 {
     // Get current connection id
     $query = 'SELECT CONNECTION_ID()';
     $conId = DatabaseConnection::getOne($query);
     $query = 'SHOW PROCESSLIST';
     $processList = DatabaseConnection::getAll($query);
     // ########################
     // Output
     // ########################
     /** @var \Symfony\Component\Console\Helper\Table $table */
     $table = new Table($output);
     $table->setHeaders(array_keys(reset($processList)));
     foreach ($processList as $row) {
         // Exclude current connection id
         if ($row['Id'] === $conId) {
             continue;
         }
         $table->addRow(array_values($row));
     }
     $table->render();
     return 0;
 }
Beispiel #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)
 {
     // Get list of databases
     $databaseList = DatabaseConnection::databaseList();
     if (!empty($databaseList)) {
         // ########################
         // Fetch statistics
         // ########################
         $databaseRowList = array();
         foreach ($databaseList as $database) {
             // Get all tables
             $query = 'SELECT COUNT(*) AS count
                         FROM information_schema.tables
                        WHERE TABLE_SCHEMA = ' . DatabaseConnection::quote($database) . '
                          AND TABLE_TYPE = \'BASE TABLE\'';
             $tableCount = DatabaseConnection::getOne($query);
             // Get all views
             $query = 'SELECT COUNT(*) AS count
                         FROM information_schema.tables
                        WHERE TABLE_SCHEMA = ' . DatabaseConnection::quote($database) . '
                          AND TABLE_TYPE LIKE \'%VIEW\'';
             $viewCount = DatabaseConnection::getOne($query);
             // Get size of database
             $query = 'SELECT SUM(data_length) AS data_size,
                              SUM(index_length) AS index_size,
                              SUM(data_length + index_length) AS total_size
                         FROM information_schema.tables
                        WHERE TABLE_SCHEMA = ' . DatabaseConnection::quote($database);
             $statsRow = DatabaseConnection::getRow($query);
             $databaseRowList[$database] = array('name' => $database, 'table_count' => $tableCount, 'view_count' => $viewCount, 'data_size' => $statsRow['data_size'], 'index_size' => $statsRow['index_size'], 'total_size' => $statsRow['total_size']);
         }
         // ########################
         // Sorting
         // ########################
         // Sort: default by name (natural sort)
         uasort($databaseRowList, function ($a, $b) {
             return strnatcmp($a['name'], $b['name']);
         });
         // Sort: by table names
         if ($input->getOption('sort-name')) {
             uasort($databaseRowList, function ($a, $b) {
                 return $a['table_count'] < $b['table_count'];
             });
         }
         // Sort: by data size
         if ($input->getOption('sort-data')) {
             uasort($databaseRowList, function ($a, $b) {
                 return $a['data_size'] < $b['data_size'];
             });
         }
         // Sort: by index size
         if ($input->getOption('sort-index')) {
             uasort($databaseRowList, function ($a, $b) {
                 return $a['index_size'] < $b['index_size'];
             });
         }
         // Sort: by total size
         if ($input->getOption('sort-total')) {
             uasort($databaseRowList, function ($a, $b) {
                 return $a['total_size'] < $b['total_size'];
             });
         }
         // ########################
         // Stats
         // ########################
         $statsRow = array('name' => '', 'table_count' => 0, 'view_count' => 0, 'data_size' => 0, 'index_size' => 0, 'total_size' => 0);
         $databaseCount = count($databaseRowList);
         foreach ($databaseRowList as $databaseRow) {
             $statsRow['table_count'] += $databaseRow['table_count'];
             $statsRow['view_count'] += $databaseRow['view_count'];
             $statsRow['data_size'] += $databaseRow['data_size'];
             $statsRow['index_size'] += $databaseRow['index_size'];
             $statsRow['total_size'] += $databaseRow['total_size'];
         }
         // ########################
         // Output
         // ########################
         /** @var \Symfony\Component\Console\Helper\Table $table */
         $table = new Table($output);
         $table->setHeaders(array('Database', 'Tables', 'Views', 'Data', 'Index', 'Total'));
         foreach ($databaseRowList as $databaseRow) {
             $databaseRow['table_count'] = FormatUtility::number($databaseRow['table_count']);
             $databaseRow['view_count'] = FormatUtility::number($databaseRow['view_count']);
             $databaseRow['data_size'] = FormatUtility::bytes($databaseRow['data_size']);
             $databaseRow['index_size'] = FormatUtility::bytes($databaseRow['index_size']);
             $databaseRow['total_size'] = FormatUtility::bytes($databaseRow['total_size']);
             $table->addRow(array_values($databaseRow));
         }
         // Stats: average
         if ($databaseCount >= 1) {
             $table->addRow(new TableSeparator());
             $statsAvgRow = array();
             $statsAvgRow['name'] = 'Average';
             $statsAvgRow['table_count'] = FormatUtility::number($statsRow['table_count'] / $databaseCount);
             $statsAvgRow['view_count'] = FormatUtility::number($statsRow['view_count'] / $databaseCount);
             $statsAvgRow['data_size'] = FormatUtility::bytes($statsRow['data_size'] / $databaseCount);
             $statsAvgRow['index_size'] = FormatUtility::bytes($statsRow['index_size'] / $databaseCount);
             $statsAvgRow['total_size'] = FormatUtility::bytes($statsRow['total_size'] / $databaseCount);
             $table->addRow(array_values($statsAvgRow));
         }
         // Stats: total
         $statsTotalRow['name'] = 'Total';
         $statsTotalRow['table_count'] = FormatUtility::number($statsRow['table_count']);
         $statsTotalRow['view_count'] = FormatUtility::number($statsRow['view_count']);
         $statsTotalRow['data_size'] = FormatUtility::bytes($statsRow['data_size']);
         $statsTotalRow['index_size'] = FormatUtility::bytes($statsRow['index_size']);
         $statsTotalRow['total_size'] = FormatUtility::bytes($statsRow['total_size']);
         $table->addRow(array_values($statsTotalRow));
         $table->render();
     } else {
         $output->writeln('<p-error>No databases found</p-error>');
     }
     return 0;
 }
Beispiel #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>');
     }
 }