34 protected $languageFile =
'LLL:EXT:scheduler/Resources/Private/Language/locallang.xlf';
49 if (empty($taskInfo[
'scheduler_optimizeDatabaseTables_selectedTables'])) {
50 $taskInfo[
'scheduler_optimizeDatabaseTables_selectedTables'] = [];
51 if ($currentSchedulerModuleAction->equals(
Action::ADD)) {
53 $taskInfo[
'scheduler_optimizeDatabaseTables_selectedTables'] = [];
54 } elseif ($currentSchedulerModuleAction->equals(
Action::EDIT)) {
56 $taskInfo[
'scheduler_optimizeDatabaseTables_selectedTables'] = $task->selectedTables;
59 $fieldName =
'tx_scheduler[scheduler_optimizeDatabaseTables_selectedTables][]';
60 $fieldId =
'scheduler_optimizeDatabaseTables_selectedTables';
62 $fieldHtml =
'<select class="form-control" name="' . $fieldName
64 .
'" class="from-control" size="10" multiple="multiple">'
67 $additionalFields[$fieldId] = [
69 'label' => $this->languageFile .
':label.optimizeDatabaseTables.selectTables',
70 'cshKey' =>
'_MOD_system_txschedulerM1',
71 'cshLabel' => $fieldId,
74 return $additionalFields;
88 if (is_array($submittedData[
'scheduler_optimizeDatabaseTables_selectedTables'])) {
89 $invalidTables = array_diff(
90 $submittedData[
'scheduler_optimizeDatabaseTables_selectedTables'],
93 if (!empty($invalidTables)) {
95 $GLOBALS[
'LANG']->sL($this->languageFile .
':msg.selectionOfNonExistingDatabaseTables'),
102 $GLOBALS[
'LANG']->sL($this->languageFile .
':msg.noDatabaseTablesSelected'),
119 $task->selectedTables = $submittedData[
'scheduler_optimizeDatabaseTables_selectedTables'];
132 foreach ($availableTables as $tableName) {
133 $selected = in_array($tableName, $selectedTables,
true) ?
' selected="selected"' :
'';
134 $options[] =
'<option value="' . $tableName .
'"' . $selected .
'>' . $tableName .
'</option>';
137 return implode(
'', $options);
147 $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
154 $tableMap =
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'TableMapping'] ?? [];
160 $optimizableTables = array_diff($optimizableTables, array_keys($tableMap));
164 $connectionNames = array_keys(array_flip($tableMap));
165 foreach ($connectionNames as $connectionName) {
166 $connection = $connectionPool->getConnectionByName($connectionName);
167 $tablesOnConnection = array_keys(array_filter(
169 function ($value) use ($connectionName) {
170 return $value === $connectionName;
174 $optimizableTables = array_merge($optimizableTables, $tables);
178 sort($optimizableTables);
180 return $optimizableTables;
201 $queryBuilder->
select(
'TABLE_NAME AS Table',
'ENGINE AS Engine')
202 ->
from(
'information_schema.TABLES')
204 $queryBuilder->expr()->eq(
206 $queryBuilder->createNamedParameter(
'BASE TABLE', \PDO::PARAM_STR)
208 $queryBuilder->expr()->in(
210 $queryBuilder->createNamedParameter([
'InnoDB',
'MyISAM',
'ARCHIVE'], Connection::PARAM_STR_ARRAY)
212 $queryBuilder->expr()->eq(
214 $queryBuilder->createNamedParameter($connection->getDatabase(), \PDO::PARAM_STR)
218 if (!empty($tableNames)) {
220 $queryBuilder->expr()->in(
222 $queryBuilder->createNamedParameter($tableNames, \PDO::PARAM_STR)
227 $tables = $queryBuilder->
execute()->fetchAll();
229 return array_column($tables,
'Table');