@saltcorn/server 0.9.3-beta.5 → 0.9.3-beta.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/package.json +8 -8
- package/public/saltcorn-common.js +20 -9
- package/routes/actions.js +4 -1
- package/routes/delete.js +4 -1
- package/routes/fields.js +22 -10
- package/routes/tables.js +2 -2
- package/routes/view.js +1 -1
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "0.9.3-beta.
|
|
3
|
+
"version": "0.9.3-beta.6",
|
|
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
9
|
"@aws-sdk/client-s3": "^3.451.0",
|
|
10
|
-
"@saltcorn/base-plugin": "0.9.3-beta.
|
|
11
|
-
"@saltcorn/builder": "0.9.3-beta.
|
|
12
|
-
"@saltcorn/data": "0.9.3-beta.
|
|
13
|
-
"@saltcorn/admin-models": "0.9.3-beta.
|
|
14
|
-
"@saltcorn/filemanager": "0.9.3-beta.
|
|
15
|
-
"@saltcorn/markup": "0.9.3-beta.
|
|
16
|
-
"@saltcorn/sbadmin2": "0.9.3-beta.
|
|
10
|
+
"@saltcorn/base-plugin": "0.9.3-beta.6",
|
|
11
|
+
"@saltcorn/builder": "0.9.3-beta.6",
|
|
12
|
+
"@saltcorn/data": "0.9.3-beta.6",
|
|
13
|
+
"@saltcorn/admin-models": "0.9.3-beta.6",
|
|
14
|
+
"@saltcorn/filemanager": "0.9.3-beta.6",
|
|
15
|
+
"@saltcorn/markup": "0.9.3-beta.6",
|
|
16
|
+
"@saltcorn/sbadmin2": "0.9.3-beta.6",
|
|
17
17
|
"@socket.io/cluster-adapter": "^0.2.1",
|
|
18
18
|
"@socket.io/sticky": "^1.0.1",
|
|
19
19
|
"adm-zip": "0.5.10",
|
|
@@ -976,20 +976,31 @@ function enable_codemirror(f) {
|
|
|
976
976
|
success: f,
|
|
977
977
|
});
|
|
978
978
|
}
|
|
979
|
-
function tristateClick(
|
|
980
|
-
|
|
979
|
+
function tristateClick(e) {
|
|
980
|
+
const btn = $(e);
|
|
981
|
+
const input = btn.prev();
|
|
982
|
+
var current = input.val();
|
|
981
983
|
switch (current) {
|
|
982
984
|
case "?":
|
|
983
|
-
|
|
984
|
-
|
|
985
|
+
btn
|
|
986
|
+
.html(btn.attr("data-true-label") || "T")
|
|
987
|
+
.removeClass(["btn-danger", "btn-secondary"])
|
|
988
|
+
.addClass("btn-success");
|
|
989
|
+
input.val("on").trigger("change");
|
|
985
990
|
break;
|
|
986
|
-
case "
|
|
987
|
-
|
|
988
|
-
|
|
991
|
+
case "on":
|
|
992
|
+
btn
|
|
993
|
+
.html(btn.attr("data-false-label") || "F")
|
|
994
|
+
.removeClass(["btn-success", "btn-secondary"])
|
|
995
|
+
.addClass("btn-danger");
|
|
996
|
+
input.val("off").trigger("change");
|
|
989
997
|
break;
|
|
990
998
|
default:
|
|
991
|
-
|
|
992
|
-
|
|
999
|
+
btn
|
|
1000
|
+
.html(btn.attr("data-null-label") || "?")
|
|
1001
|
+
.removeClass(["btn-success", "btn-danger"])
|
|
1002
|
+
.addClass("btn-secondary");
|
|
1003
|
+
input.val("?").trigger("change");
|
|
993
1004
|
break;
|
|
994
1005
|
}
|
|
995
1006
|
}
|
package/routes/actions.js
CHANGED
|
@@ -628,7 +628,10 @@ router.get(
|
|
|
628
628
|
let table, row;
|
|
629
629
|
if (trigger.table_id) {
|
|
630
630
|
table = Table.findOne({ id: trigger.table_id });
|
|
631
|
-
row = await table.getRow(
|
|
631
|
+
row = await table.getRow(
|
|
632
|
+
{},
|
|
633
|
+
{ orderBy: "RANDOM()", forUser: req.user, forPublic: !req.user }
|
|
634
|
+
);
|
|
632
635
|
}
|
|
633
636
|
let runres;
|
|
634
637
|
|
package/routes/delete.js
CHANGED
|
@@ -39,7 +39,10 @@ router.post(
|
|
|
39
39
|
if (role <= table.min_role_write)
|
|
40
40
|
await table.deleteRows({ id }, req.user || { role_id: 100 });
|
|
41
41
|
else if (table.ownership_field_id && req.user) {
|
|
42
|
-
const row = await table.getRow(
|
|
42
|
+
const row = await table.getRow(
|
|
43
|
+
{ id },
|
|
44
|
+
{ forUser: req.user, forPublic: !req.user }
|
|
45
|
+
);
|
|
43
46
|
if (row && table.is_owner(req.user, row))
|
|
44
47
|
await table.deleteRows({ id }, req.user || { role_id: 100 });
|
|
45
48
|
else req.flash("error", req.__("Not authorized"));
|
package/routes/fields.js
CHANGED
|
@@ -933,9 +933,12 @@ router.post(
|
|
|
933
933
|
const reftable2 = Table.findOne({
|
|
934
934
|
name: targetField.reftable_name,
|
|
935
935
|
});
|
|
936
|
-
const refRow2 = await reftable2.getRow(
|
|
937
|
-
|
|
938
|
-
|
|
936
|
+
const refRow2 = await reftable2.getRow(
|
|
937
|
+
{
|
|
938
|
+
[reftable2.pk_name]: refRow[kpath[1]],
|
|
939
|
+
},
|
|
940
|
+
{ forUser: req.user, forPublic: !req.user }
|
|
941
|
+
);
|
|
939
942
|
if (refRow2) {
|
|
940
943
|
res.send(
|
|
941
944
|
text(`${refRow2[targetField.attributes.summary_field]}`)
|
|
@@ -974,7 +977,10 @@ router.post(
|
|
|
974
977
|
return;
|
|
975
978
|
}
|
|
976
979
|
const q = { [reftable.pk_name]: oldRow[ref] };
|
|
977
|
-
oldRow = await reftable.getRow(q
|
|
980
|
+
oldRow = await reftable.getRow(q, {
|
|
981
|
+
forUser: req.user,
|
|
982
|
+
forPublic: !req.user,
|
|
983
|
+
});
|
|
978
984
|
oldTable = reftable;
|
|
979
985
|
}
|
|
980
986
|
}
|
|
@@ -1010,14 +1016,20 @@ router.post(
|
|
|
1010
1016
|
)) {
|
|
1011
1017
|
const jf = table.getField(ref);
|
|
1012
1018
|
const jtable = Table.findOne(jf.reftable_name);
|
|
1013
|
-
const jrow = await jtable.getRow(
|
|
1019
|
+
const jrow = await jtable.getRow(
|
|
1020
|
+
{ [jtable.pk_name]: row[ref] },
|
|
1021
|
+
{ forUser: req.user, forPublic: !req.user }
|
|
1022
|
+
);
|
|
1014
1023
|
row[ref] = jrow;
|
|
1015
1024
|
if (through) {
|
|
1016
1025
|
const jf2 = jtable.getField(through);
|
|
1017
1026
|
const jtable2 = Table.findOne(jf2.reftable_name);
|
|
1018
|
-
const jrow2 = await jtable2.getRow(
|
|
1019
|
-
|
|
1020
|
-
|
|
1027
|
+
const jrow2 = await jtable2.getRow(
|
|
1028
|
+
{
|
|
1029
|
+
[jtable2.pk_name]: jrow[through],
|
|
1030
|
+
},
|
|
1031
|
+
{ forUser: req.user, forPublic: !req.user }
|
|
1032
|
+
);
|
|
1021
1033
|
row[ref][through] = jrow2;
|
|
1022
1034
|
}
|
|
1023
1035
|
}
|
|
@@ -1071,11 +1083,11 @@ router.post(
|
|
|
1071
1083
|
}
|
|
1072
1084
|
const reffields = await reftable.getFields();
|
|
1073
1085
|
field = reffields.find((f) => f.name === targetNm);
|
|
1074
|
-
row = await reftable.getRow({});
|
|
1086
|
+
row = await reftable.getRow({}, { forUser: req.user });
|
|
1075
1087
|
value = row && row[targetNm];
|
|
1076
1088
|
} else {
|
|
1077
1089
|
field = fields.find((f) => f.name === fieldName);
|
|
1078
|
-
row = await table.getRow({});
|
|
1090
|
+
row = await table.getRow({}, { forUser: req.user });
|
|
1079
1091
|
value = row && row[fieldName];
|
|
1080
1092
|
}
|
|
1081
1093
|
|
package/routes/tables.js
CHANGED
|
@@ -707,7 +707,7 @@ router.get(
|
|
|
707
707
|
res.redirect(`/table`);
|
|
708
708
|
return;
|
|
709
709
|
}
|
|
710
|
-
const nrows = await table.countRows();
|
|
710
|
+
const nrows = await table.countRows({}, { forUser: req.user });
|
|
711
711
|
const fields = table.getFields();
|
|
712
712
|
const { child_relations } = await table.get_child_relations();
|
|
713
713
|
const inbound_refs = [
|
|
@@ -1282,7 +1282,7 @@ router.get(
|
|
|
1282
1282
|
error_catcher(async (req, res) => {
|
|
1283
1283
|
const { name } = req.params;
|
|
1284
1284
|
const table = Table.findOne({ name });
|
|
1285
|
-
const rows = await table.getRows({}, { orderBy: "id" });
|
|
1285
|
+
const rows = await table.getRows({}, { orderBy: "id", forUser: req.user });
|
|
1286
1286
|
res.setHeader("Content-Type", "text/csv");
|
|
1287
1287
|
res.setHeader("Content-Disposition", `attachment; filename="${name}.csv"`);
|
|
1288
1288
|
res.setHeader("Cache-Control", "no-cache");
|
package/routes/view.js
CHANGED