@saltcorn/server 0.8.6-beta.9 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/admin.js +2 -2
- package/auth/routes.js +7 -7
- package/load_plugins.js +4 -3
- package/locales/en.json +7 -1
- package/markup/admin.js +1 -1
- package/package.json +9 -9
- package/public/cm_modes/handlebars.js +70 -0
- package/public/cm_modes/htmlmixed.js +153 -0
- package/routes/actions.js +10 -3
- package/routes/admin.js +111 -21
- package/routes/api.js +6 -6
- package/routes/delete.js +1 -1
- package/routes/edit.js +1 -1
- package/routes/fields.js +28 -21
- package/routes/list.js +6 -6
- package/routes/menu.js +1 -1
- package/routes/plugins.js +12 -12
- package/routes/tables.js +33 -26
- package/routes/view.js +2 -2
- package/routes/viewedit.js +4 -5
- package/s3storage.js +1 -0
- package/serve.js +26 -2
- package/tests/api.test.js +1 -1
- package/tests/auth.test.js +4 -4
- package/tests/crud.test.js +7 -7
- package/tests/fields.test.js +10 -10
- package/tests/files.test.js +1 -1
- package/tests/kittens.test.js +1 -1
- package/tests/table.test.js +4 -4
- package/tests/view.test.js +4 -4
- package/tests/viewedit.test.js +8 -8
package/routes/api.js
CHANGED
|
@@ -194,7 +194,7 @@ router.get(
|
|
|
194
194
|
//passport.authenticate("api-bearer", { session: false }),
|
|
195
195
|
error_catcher(async (req, res, next) => {
|
|
196
196
|
let { tableName, fieldName } = req.params;
|
|
197
|
-
const table =
|
|
197
|
+
const table = Table.findOne(
|
|
198
198
|
strictParseInt(tableName)
|
|
199
199
|
? { id: strictParseInt(tableName) }
|
|
200
200
|
: { name: tableName }
|
|
@@ -249,7 +249,7 @@ router.get(
|
|
|
249
249
|
error_catcher(async (req, res, next) => {
|
|
250
250
|
let { tableName } = req.params;
|
|
251
251
|
const { fields, versioncount, approximate, ...req_query } = req.query;
|
|
252
|
-
const table =
|
|
252
|
+
const table = Table.findOne(
|
|
253
253
|
strictParseInt(tableName)
|
|
254
254
|
? { id: strictParseInt(tableName) }
|
|
255
255
|
: { name: tableName }
|
|
@@ -377,7 +377,7 @@ router.post(
|
|
|
377
377
|
"/:tableName/",
|
|
378
378
|
error_catcher(async (req, res, next) => {
|
|
379
379
|
const { tableName } = req.params;
|
|
380
|
-
const table =
|
|
380
|
+
const table = Table.findOne({ name: tableName });
|
|
381
381
|
if (!table) {
|
|
382
382
|
getState().log(3, `API POST ${tableName} not found`);
|
|
383
383
|
res.status(404).json({ error: req.__("Not found") });
|
|
@@ -454,7 +454,7 @@ router.post(
|
|
|
454
454
|
"/:tableName/:id",
|
|
455
455
|
error_catcher(async (req, res, next) => {
|
|
456
456
|
const { tableName, id } = req.params;
|
|
457
|
-
const table =
|
|
457
|
+
const table = Table.findOne({ name: tableName });
|
|
458
458
|
if (!table) {
|
|
459
459
|
getState().log(3, `API POST ${tableName} not found`);
|
|
460
460
|
res.status(404).json({ error: req.__("Not found") });
|
|
@@ -507,7 +507,7 @@ router.delete(
|
|
|
507
507
|
// in case of primary key different from id - id will be string "undefined"
|
|
508
508
|
error_catcher(async (req, res, next) => {
|
|
509
509
|
const { tableName, id } = req.params;
|
|
510
|
-
const table =
|
|
510
|
+
const table = Table.findOne({ name: tableName });
|
|
511
511
|
if (!table) {
|
|
512
512
|
getState().log(3, `API DELETE ${tableName} not found`);
|
|
513
513
|
res.status(404).json({ error: req.__("Not found") });
|
|
@@ -521,7 +521,7 @@ router.delete(
|
|
|
521
521
|
try {
|
|
522
522
|
if (id === "undefined") {
|
|
523
523
|
const pk_name = table.pk_name;
|
|
524
|
-
//const fields =
|
|
524
|
+
//const fields = table.getFields();
|
|
525
525
|
const row = req.body;
|
|
526
526
|
//readState(row, fields);
|
|
527
527
|
await table.deleteRows(
|
package/routes/delete.js
CHANGED
|
@@ -33,7 +33,7 @@ router.post(
|
|
|
33
33
|
const { tableName, id } = req.params;
|
|
34
34
|
const { redirect } = req.query;
|
|
35
35
|
// todo check that works after where change
|
|
36
|
-
const table =
|
|
36
|
+
const table = Table.findOne({ name: tableName });
|
|
37
37
|
const role = req.user && req.user.id ? req.user.role_id : 100;
|
|
38
38
|
try {
|
|
39
39
|
if (role <= table.min_role_write)
|
package/routes/edit.js
CHANGED
|
@@ -31,7 +31,7 @@ router.post(
|
|
|
31
31
|
const { tableName, id, field_name } = req.params;
|
|
32
32
|
const { redirect } = req.query;
|
|
33
33
|
// todo check that works after where change
|
|
34
|
-
const table =
|
|
34
|
+
const table = Table.findOne({ name: tableName });
|
|
35
35
|
|
|
36
36
|
const row = await table.getRow(
|
|
37
37
|
{ [table.pk_name]: id },
|
package/routes/fields.js
CHANGED
|
@@ -267,7 +267,7 @@ const fieldFlow = (req) =>
|
|
|
267
267
|
const tables = await Table.find({});
|
|
268
268
|
const table = tables.find((t) => t.id === context.table_id);
|
|
269
269
|
const nrows = await table.countRows({});
|
|
270
|
-
const existing_fields =
|
|
270
|
+
const existing_fields = table.getFields();
|
|
271
271
|
const existingNames = existing_fields.map((f) => f.name);
|
|
272
272
|
const fkey_opts = ["File", ...tables.map((t) => `Key to ${t.name}`)];
|
|
273
273
|
const form = await fieldForm(
|
|
@@ -358,8 +358,8 @@ const fieldFlow = (req) =>
|
|
|
358
358
|
name: req.__("Expression"),
|
|
359
359
|
onlyWhen: (context) => context.calculated,
|
|
360
360
|
form: async (context) => {
|
|
361
|
-
const table =
|
|
362
|
-
const fields =
|
|
361
|
+
const table = Table.findOne({ id: context.table_id });
|
|
362
|
+
const fields = table.getFields();
|
|
363
363
|
return new Form({
|
|
364
364
|
blurb: expressionBlurb(context.type, context.stored, fields, req),
|
|
365
365
|
fields: [
|
|
@@ -397,8 +397,8 @@ const fieldFlow = (req) =>
|
|
|
397
397
|
context.type !== "File" && new Field(context).is_fkey,
|
|
398
398
|
form: async (context) => {
|
|
399
399
|
const fld = new Field(context);
|
|
400
|
-
const table =
|
|
401
|
-
const fields =
|
|
400
|
+
const table = Table.findOne({ name: fld.reftable_name });
|
|
401
|
+
const fields = table.getFields();
|
|
402
402
|
const orderedFields = [
|
|
403
403
|
...fields.filter((f) => !f.primary_key),
|
|
404
404
|
...fields.filter((f) => f.primary_key),
|
|
@@ -474,7 +474,7 @@ const fieldFlow = (req) =>
|
|
|
474
474
|
onlyWhen: async (context) => context.required && !context.calculated,
|
|
475
475
|
|
|
476
476
|
form: async (context) => {
|
|
477
|
-
const table =
|
|
477
|
+
const table = Table.findOne({ id: context.table_id });
|
|
478
478
|
const nrows = await table.countRows();
|
|
479
479
|
const formfield = new Field({
|
|
480
480
|
name: "default",
|
|
@@ -532,7 +532,7 @@ router.get(
|
|
|
532
532
|
res.redirect(`/table`);
|
|
533
533
|
return;
|
|
534
534
|
}
|
|
535
|
-
const table =
|
|
535
|
+
const table = Table.findOne({ id: field.table_id });
|
|
536
536
|
if (!field.type) {
|
|
537
537
|
req.flash("danger", req.__(`Type %s not found`, field.typename));
|
|
538
538
|
res.redirect(`/table/${field.table_id}`);
|
|
@@ -579,7 +579,7 @@ router.get(
|
|
|
579
579
|
isAdmin,
|
|
580
580
|
error_catcher(async (req, res) => {
|
|
581
581
|
const { table_id } = req.params;
|
|
582
|
-
const table =
|
|
582
|
+
const table = Table.findOne({ id: table_id });
|
|
583
583
|
const wf = fieldFlow(req);
|
|
584
584
|
const wfres = await wf.run({ table_id: +table_id }, req);
|
|
585
585
|
res.sendWrap(req.__(`New field`), {
|
|
@@ -643,7 +643,7 @@ router.post(
|
|
|
643
643
|
const wf = fieldFlow(req);
|
|
644
644
|
const wfres = await wf.run(req.body, req);
|
|
645
645
|
if (wfres.renderForm) {
|
|
646
|
-
const table =
|
|
646
|
+
const table = Table.findOne({ id: wfres.context.table_id });
|
|
647
647
|
res.sendWrap(req.__(`Field attributes`), {
|
|
648
648
|
above: [
|
|
649
649
|
{
|
|
@@ -690,8 +690,8 @@ router.post(
|
|
|
690
690
|
isAdmin,
|
|
691
691
|
error_catcher(async (req, res) => {
|
|
692
692
|
const { formula, tablename, stored } = req.body;
|
|
693
|
-
const table =
|
|
694
|
-
const fields =
|
|
693
|
+
const table = Table.findOne({ name: tablename });
|
|
694
|
+
const fields = table.getFields();
|
|
695
695
|
const freeVars = freeVariables(formula);
|
|
696
696
|
const joinFields = {};
|
|
697
697
|
if (stored) add_free_variables_to_joinfields(freeVars, joinFields, fields);
|
|
@@ -736,10 +736,10 @@ router.post(
|
|
|
736
736
|
"/show-calculated/:tableName/:fieldName/:fieldview",
|
|
737
737
|
error_catcher(async (req, res) => {
|
|
738
738
|
const { tableName, fieldName, fieldview } = req.params;
|
|
739
|
-
const table =
|
|
739
|
+
const table = Table.findOne({ name: tableName });
|
|
740
740
|
const role = req.user && req.user.id ? req.user.role_id : 100;
|
|
741
741
|
|
|
742
|
-
const fields =
|
|
742
|
+
const fields = table.getFields();
|
|
743
743
|
let row = { ...req.body };
|
|
744
744
|
if (row && Object.keys(row).length > 0) readState(row, fields);
|
|
745
745
|
|
|
@@ -764,7 +764,7 @@ router.post(
|
|
|
764
764
|
for (const { ref } of Object.values(joinFields)) {
|
|
765
765
|
if (row[ref]) {
|
|
766
766
|
const field = fields.find((f) => f.name === ref);
|
|
767
|
-
const reftable =
|
|
767
|
+
const reftable = Table.findOne({ name: field.reftable_name });
|
|
768
768
|
const refFields = await reftable.getFields();
|
|
769
769
|
|
|
770
770
|
const joinFields = {};
|
|
@@ -798,7 +798,7 @@ router.post(
|
|
|
798
798
|
const kpath = fieldName.split(".");
|
|
799
799
|
if (kpath.length === 2 && row[kpath[0]]) {
|
|
800
800
|
const field = fields.find((f) => f.name === kpath[0]);
|
|
801
|
-
const reftable =
|
|
801
|
+
const reftable = Table.findOne({ name: field.reftable_name });
|
|
802
802
|
const refFields = await reftable.getFields();
|
|
803
803
|
const targetField = refFields.find((f) => f.name === kpath[1]);
|
|
804
804
|
//console.log({ kpath, fieldview, targetField });
|
|
@@ -859,7 +859,7 @@ router.post(
|
|
|
859
859
|
const ofields = await oldTable.getFields();
|
|
860
860
|
const field = ofields.find((f) => f.name === ref);
|
|
861
861
|
if (field.is_fkey) {
|
|
862
|
-
const reftable =
|
|
862
|
+
const reftable = Table.findOne({ name: field.reftable_name });
|
|
863
863
|
if (!oldRow[ref]) break;
|
|
864
864
|
if (role > reftable.min_role_read) {
|
|
865
865
|
res.status(401).send("");
|
|
@@ -915,8 +915,8 @@ router.post(
|
|
|
915
915
|
isAdmin,
|
|
916
916
|
error_catcher(async (req, res) => {
|
|
917
917
|
const { tableName, fieldName, fieldview } = req.params;
|
|
918
|
-
const table =
|
|
919
|
-
const fields =
|
|
918
|
+
const table = Table.findOne({ name: tableName });
|
|
919
|
+
const fields = table.getFields();
|
|
920
920
|
let field, row, value;
|
|
921
921
|
if (fieldName.includes(".")) {
|
|
922
922
|
const [refNm, targetNm] = fieldName.split(".");
|
|
@@ -925,7 +925,7 @@ router.post(
|
|
|
925
925
|
res.send("");
|
|
926
926
|
return;
|
|
927
927
|
}
|
|
928
|
-
const reftable =
|
|
928
|
+
const reftable = Table.findOne({ name: ref.reftable_name });
|
|
929
929
|
if (!reftable) {
|
|
930
930
|
res.send("");
|
|
931
931
|
return;
|
|
@@ -1004,7 +1004,7 @@ router.post(
|
|
|
1004
1004
|
isAdmin,
|
|
1005
1005
|
error_catcher(async (req, res) => {
|
|
1006
1006
|
const { tableName } = req.params;
|
|
1007
|
-
|
|
1007
|
+
let {
|
|
1008
1008
|
field_name,
|
|
1009
1009
|
fieldview,
|
|
1010
1010
|
type,
|
|
@@ -1012,7 +1012,14 @@ router.post(
|
|
|
1012
1012
|
join_fieldview,
|
|
1013
1013
|
_columndef,
|
|
1014
1014
|
} = req.body;
|
|
1015
|
-
const table =
|
|
1015
|
+
const table = Table.findOne({ name: tableName });
|
|
1016
|
+
if (typeof type !== "string") {
|
|
1017
|
+
try {
|
|
1018
|
+
type = JSON.parse(_columndef).type;
|
|
1019
|
+
} catch {
|
|
1020
|
+
//ignore
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1016
1023
|
const fieldName = type == "Field" ? field_name : join_field;
|
|
1017
1024
|
const fv_name = type == "Field" ? fieldview : join_fieldview;
|
|
1018
1025
|
if (!fieldName) {
|
package/routes/list.js
CHANGED
|
@@ -51,9 +51,9 @@ router.get(
|
|
|
51
51
|
isAdmin,
|
|
52
52
|
error_catcher(async (req, res) => {
|
|
53
53
|
const { tableName, id } = req.params;
|
|
54
|
-
const table =
|
|
54
|
+
const table = Table.findOne({ name: tableName });
|
|
55
55
|
|
|
56
|
-
const fields =
|
|
56
|
+
const fields = table.getFields();
|
|
57
57
|
var tfields = fields.map((f) => ({ label: f.label, key: f.listKey }));
|
|
58
58
|
|
|
59
59
|
tfields.push({
|
|
@@ -99,9 +99,9 @@ router.post(
|
|
|
99
99
|
isAdmin,
|
|
100
100
|
error_catcher(async (req, res) => {
|
|
101
101
|
const { tableName, id, _version } = req.params;
|
|
102
|
-
const table =
|
|
102
|
+
const table = Table.findOne({ name: tableName });
|
|
103
103
|
|
|
104
|
-
const fields =
|
|
104
|
+
const fields = table.getFields();
|
|
105
105
|
const row = await db.selectOne(`${db.sqlsanitize(table.name)}__history`, {
|
|
106
106
|
id,
|
|
107
107
|
_version,
|
|
@@ -231,13 +231,13 @@ router.get(
|
|
|
231
231
|
isAdmin,
|
|
232
232
|
error_catcher(async (req, res) => {
|
|
233
233
|
const { tname } = req.params;
|
|
234
|
-
const table =
|
|
234
|
+
const table = Table.findOne({ name: tname });
|
|
235
235
|
if (!table) {
|
|
236
236
|
req.flash("error", req.__("Table %s not found", text(tname)));
|
|
237
237
|
res.redirect(`/table`);
|
|
238
238
|
return;
|
|
239
239
|
}
|
|
240
|
-
const fields =
|
|
240
|
+
const fields = table.getFields();
|
|
241
241
|
for (const f of fields) {
|
|
242
242
|
if (f.type === "File") f.attributes = { select_file_where: {} };
|
|
243
243
|
await f.fill_fkey_options();
|
package/routes/menu.js
CHANGED
|
@@ -51,7 +51,7 @@ const menuForm = async (req) => {
|
|
|
51
51
|
for (const table of tables) {
|
|
52
52
|
dynOrderFieldOptions[table.name] = [""];
|
|
53
53
|
dynSectionFieldOptions[table.name] = [""];
|
|
54
|
-
const fields =
|
|
54
|
+
const fields = table.getFields();
|
|
55
55
|
for (const field of fields) {
|
|
56
56
|
dynOrderFieldOptions[table.name].push(field.name);
|
|
57
57
|
if (
|
package/routes/plugins.js
CHANGED
|
@@ -669,11 +669,10 @@ router.post(
|
|
|
669
669
|
const instore = await Plugin.store_plugins_available();
|
|
670
670
|
const store_plugin = instore.find((p) => p.name === plugin.name);
|
|
671
671
|
if (store_plugin && store_plugin.has_auth) flash_restart(req);
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
});
|
|
672
|
+
getState().processSend({
|
|
673
|
+
refresh_plugin_cfg: plugin.name,
|
|
674
|
+
tenant: db.getTenantSchema(),
|
|
675
|
+
});
|
|
677
676
|
if (module.layout) await sleep(500); // Allow other workers to reload this plugin
|
|
678
677
|
res.redirect("/plugins");
|
|
679
678
|
}
|
|
@@ -700,11 +699,10 @@ router.post(
|
|
|
700
699
|
};
|
|
701
700
|
await plugin.upsert();
|
|
702
701
|
await load_plugins.loadPlugin(plugin);
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
});
|
|
702
|
+
getState().processSend({
|
|
703
|
+
refresh_plugin_cfg: plugin.name,
|
|
704
|
+
tenant: db.getTenantSchema(),
|
|
705
|
+
});
|
|
708
706
|
res.json({ success: "ok" });
|
|
709
707
|
}
|
|
710
708
|
}
|
|
@@ -955,8 +953,10 @@ router.get(
|
|
|
955
953
|
}
|
|
956
954
|
req.flash("success", req.__(`Modules up-to-date`));
|
|
957
955
|
await restart_tenant(loadAllPlugins);
|
|
958
|
-
|
|
959
|
-
|
|
956
|
+
getState().processSend({
|
|
957
|
+
restart_tenant: true,
|
|
958
|
+
tenant: db.getTenantSchema(),
|
|
959
|
+
});
|
|
960
960
|
}
|
|
961
961
|
res.redirect(`/plugins`);
|
|
962
962
|
})
|
package/routes/tables.js
CHANGED
|
@@ -11,6 +11,7 @@ const Table = require("@saltcorn/data/models/table");
|
|
|
11
11
|
const File = require("@saltcorn/data/models/file");
|
|
12
12
|
const View = require("@saltcorn/data/models/view");
|
|
13
13
|
const User = require("@saltcorn/data/models/user");
|
|
14
|
+
const Trigger = require("@saltcorn/data/models/trigger");
|
|
14
15
|
const {
|
|
15
16
|
mkTable,
|
|
16
17
|
renderForm,
|
|
@@ -72,7 +73,7 @@ module.exports = router;
|
|
|
72
73
|
* @returns {Promise<Form>}
|
|
73
74
|
*/
|
|
74
75
|
const tableForm = async (table, req) => {
|
|
75
|
-
const fields =
|
|
76
|
+
const fields = table.getFields();
|
|
76
77
|
const roleOptions = (await User.get_roles()).map((r) => ({
|
|
77
78
|
value: r.id,
|
|
78
79
|
label: r.role,
|
|
@@ -433,7 +434,7 @@ router.get(
|
|
|
433
434
|
const tables = await Table.find_with_external({}, { orderBy: "name" });
|
|
434
435
|
const edges = [];
|
|
435
436
|
for (const table of tables) {
|
|
436
|
-
const fields =
|
|
437
|
+
const fields = table.getFields();
|
|
437
438
|
for (const field of fields) {
|
|
438
439
|
if (field.reftable_name)
|
|
439
440
|
edges.push({
|
|
@@ -563,9 +564,9 @@ router.get(
|
|
|
563
564
|
const { idorname } = req.params;
|
|
564
565
|
let id = parseInt(idorname);
|
|
565
566
|
let table;
|
|
566
|
-
if (id) table = Table.
|
|
567
|
+
if (id) [table] = await Table.find({ id });
|
|
567
568
|
else {
|
|
568
|
-
table = Table.
|
|
569
|
+
[table] = await Table.find({ name: idorname });
|
|
569
570
|
}
|
|
570
571
|
|
|
571
572
|
if (!table) {
|
|
@@ -574,11 +575,12 @@ router.get(
|
|
|
574
575
|
return;
|
|
575
576
|
}
|
|
576
577
|
const nrows = await table.countRows();
|
|
577
|
-
const fields =
|
|
578
|
+
const fields = table.getFields();
|
|
578
579
|
const { child_relations } = await table.get_child_relations();
|
|
579
580
|
const inbound_refs = [
|
|
580
581
|
...new Set(child_relations.map(({ table }) => table.name)),
|
|
581
582
|
];
|
|
583
|
+
const triggers = table.id ? Trigger.find({ table_id: table.id }) : [];
|
|
582
584
|
let fieldCard;
|
|
583
585
|
if (fields.length === 0) {
|
|
584
586
|
fieldCard = [
|
|
@@ -647,6 +649,13 @@ router.get(
|
|
|
647
649
|
inbound_refs.map((tnm) => link(`/table/${tnm}`, tnm)).join(", ") +
|
|
648
650
|
"<br>"
|
|
649
651
|
: "",
|
|
652
|
+
triggers.length
|
|
653
|
+
? req.__("Table triggers: ") +
|
|
654
|
+
triggers
|
|
655
|
+
.map((t) => link(`/actions/configure/${t.id}`, t.name))
|
|
656
|
+
.join(", ") +
|
|
657
|
+
"<br>"
|
|
658
|
+
: "",
|
|
650
659
|
!table.external &&
|
|
651
660
|
a(
|
|
652
661
|
{
|
|
@@ -911,12 +920,10 @@ router.post(
|
|
|
911
920
|
rest.provider_name !== "Database table"
|
|
912
921
|
) {
|
|
913
922
|
const table = await Table.create(name, rest);
|
|
914
|
-
await sleep(500); // Allow other workers to load this view
|
|
915
923
|
res.redirect(`/table/provider-cfg/${table.id}`);
|
|
916
924
|
} else {
|
|
917
925
|
delete rest.provider_name;
|
|
918
926
|
const table = await Table.create(name, rest);
|
|
919
|
-
await sleep(500); // Allow other workers to load this view
|
|
920
927
|
req.flash("success", req.__(`Table %s created`, name));
|
|
921
928
|
res.redirect(`/table/${table.id}`);
|
|
922
929
|
}
|
|
@@ -924,7 +931,7 @@ router.post(
|
|
|
924
931
|
// todo check that works after where change
|
|
925
932
|
// todo findOne can be have parameter for external table here
|
|
926
933
|
//we can only save min role
|
|
927
|
-
const table =
|
|
934
|
+
const table = Table.findOne({ name: v.name });
|
|
928
935
|
if (table) {
|
|
929
936
|
const exttables_min_role_read = getState().getConfigCopy(
|
|
930
937
|
"exttables_min_role_read",
|
|
@@ -942,7 +949,7 @@ router.post(
|
|
|
942
949
|
}
|
|
943
950
|
} else {
|
|
944
951
|
const { id, _csrf, ...rest } = v;
|
|
945
|
-
const table =
|
|
952
|
+
const table = Table.findOne({ id: parseInt(id) });
|
|
946
953
|
const old_versioned = table.versioned;
|
|
947
954
|
let hasError = false;
|
|
948
955
|
let notify = "";
|
|
@@ -994,7 +1001,7 @@ router.post(
|
|
|
994
1001
|
isAdmin,
|
|
995
1002
|
error_catcher(async (req, res) => {
|
|
996
1003
|
const { id } = req.params;
|
|
997
|
-
const t =
|
|
1004
|
+
const t = Table.findOne({ id });
|
|
998
1005
|
if (!t) {
|
|
999
1006
|
req.flash("error", `Table not found`);
|
|
1000
1007
|
res.redirect(`/table`);
|
|
@@ -1020,7 +1027,7 @@ router.post(
|
|
|
1020
1027
|
isAdmin,
|
|
1021
1028
|
error_catcher(async (req, res) => {
|
|
1022
1029
|
const { id } = req.params;
|
|
1023
|
-
const t =
|
|
1030
|
+
const t = Table.findOne({ id });
|
|
1024
1031
|
if (!t) {
|
|
1025
1032
|
req.flash("error", `Table not found`);
|
|
1026
1033
|
res.redirect(`/table`);
|
|
@@ -1126,7 +1133,7 @@ router.get(
|
|
|
1126
1133
|
isAdmin,
|
|
1127
1134
|
error_catcher(async (req, res) => {
|
|
1128
1135
|
const { name } = req.params;
|
|
1129
|
-
const table =
|
|
1136
|
+
const table = Table.findOne({ name });
|
|
1130
1137
|
const rows = await table.getRows();
|
|
1131
1138
|
res.setHeader("Content-Type", "text/csv");
|
|
1132
1139
|
res.setHeader("Content-Disposition", `attachment; filename="${name}.csv"`);
|
|
@@ -1155,7 +1162,7 @@ router.get(
|
|
|
1155
1162
|
isAdmin,
|
|
1156
1163
|
error_catcher(async (req, res) => {
|
|
1157
1164
|
const { id } = req.params;
|
|
1158
|
-
const table =
|
|
1165
|
+
const table = Table.findOne({ id });
|
|
1159
1166
|
if (!table) {
|
|
1160
1167
|
req.flash("error", `Table not found`);
|
|
1161
1168
|
res.redirect(`/table`);
|
|
@@ -1295,13 +1302,13 @@ router.get(
|
|
|
1295
1302
|
isAdmin,
|
|
1296
1303
|
error_catcher(async (req, res) => {
|
|
1297
1304
|
const { id, type } = req.params;
|
|
1298
|
-
const table =
|
|
1305
|
+
const table = Table.findOne({ id });
|
|
1299
1306
|
if (!table) {
|
|
1300
1307
|
req.flash("error", `Table not found`);
|
|
1301
1308
|
res.redirect(`/table`);
|
|
1302
1309
|
return;
|
|
1303
1310
|
}
|
|
1304
|
-
const fields =
|
|
1311
|
+
const fields = table.getFields();
|
|
1305
1312
|
const form = constraintForm(req, table.id, fields, type);
|
|
1306
1313
|
res.sendWrap(req.__(`Add constraint to %s`, table.name), {
|
|
1307
1314
|
above: [
|
|
@@ -1339,13 +1346,13 @@ router.post(
|
|
|
1339
1346
|
isAdmin,
|
|
1340
1347
|
error_catcher(async (req, res) => {
|
|
1341
1348
|
const { id, type } = req.params;
|
|
1342
|
-
const table =
|
|
1349
|
+
const table = Table.findOne({ id });
|
|
1343
1350
|
if (!table) {
|
|
1344
1351
|
req.flash("error", `Table not found`);
|
|
1345
1352
|
res.redirect(`/table`);
|
|
1346
1353
|
return;
|
|
1347
1354
|
}
|
|
1348
|
-
const fields =
|
|
1355
|
+
const fields = table.getFields();
|
|
1349
1356
|
const form = constraintForm(req, table.id, fields, type);
|
|
1350
1357
|
form.validate(req.body);
|
|
1351
1358
|
if (form.hasErrors) req.flash("error", req.__("An error occurred"));
|
|
@@ -1397,7 +1404,7 @@ router.get(
|
|
|
1397
1404
|
isAdmin,
|
|
1398
1405
|
error_catcher(async (req, res) => {
|
|
1399
1406
|
const { id } = req.params;
|
|
1400
|
-
const table =
|
|
1407
|
+
const table = Table.findOne({ id });
|
|
1401
1408
|
|
|
1402
1409
|
const form = renameForm(table.id, req);
|
|
1403
1410
|
res.sendWrap(req.__(`Rename table %s`, table.name), {
|
|
@@ -1434,7 +1441,7 @@ router.post(
|
|
|
1434
1441
|
isAdmin,
|
|
1435
1442
|
error_catcher(async (req, res) => {
|
|
1436
1443
|
const { id } = req.params;
|
|
1437
|
-
const table =
|
|
1444
|
+
const table = Table.findOne({ id });
|
|
1438
1445
|
const form = renameForm(table.id, req);
|
|
1439
1446
|
|
|
1440
1447
|
form.validate(req.body);
|
|
@@ -1560,7 +1567,7 @@ router.post(
|
|
|
1560
1567
|
isAdmin,
|
|
1561
1568
|
error_catcher(async (req, res) => {
|
|
1562
1569
|
const { name } = req.params;
|
|
1563
|
-
const table =
|
|
1570
|
+
const table = Table.findOne({ name });
|
|
1564
1571
|
if (!req.files || !req.files.file) {
|
|
1565
1572
|
req.flash("error", "Missing file");
|
|
1566
1573
|
res.redirect(`/table/${table.id}`);
|
|
@@ -1579,7 +1586,7 @@ router.get(
|
|
|
1579
1586
|
isAdmin,
|
|
1580
1587
|
error_catcher(async (req, res) => {
|
|
1581
1588
|
const { name, filename } = req.params;
|
|
1582
|
-
const table =
|
|
1589
|
+
const table = Table.findOne({ name });
|
|
1583
1590
|
const f = await File.findOne(filename);
|
|
1584
1591
|
await previewCSV({ newPath: f.location, table, res, req, full: true });
|
|
1585
1592
|
})
|
|
@@ -1590,7 +1597,7 @@ router.post(
|
|
|
1590
1597
|
isAdmin,
|
|
1591
1598
|
error_catcher(async (req, res) => {
|
|
1592
1599
|
const { name, filename } = req.params;
|
|
1593
|
-
const table =
|
|
1600
|
+
const table = Table.findOne({ name });
|
|
1594
1601
|
const f = await File.findOne(filename);
|
|
1595
1602
|
|
|
1596
1603
|
try {
|
|
@@ -1619,7 +1626,7 @@ router.post(
|
|
|
1619
1626
|
isAdmin,
|
|
1620
1627
|
error_catcher(async (req, res) => {
|
|
1621
1628
|
const { name } = req.params;
|
|
1622
|
-
const table =
|
|
1629
|
+
const table = Table.findOne({ name });
|
|
1623
1630
|
|
|
1624
1631
|
try {
|
|
1625
1632
|
await table.deleteRows({});
|
|
@@ -1644,7 +1651,7 @@ router.post(
|
|
|
1644
1651
|
isAdmin,
|
|
1645
1652
|
error_catcher(async (req, res) => {
|
|
1646
1653
|
const { name } = req.params;
|
|
1647
|
-
const table =
|
|
1654
|
+
const table = Table.findOne({ name });
|
|
1648
1655
|
if (!table) {
|
|
1649
1656
|
req.flash("error", `Table not found: ${text(name)}`);
|
|
1650
1657
|
res.redirect(`/table`);
|
|
@@ -1737,7 +1744,7 @@ router.get(
|
|
|
1737
1744
|
const { id } = req.params;
|
|
1738
1745
|
const { step } = req.query;
|
|
1739
1746
|
|
|
1740
|
-
const table =
|
|
1747
|
+
const table = Table.findOne({ id });
|
|
1741
1748
|
if (!table) {
|
|
1742
1749
|
req.flash("error", `Table not found`);
|
|
1743
1750
|
res.redirect(`/table`);
|
|
@@ -1763,7 +1770,7 @@ router.post(
|
|
|
1763
1770
|
const { id } = req.params;
|
|
1764
1771
|
const { step } = req.query;
|
|
1765
1772
|
|
|
1766
|
-
const table =
|
|
1773
|
+
const table = Table.findOne({ id });
|
|
1767
1774
|
if (!table) {
|
|
1768
1775
|
req.flash("error", `Table not found`);
|
|
1769
1776
|
res.redirect(`/table`);
|
package/routes/view.js
CHANGED
|
@@ -117,7 +117,7 @@ router.post(
|
|
|
117
117
|
error_catcher(async (req, res) => {
|
|
118
118
|
const { viewname } = req.params;
|
|
119
119
|
|
|
120
|
-
const view = await View.
|
|
120
|
+
const [view] = await View.find({ name: viewname });
|
|
121
121
|
if (!view) {
|
|
122
122
|
res.send("");
|
|
123
123
|
return;
|
|
@@ -131,7 +131,7 @@ router.post(
|
|
|
131
131
|
if (!row) {
|
|
132
132
|
if (!table)
|
|
133
133
|
// todo check after where change
|
|
134
|
-
table =
|
|
134
|
+
table = Table.findOne(
|
|
135
135
|
view.table_id
|
|
136
136
|
? { id: view.table_id }
|
|
137
137
|
: { name: view.exttable_name }
|
package/routes/viewedit.js
CHANGED
|
@@ -449,18 +449,18 @@ router.post(
|
|
|
449
449
|
|
|
450
450
|
const v = result.success;
|
|
451
451
|
if (v.table_name) {
|
|
452
|
-
const table =
|
|
452
|
+
const table = Table.findOne({ name: v.table_name });
|
|
453
453
|
if (table && table.id) {
|
|
454
454
|
v.table_id = table.id;
|
|
455
455
|
} else if (table && table.external) v.exttable_name = v.table_name;
|
|
456
456
|
}
|
|
457
457
|
if (v.table_id) {
|
|
458
|
-
const table =
|
|
458
|
+
const table = Table.findOne({ id: v.table_id });
|
|
459
459
|
const slugOptions = await table.slug_options();
|
|
460
460
|
const slug = slugOptions.find((so) => so.label === v.slug);
|
|
461
461
|
v.slug = slug || null;
|
|
462
462
|
}
|
|
463
|
-
//const table =
|
|
463
|
+
//const table = Table.findOne({ name: v.table_name });
|
|
464
464
|
delete v.table_name;
|
|
465
465
|
if (req.body.id) {
|
|
466
466
|
await View.update(v, +req.body.id);
|
|
@@ -470,7 +470,6 @@ router.post(
|
|
|
470
470
|
else v.configuration = {};
|
|
471
471
|
//console.log(v);
|
|
472
472
|
await View.create(v);
|
|
473
|
-
await sleep(500); // Allow other workers to load this view
|
|
474
473
|
}
|
|
475
474
|
res.redirect(
|
|
476
475
|
addOnDoneRedirect(
|
|
@@ -583,7 +582,7 @@ router.get(
|
|
|
583
582
|
error_catcher(async (req, res) => {
|
|
584
583
|
const { name } = req.params;
|
|
585
584
|
const { step } = req.query;
|
|
586
|
-
const view = await View.
|
|
585
|
+
const [view] = await View.find({ name });
|
|
587
586
|
if (!view) {
|
|
588
587
|
req.flash("error", `View not found: ${text(name)}`);
|
|
589
588
|
res.redirect("/viewedit");
|
package/s3storage.js
CHANGED