feat: export table content or query results as PHP array, closes #575

This commit is contained in:
Fabio Di Stasio 2023-05-28 13:20:28 +02:00
parent 2c0b4ffe1f
commit 8968179c11
8 changed files with 35 additions and 5 deletions

11
package-lock.json generated
View File

@ -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

View File

@ -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",

View File

@ -103,6 +103,9 @@
<li class="menu-item">
<a class="c-hand" @click="downloadTable('csv')">CSV</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('php')">{{ t('message.phpArray') }}</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('sql')">SQL INSERT</a>
</li>
@ -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}`);
};

View File

@ -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) {

View File

@ -105,6 +105,9 @@
<li class="menu-item">
<a class="c-hand" @click="downloadTable('csv')">CSV</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('php')">{{ t('message.phpArray') }}</a>
</li>
<li class="menu-item">
<a class="c-hand" @click="downloadTable('sql')">SQL INSERT</a>
</li>
@ -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);
};

View File

@ -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',

View File

@ -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 = `<?php\n$${(args.sqlOptions?.targetTable || args.table).replaceAll('-', '_')} = ${content};`;
break;
}
case 'json':
mime = 'application/json';
content = JSON.stringify(args.content, null, 3);

View File

@ -2,6 +2,9 @@
/* eslint-disable @typescript-eslint/ban-types */
declare module '@/App.vue';
declare module 'v-mask';
declare module 'json2php' {
const make: (args: { linebreak: string; indent: string; shortArraySyntax: boolean }) => (json: any | any[]) => string;
}
declare module 'vuedraggable' {// <- to export as default
const draggableComponent: import('vue').DefineComponent<{
list: {