From 8968179c11f4fe3e624873aac4685a5a33521024 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Sun, 28 May 2023 13:20:28 +0200 Subject: [PATCH] feat: export table content or query results as PHP array, closes #575 --- package-lock.json | 11 +++++++++++ package.json | 1 + src/renderer/components/WorkspaceTabQuery.vue | 5 ++++- src/renderer/components/WorkspaceTabQueryTable.vue | 2 +- src/renderer/components/WorkspaceTabTable.vue | 5 ++++- src/renderer/i18n/en-US.ts | 3 ++- src/renderer/libs/exportRows.ts | 10 +++++++++- src/renderer/untyped.d.ts | 3 +++ 8 files changed, 35 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6521b9b4..022dd785 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "electron-window-state": "~5.0.3", "encoding": "~0.1.13", "floating-vue": "~2.0.0-beta.20", + "json2php": "~0.0.7", "leaflet": "~1.7.1", "marked": "~4.0.19", "moment": "~2.29.4", @@ -8642,6 +8643,11 @@ "devOptional": true, "license": "ISC" }, + "node_modules/json2php": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.7.tgz", + "integrity": "sha512-dnSoUiLAoVaMXxFsVi4CrPVYMKOuDBXTghXSmMINX44RZ8WM9cXlY7UqrQnlAcODCVO7FV3+8t/5nDKAjimLfg==" + }, "node_modules/json5": { "version": "2.2.1", "dev": true, @@ -19965,6 +19971,11 @@ "version": "5.0.1", "devOptional": true }, + "json2php": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.7.tgz", + "integrity": "sha512-dnSoUiLAoVaMXxFsVi4CrPVYMKOuDBXTghXSmMINX44RZ8WM9cXlY7UqrQnlAcODCVO7FV3+8t/5nDKAjimLfg==" + }, "json5": { "version": "2.2.1", "dev": true diff --git a/package.json b/package.json index f35e69fe..4e8d37c2 100644 --- a/package.json +++ b/package.json @@ -130,6 +130,7 @@ "electron-window-state": "~5.0.3", "encoding": "~0.1.13", "floating-vue": "~2.0.0-beta.20", + "json2php": "~0.0.7", "leaflet": "~1.7.1", "marked": "~4.0.19", "moment": "~2.29.4", diff --git a/src/renderer/components/WorkspaceTabQuery.vue b/src/renderer/components/WorkspaceTabQuery.vue index a0e39ce9..82eeec38 100644 --- a/src/renderer/components/WorkspaceTabQuery.vue +++ b/src/renderer/components/WorkspaceTabQuery.vue @@ -103,6 +103,9 @@ + @@ -446,7 +449,7 @@ const clear = () => { clearTabData(); }; -const downloadTable = (format: 'csv' | 'json' | 'sql') => { +const downloadTable = (format: 'csv' | 'json' | 'sql' | 'php') => { queryTable.value.downloadTable(format, `${props.tab.type}-${props.tab.index}`); }; diff --git a/src/renderer/components/WorkspaceTabQueryTable.vue b/src/renderer/components/WorkspaceTabQueryTable.vue index fd8b1336..a6943191 100644 --- a/src/renderer/components/WorkspaceTabQueryTable.vue +++ b/src/renderer/components/WorkspaceTabQueryTable.vue @@ -711,7 +711,7 @@ const selectResultset = (index: number) => { resultsetIndex.value = index; }; -const downloadTable = (format: 'csv' | 'json' | 'sql', table: string, chunks = false) => { +const downloadTable = (format: 'csv' | 'json' | 'sql' | 'php', table: string, chunks = false) => { if (!sortedResults.value) return; if (format === 'sql' && !chunks && customizations.value.exportByChunks) { diff --git a/src/renderer/components/WorkspaceTabTable.vue b/src/renderer/components/WorkspaceTabTable.vue index a8e77867..b27b0695 100644 --- a/src/renderer/components/WorkspaceTabTable.vue +++ b/src/renderer/components/WorkspaceTabTable.vue @@ -105,6 +105,9 @@ + @@ -373,7 +376,7 @@ const setRefreshInterval = () => { } }; -const downloadTable = (format: 'csv' | 'json' | 'sql') => { +const downloadTable = (format: 'csv' | 'json' | 'sql' | 'php') => { queryTable.value.downloadTable(format, props.table); }; diff --git a/src/renderer/i18n/en-US.ts b/src/renderer/i18n/en-US.ts index fc01ae97..266e4645 100644 --- a/src/renderer/i18n/en-US.ts +++ b/src/renderer/i18n/en-US.ts @@ -343,7 +343,8 @@ export const enUS = { switchSearchMethod: 'Switch search method', noResultsPresent: 'No results present', sqlExportOptions: 'SQL export options', - targetTable: 'Target table' + targetTable: 'Target table', + phpArray: 'PHP array' }, faker: { address: 'Address', diff --git a/src/renderer/libs/exportRows.ts b/src/renderer/libs/exportRows.ts index 670fe613..2a8676e6 100644 --- a/src/renderer/libs/exportRows.ts +++ b/src/renderer/libs/exportRows.ts @@ -1,8 +1,9 @@ import { ClientCode } from 'common/interfaces/antares'; import { jsonToSqlInsert } from 'common/libs/sqlUtils'; +import * as json2php from 'json2php'; export const exportRows = (args: { - type: 'csv' | 'json'| 'sql'; + type: 'csv' | 'json'| 'sql' | 'php'; content: object[]; table: string; client?: ClientCode; @@ -48,6 +49,13 @@ export const exportRows = (args: { content = sql; break; } + case 'php': { + mime = 'application/x-httpd-php'; + const printer = json2php.make({ linebreak: '\n', indent: '\t', shortArraySyntax: true }); + content = printer(args.content); + content = ` (json: any | any[]) => string; +} declare module 'vuedraggable' {// <- to export as default const draggableComponent: import('vue').DefineComponent<{ list: {