@saltcorn/server 0.8.1-beta.0 → 0.8.1-beta.2
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/locales/en.json +7 -1
- package/locales/it.json +2 -1
- package/package.json +8 -8
- package/public/saltcorn-common.js +10 -1
- package/public/saltcorn.js +3 -2
- package/routes/actions.js +8 -2
- package/routes/admin.js +9 -0
- package/routes/fields.js +18 -8
- package/routes/tenant.js +1 -1
package/locales/en.json
CHANGED
|
@@ -1067,5 +1067,11 @@
|
|
|
1067
1067
|
"Maximum upload file size in kilobytes": "Maximum upload file size in kilobytes",
|
|
1068
1068
|
"File upload timeout": "File upload timeout",
|
|
1069
1069
|
"Defines how long to wait for data before aborting file upload. Set to 0 if you want to turn off timeout checks. ": "Defines how long to wait for data before aborting file upload. Set to 0 if you want to turn off timeout checks. ",
|
|
1070
|
-
"Files settings": "Files settings"
|
|
1070
|
+
"Files settings": "Files settings",
|
|
1071
|
+
"NPM packages in code": "NPM packages in code",
|
|
1072
|
+
"Comma-separated list of packages which will be available in JavaScript actions": "Comma-separated list of packages which will be available in JavaScript actions",
|
|
1073
|
+
"Become user": "Become user",
|
|
1074
|
+
"Your are now logged in as %s. Logout and login again to assume your usual identity": "Your are now logged in as %s. Logout and login again to assume your usual identity",
|
|
1075
|
+
"Done": "Done",
|
|
1076
|
+
"Configure trigger %s": "Configure trigger %s"
|
|
1071
1077
|
}
|
package/locales/it.json
CHANGED
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "0.8.1-beta.
|
|
3
|
+
"version": "0.8.1-beta.2",
|
|
4
4
|
"description": "Server app for Saltcorn, open-source no-code platform",
|
|
5
5
|
"homepage": "https://saltcorn.com",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@saltcorn/base-plugin": "0.8.1-beta.
|
|
10
|
-
"@saltcorn/builder": "0.8.1-beta.
|
|
11
|
-
"@saltcorn/data": "0.8.1-beta.
|
|
12
|
-
"@saltcorn/admin-models": "0.8.1-beta.
|
|
13
|
-
"@saltcorn/filemanager": "0.8.1-beta.
|
|
14
|
-
"@saltcorn/markup": "0.8.1-beta.
|
|
15
|
-
"@saltcorn/sbadmin2": "0.8.1-beta.
|
|
9
|
+
"@saltcorn/base-plugin": "0.8.1-beta.2",
|
|
10
|
+
"@saltcorn/builder": "0.8.1-beta.2",
|
|
11
|
+
"@saltcorn/data": "0.8.1-beta.2",
|
|
12
|
+
"@saltcorn/admin-models": "0.8.1-beta.2",
|
|
13
|
+
"@saltcorn/filemanager": "0.8.1-beta.2",
|
|
14
|
+
"@saltcorn/markup": "0.8.1-beta.2",
|
|
15
|
+
"@saltcorn/sbadmin2": "0.8.1-beta.2",
|
|
16
16
|
"@socket.io/cluster-adapter": "^0.1.0",
|
|
17
17
|
"@socket.io/sticky": "^1.0.1",
|
|
18
18
|
"aws-sdk": "^2.1037.0",
|
|
@@ -444,10 +444,19 @@ function initialize_page() {
|
|
|
444
444
|
setTimeout(() => {
|
|
445
445
|
codes.forEach((el) => {
|
|
446
446
|
//console.log($(el).attr("mode"), el);
|
|
447
|
-
CodeMirror.fromTextArea(el, {
|
|
447
|
+
const cm = CodeMirror.fromTextArea(el, {
|
|
448
448
|
lineNumbers: true,
|
|
449
449
|
mode: $(el).attr("mode"),
|
|
450
450
|
});
|
|
451
|
+
cm.on(
|
|
452
|
+
"change",
|
|
453
|
+
$.debounce(() => {
|
|
454
|
+
$(el).closest("form").trigger("change");
|
|
455
|
+
}),
|
|
456
|
+
500,
|
|
457
|
+
null,
|
|
458
|
+
true
|
|
459
|
+
);
|
|
451
460
|
});
|
|
452
461
|
}, 100);
|
|
453
462
|
});
|
package/public/saltcorn.js
CHANGED
|
@@ -97,7 +97,7 @@ function invalidate_pagings(href) {
|
|
|
97
97
|
return newhref;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
function set_state_fields(kvs) {
|
|
100
|
+
function set_state_fields(kvs, disable_pjax) {
|
|
101
101
|
let newhref = get_current_state_url();
|
|
102
102
|
if (Object.keys(kvs).some((k) => !is_paging_param(k))) {
|
|
103
103
|
newhref = invalidate_pagings(newhref);
|
|
@@ -107,7 +107,8 @@ function set_state_fields(kvs) {
|
|
|
107
107
|
newhref = removeQueryStringParameter(newhref, kv[0]);
|
|
108
108
|
else newhref = updateQueryStringParameter(newhref, kv[0], kv[1]);
|
|
109
109
|
});
|
|
110
|
-
|
|
110
|
+
if (disable_pjax) href_to(newhref.replace("&&", "&").replace("?&", "?"));
|
|
111
|
+
else pjax_to(newhref.replace("&&", "&").replace("?&", "?"));
|
|
111
112
|
}
|
|
112
113
|
function unset_state_field(key) {
|
|
113
114
|
pjax_to(removeQueryStringParameter(get_current_state_url(), key));
|
package/routes/actions.js
CHANGED
|
@@ -401,7 +401,7 @@ router.get(
|
|
|
401
401
|
sub2_page: "Configure",
|
|
402
402
|
contents: {
|
|
403
403
|
type: "card",
|
|
404
|
-
title: req.__("Configure trigger"),
|
|
404
|
+
title: req.__("Configure trigger %s", trigger.name),
|
|
405
405
|
contents: {
|
|
406
406
|
widths: [8, 4],
|
|
407
407
|
besides: [
|
|
@@ -456,6 +456,8 @@ router.get(
|
|
|
456
456
|
// create form
|
|
457
457
|
const form = new Form({
|
|
458
458
|
action: addOnDoneRedirect(`/actions/configure/${id}`, req),
|
|
459
|
+
onChange: "saveAndContinue(this)",
|
|
460
|
+
submitLabel: req.__("Done"),
|
|
459
461
|
fields: cfgFields,
|
|
460
462
|
});
|
|
461
463
|
// populate form values
|
|
@@ -468,7 +470,7 @@ router.get(
|
|
|
468
470
|
sub2_page: "Configure",
|
|
469
471
|
contents: {
|
|
470
472
|
type: "card",
|
|
471
|
-
title: req.__("Configure trigger"),
|
|
473
|
+
title: req.__("Configure trigger %s", trigger.name),
|
|
472
474
|
contents: renderForm(form, req.csrfToken()),
|
|
473
475
|
},
|
|
474
476
|
});
|
|
@@ -512,6 +514,10 @@ router.post(
|
|
|
512
514
|
});
|
|
513
515
|
} else {
|
|
514
516
|
await Trigger.update(trigger.id, { configuration: form.values });
|
|
517
|
+
if (req.xhr) {
|
|
518
|
+
res.json({ success: "ok" });
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
515
521
|
req.flash("success", "Action configuration saved");
|
|
516
522
|
res.redirect(
|
|
517
523
|
req.query.on_done_redirect
|
package/routes/admin.js
CHANGED
|
@@ -59,6 +59,7 @@ const {
|
|
|
59
59
|
getState,
|
|
60
60
|
restart_tenant,
|
|
61
61
|
getTenant,
|
|
62
|
+
getRootState,
|
|
62
63
|
//get_other_domain_tenant,
|
|
63
64
|
get_process_init_time,
|
|
64
65
|
} = require("@saltcorn/data/db/state");
|
|
@@ -1820,6 +1821,11 @@ router.post(
|
|
|
1820
1821
|
* @returns {Promise<Form>} form
|
|
1821
1822
|
*/
|
|
1822
1823
|
const dev_form = async (req) => {
|
|
1824
|
+
const role_to_create_tenant = +getRootState().getConfig(
|
|
1825
|
+
"role_to_create_tenant"
|
|
1826
|
+
);
|
|
1827
|
+
const isRoot = db.getTenantSchema() === db.connectObj.default_schema;
|
|
1828
|
+
|
|
1823
1829
|
return await config_fields_form({
|
|
1824
1830
|
req,
|
|
1825
1831
|
field_names: [
|
|
@@ -1827,6 +1833,9 @@ const dev_form = async (req) => {
|
|
|
1827
1833
|
"log_sql",
|
|
1828
1834
|
"log_client_errors",
|
|
1829
1835
|
"log_level",
|
|
1836
|
+
...(isRoot || role_to_create_tenant < 10
|
|
1837
|
+
? ["npm_available_js_code"]
|
|
1838
|
+
: []),
|
|
1830
1839
|
],
|
|
1831
1840
|
action: "/admin/dev",
|
|
1832
1841
|
});
|
package/routes/fields.js
CHANGED
|
@@ -707,17 +707,27 @@ router.post(
|
|
|
707
707
|
const { tableName, fieldName, fieldview } = req.params;
|
|
708
708
|
const table = await Table.findOne({ name: tableName });
|
|
709
709
|
const role = req.user && req.user.id ? req.user.role_id : 10;
|
|
710
|
-
|
|
710
|
+
|
|
711
|
+
const fields = await table.getFields();
|
|
712
|
+
let row = { ...req.body };
|
|
713
|
+
if (row && Object.keys(row).length > 0) readState(row, fields);
|
|
714
|
+
const id = req.query.id || row.id;
|
|
715
|
+
if (id) {
|
|
716
|
+
let dbrow = await table.getRow({ id });
|
|
717
|
+
row = { ...dbrow, ...row };
|
|
718
|
+
//prevent overwriting ownership field
|
|
719
|
+
if (table.ownership_field_id) {
|
|
720
|
+
const ofield = fields.find((f) => f.id === table.ownership_field_id);
|
|
721
|
+
row[ofield.name] = dbrow[ofield.name];
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
if (
|
|
725
|
+
role > table.min_role_read &&
|
|
726
|
+
!(req.user && table.is_owner(req.user, row))
|
|
727
|
+
) {
|
|
711
728
|
res.status(401).send("");
|
|
712
729
|
return;
|
|
713
730
|
}
|
|
714
|
-
const fields = await table.getFields();
|
|
715
|
-
let row = { ...req.body };
|
|
716
|
-
if (!row || Object.keys(row).length === 0) {
|
|
717
|
-
const { id } = req.query;
|
|
718
|
-
if (id) row = await table.getRow({ id });
|
|
719
|
-
} else readState(row, fields);
|
|
720
|
-
|
|
721
731
|
if (fieldName.includes(".")) {
|
|
722
732
|
//join field
|
|
723
733
|
const kpath = fieldName.split(".");
|