dbi = $dbi; $this->structureController = $structureController; } public function handleIndexCreation(ServerRequest $request, string $indexType): void { $GLOBALS['message'] = $GLOBALS['message'] ?? null; $selected = $request->getParsedBodyParam('selected_fld', []); if (! is_array($selected) || $selected === []) { $this->response->setRequestStatus(false); $this->response->addJSON('message', __('No column selected.')); return; } $GLOBALS['sql_query'] = $this->getAddIndexSql($indexType, $GLOBALS['table'], $selected); $GLOBALS['message'] = $this->executeAddIndexSql($GLOBALS['db'], $GLOBALS['sql_query']); ($this->structureController)($request); } /** * @param string[] $selectedColumns */ private function getAddIndexSql(string $indexType, string $table, array $selectedColumns): string { $columnsSql = implode(', ', array_map([Util::class, 'backquote'], $selectedColumns)); return 'ALTER TABLE ' . Util::backquote($table) . ' ADD ' . $indexType . '(' . $columnsSql . ');'; } /** * @param string|DatabaseName $db */ private function executeAddIndexSql($db, string $sql): Message { $this->dbi->selectDb($db); $result = $this->dbi->tryQuery($sql); if (! $result) { return Message::error($this->dbi->getError()); } return Message::success(); } }