@saltcorn/server 0.6.3 → 0.6.4-beta.1
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 +3 -1
- package/package.json +6 -6
- package/public/saltcorn.js +28 -1
- package/routes/admin.js +7 -1
- package/routes/api.js +10 -5
- package/routes/files.js +2 -1
- package/routes/tables.js +3 -1
- package/routes/view.js +2 -0
package/locales/en.json
CHANGED
|
@@ -859,5 +859,7 @@
|
|
|
859
859
|
"Two-factor authentication with Time-based One-Time Password disabled": "Two-factor authentication with Time-based One-Time Password disabled",
|
|
860
860
|
"Two-factor authentication is disabled": "Two-factor authentication is disabled",
|
|
861
861
|
"Auto save": "Auto save",
|
|
862
|
-
"Save any changes immediately": "Save any changes immediately"
|
|
862
|
+
"Save any changes immediately": "Save any changes immediately",
|
|
863
|
+
"Transpose": "Transpose",
|
|
864
|
+
"Display one column per line": "Display one column per line"
|
|
863
865
|
}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4-beta.1",
|
|
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.6.
|
|
10
|
-
"@saltcorn/builder": "0.6.
|
|
11
|
-
"@saltcorn/data": "0.6.
|
|
9
|
+
"@saltcorn/base-plugin": "0.6.4-beta.1",
|
|
10
|
+
"@saltcorn/builder": "0.6.4-beta.1",
|
|
11
|
+
"@saltcorn/data": "0.6.4-beta.1",
|
|
12
12
|
"greenlock-express": "^4.0.3",
|
|
13
|
-
"@saltcorn/markup": "0.6.
|
|
14
|
-
"@saltcorn/sbadmin2": "0.6.
|
|
13
|
+
"@saltcorn/markup": "0.6.4-beta.1",
|
|
14
|
+
"@saltcorn/sbadmin2": "0.6.4-beta.1",
|
|
15
15
|
"@socket.io/cluster-adapter": "^0.1.0",
|
|
16
16
|
"@socket.io/sticky": "^1.0.1",
|
|
17
17
|
"connect-flash": "^0.1.1",
|
package/public/saltcorn.js
CHANGED
|
@@ -506,6 +506,7 @@ function ajax_modal(url, opts = {}) {
|
|
|
506
506
|
if (title) $("#scmodal .modal-title").html(decodeURIComponent(title));
|
|
507
507
|
$("#scmodal .modal-body").html(res);
|
|
508
508
|
$("#scmodal").modal();
|
|
509
|
+
initialize_page();
|
|
509
510
|
(opts.onOpen || function () {})(res);
|
|
510
511
|
$("#scmodal").on("hidden.bs.modal", function (e) {
|
|
511
512
|
(opts.onClose || function () {})(res);
|
|
@@ -604,7 +605,33 @@ function ajax_post_btn(e, reload_on_done, reload_delay) {
|
|
|
604
605
|
|
|
605
606
|
return false;
|
|
606
607
|
}
|
|
607
|
-
|
|
608
|
+
function make_unique_field(id, table_id, field_name, value) {
|
|
609
|
+
if (!value) return;
|
|
610
|
+
$.ajax(
|
|
611
|
+
`/api/${table_id}?approximate=true&${encodeURIComponent(
|
|
612
|
+
field_name
|
|
613
|
+
)}=${encodeURIComponent(value)}&fields=${encodeURIComponent(field_name)}`,
|
|
614
|
+
{
|
|
615
|
+
type: "GET",
|
|
616
|
+
success: function (res) {
|
|
617
|
+
if (res.success) {
|
|
618
|
+
const vals = res.success
|
|
619
|
+
.map((o) => o[field_name])
|
|
620
|
+
.filter((s) => s.startsWith(value));
|
|
621
|
+
if (vals.includes(value)) {
|
|
622
|
+
for (let i = 1; i < vals.length + 1; i++) {
|
|
623
|
+
const newname = `${value} ${i}`;
|
|
624
|
+
if (!vals.includes(newname)) {
|
|
625
|
+
$("#" + id).val(newname);
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
},
|
|
632
|
+
}
|
|
633
|
+
);
|
|
634
|
+
}
|
|
608
635
|
function test_formula(tablename, stored) {
|
|
609
636
|
var formula = $("input[name=expression]").val();
|
|
610
637
|
ajax_post(`/field/test-formula`, {
|
package/routes/admin.js
CHANGED
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
const Router = require("express-promise-router");
|
|
7
7
|
|
|
8
|
-
const {
|
|
8
|
+
const {
|
|
9
|
+
isAdmin,
|
|
10
|
+
error_catcher,
|
|
11
|
+
getGitRevision,
|
|
12
|
+
setTenant,
|
|
13
|
+
} = require("./utils.js");
|
|
9
14
|
const Table = require("@saltcorn/data/models/table");
|
|
10
15
|
const Plugin = require("@saltcorn/data/models/plugin");
|
|
11
16
|
const File = require("@saltcorn/data/models/file");
|
|
@@ -518,6 +523,7 @@ router.post(
|
|
|
518
523
|
*/
|
|
519
524
|
router.post(
|
|
520
525
|
"/restore",
|
|
526
|
+
setTenant, // TODO why is this needed?????
|
|
521
527
|
isAdmin,
|
|
522
528
|
error_catcher(async (req, res) => {
|
|
523
529
|
const newPath = File.get_new_path();
|
package/routes/api.js
CHANGED
|
@@ -28,6 +28,7 @@ const passport = require("passport");
|
|
|
28
28
|
const {
|
|
29
29
|
stateFieldsToWhere,
|
|
30
30
|
readState,
|
|
31
|
+
strictParseInt,
|
|
31
32
|
} = require("@saltcorn/data/plugin-helper");
|
|
32
33
|
|
|
33
34
|
/**
|
|
@@ -121,9 +122,13 @@ router.get(
|
|
|
121
122
|
"/:tableName/",
|
|
122
123
|
//passport.authenticate("api-bearer", { session: false }),
|
|
123
124
|
error_catcher(async (req, res, next) => {
|
|
124
|
-
|
|
125
|
-
const { fields, versioncount, ...req_query } = req.query;
|
|
126
|
-
const table = await Table.findOne(
|
|
125
|
+
let { tableName } = req.params;
|
|
126
|
+
const { fields, versioncount, approximate, ...req_query } = req.query;
|
|
127
|
+
const table = await Table.findOne(
|
|
128
|
+
strictParseInt(tableName)
|
|
129
|
+
? { id: strictParseInt(tableName) }
|
|
130
|
+
: { name: tableName }
|
|
131
|
+
);
|
|
127
132
|
if (!table) {
|
|
128
133
|
res.status(404).json({ error: req.__("Not found") });
|
|
129
134
|
return;
|
|
@@ -152,8 +157,8 @@ router.get(
|
|
|
152
157
|
const tbl_fields = await table.getFields();
|
|
153
158
|
const qstate = await stateFieldsToWhere({
|
|
154
159
|
fields: tbl_fields,
|
|
155
|
-
approximate:
|
|
156
|
-
state:
|
|
160
|
+
approximate: !!approximate,
|
|
161
|
+
state: req_query,
|
|
157
162
|
});
|
|
158
163
|
rows = await table.getRows(qstate);
|
|
159
164
|
} else {
|
package/routes/files.js
CHANGED
|
@@ -17,7 +17,7 @@ const {
|
|
|
17
17
|
post_btn,
|
|
18
18
|
post_delete_btn,
|
|
19
19
|
} = require("@saltcorn/markup");
|
|
20
|
-
const { isAdmin, error_catcher } = require("./utils.js");
|
|
20
|
+
const { isAdmin, error_catcher, setTenant } = require("./utils.js");
|
|
21
21
|
const {
|
|
22
22
|
span,
|
|
23
23
|
h5,
|
|
@@ -240,6 +240,7 @@ router.post(
|
|
|
240
240
|
*/
|
|
241
241
|
router.post(
|
|
242
242
|
"/upload",
|
|
243
|
+
setTenant, // TODO why is this needed?????
|
|
243
244
|
error_catcher(async (req, res) => {
|
|
244
245
|
let jsonResp = {};
|
|
245
246
|
const min_role_upload = getState().getConfig("min_role_upload", 1);
|
package/routes/tables.js
CHANGED
|
@@ -22,7 +22,7 @@ const {
|
|
|
22
22
|
post_dropdown_item,
|
|
23
23
|
} = require("@saltcorn/markup");
|
|
24
24
|
const { recalculate_for_stored } = require("@saltcorn/data/models/expression");
|
|
25
|
-
const { isAdmin, error_catcher } = require("./utils.js");
|
|
25
|
+
const { isAdmin, error_catcher, setTenant } = require("./utils.js");
|
|
26
26
|
const Form = require("@saltcorn/data/models/form");
|
|
27
27
|
const {
|
|
28
28
|
span,
|
|
@@ -352,6 +352,7 @@ router.get(
|
|
|
352
352
|
*/
|
|
353
353
|
router.post(
|
|
354
354
|
"/create-from-csv",
|
|
355
|
+
setTenant, // TODO why is this needed?????
|
|
355
356
|
isAdmin,
|
|
356
357
|
error_catcher(async (req, res) => {
|
|
357
358
|
if (req.body.name && req.files && req.files.file) {
|
|
@@ -1367,6 +1368,7 @@ router.post(
|
|
|
1367
1368
|
*/
|
|
1368
1369
|
router.post(
|
|
1369
1370
|
"/upload_to_table/:name",
|
|
1371
|
+
setTenant, // TODO why is this needed?????
|
|
1370
1372
|
isAdmin,
|
|
1371
1373
|
error_catcher(async (req, res) => {
|
|
1372
1374
|
const { name } = req.params;
|
package/routes/view.js
CHANGED
|
@@ -16,6 +16,7 @@ const {
|
|
|
16
16
|
isAdmin,
|
|
17
17
|
error_catcher,
|
|
18
18
|
scan_for_page_title,
|
|
19
|
+
setTenant,
|
|
19
20
|
} = require("../routes/utils.js");
|
|
20
21
|
const { add_edit_bar } = require("../markup/admin.js");
|
|
21
22
|
const { InvalidConfiguration } = require("@saltcorn/data/utils");
|
|
@@ -144,6 +145,7 @@ router.post(
|
|
|
144
145
|
*/
|
|
145
146
|
router.post(
|
|
146
147
|
["/:viewname", "/:viewname/*"],
|
|
148
|
+
setTenant,
|
|
147
149
|
error_catcher(async (req, res) => {
|
|
148
150
|
const { viewname } = req.params;
|
|
149
151
|
const role = req.user && req.user.id ? req.user.role_id : 10;
|