Skip to content

Commit

Permalink
feat: export table content or query results as PHP array, closes #575
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabio286 committed May 28, 2023
1 parent 2c0b4ff commit 8968179
Show file tree
Hide file tree
Showing 8 changed files with 35 additions and 5 deletions.
11 changes: 11 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Expand Up @@ -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",
Expand Down
5 changes: 4 additions & 1 deletion src/renderer/components/WorkspaceTabQuery.vue
Expand Up @@ -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>
Expand Down Expand Up @@ -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}`);
};
Expand Down
2 changes: 1 addition & 1 deletion src/renderer/components/WorkspaceTabQueryTable.vue
Expand Up @@ -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) {
Expand Down
5 changes: 4 additions & 1 deletion src/renderer/components/WorkspaceTabTable.vue
Expand Up @@ -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>
Expand Down Expand Up @@ -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);
};
Expand Down
3 changes: 2 additions & 1 deletion src/renderer/i18n/en-US.ts
Expand Up @@ -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',
Expand Down
10 changes: 9 additions & 1 deletion 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;
Expand Down Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions src/renderer/untyped.d.ts
Expand Up @@ -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: {
Expand Down

0 comments on commit 8968179

Please sign in to comment.