diff --git a/app/services_controllers.php b/app/services_controllers.php index b3c851ba04..bd27d883c6 100644 --- a/app/services_controllers.php +++ b/app/services_controllers.php @@ -326,6 +326,10 @@ return [ 'class' => Database\Structure\ShowCreateController::class, 'arguments' => [ResponseRenderer::class, Template::class, DatabaseInterface::class], ], + Database\Structure\CopyStructureController::class => [ + 'class' => Database\Structure\CopyStructureController::class, + 'arguments' => [ResponseRenderer::class, DatabaseInterface::class, DbTableExists::class], + ], Database\StructureController::class => [ 'class' => Database\StructureController::class, 'arguments' => [ @@ -1131,6 +1135,10 @@ return [ DbTableExists::class, ], ], + Table\Structure\CopyStructureController::class => [ + 'class' => Table\Structure\CopyStructureController::class, + 'arguments' => [ResponseRenderer::class, DatabaseInterface::class, DbTableExists::class], + ], Table\Structure\ReservedWordCheckController::class => [ 'class' => Table\Structure\ReservedWordCheckController::class, 'arguments' => [ResponseRenderer::class, Config::class], diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 024551b850..66c86c54d7 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -948,6 +948,11 @@ + + + + + @@ -2475,6 +2480,11 @@ getParam('field')]]]> + + + + + diff --git a/resources/js/database/structure.ts b/resources/js/database/structure.ts index 79dd95bf3c..6884e1ca2b 100644 --- a/resources/js/database/structure.ts +++ b/resources/js/database/structure.ts @@ -1,7 +1,7 @@ import $ from 'jquery'; import * as bootstrap from 'bootstrap'; import { AJAX } from '../modules/ajax.ts'; -import { getForeignKeyCheckboxLoader, loadForeignKeyCheckbox } from '../modules/functions.ts'; +import { copyToClipboard, displayCopyNotification, getForeignKeyCheckboxLoader, loadForeignKeyCheckbox } from '../modules/functions.ts'; import { Navigation } from '../modules/navigation.ts'; import { CommonParams } from '../modules/common.ts'; import { ajaxRemoveMessage, ajaxShowMessage } from '../modules/ajax-message.ts'; @@ -33,6 +33,7 @@ AJAX.registerTeardown('database/structure.js', function () { $(document).off('click', 'a.truncate_table_anchor.ajax'); $(document).off('click', 'a.drop_table_anchor.ajax'); $(document).off('click', 'a.favorite_table_anchor.ajax'); + $(document).off('click', '#copyStructureBtn'); $('a.real_row_count').off('click'); $('a.row_count_sum').off('click'); $('select[name=submit_mult]').off('change'); @@ -323,4 +324,40 @@ AJAX.registerOnload('database/structure.js', function () { event.preventDefault(); fetchRealRowCount($(this)); }); + + function copyStructureSql (sql: string): void { + if (typeof navigator.clipboard !== 'undefined' && typeof navigator.clipboard.writeText === 'function') { + navigator.clipboard.writeText(sql).then(() => { + displayCopyNotification(true); + }).catch(() => { + displayCopyNotification(copyToClipboard(sql, '