@saltcorn/server 1.1.2-beta.16 → 1.1.2-beta.18

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 CHANGED
@@ -1554,5 +1554,8 @@
1554
1554
  "Search syntax": "Search syntax",
1555
1555
  "Maximum role": "Maximum role",
1556
1556
  "Module dependencies": "Module dependencies",
1557
- "Prompt": "Prompt"
1557
+ "Prompt": "Prompt",
1558
+ "Clean modules and restart": "Clean modules and restart",
1559
+ "Modules cleaned, server restarting...": "Modules cleaned, server restarting...",
1560
+ "Delete table+views+triggers": "Delete table+views+triggers"
1558
1561
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saltcorn/server",
3
- "version": "1.1.2-beta.16",
3
+ "version": "1.1.2-beta.18",
4
4
  "description": "Server app for Saltcorn, open-source no-code platform",
5
5
  "homepage": "https://saltcorn.com",
6
6
  "main": "index.js",
@@ -8,14 +8,14 @@
8
8
  "dependencies": {
9
9
  "@aws-sdk/client-s3": "^3.735.0",
10
10
  "@dr.pogodin/csurf": "^1.14.1",
11
- "@saltcorn/base-plugin": "1.1.2-beta.16",
12
- "@saltcorn/builder": "1.1.2-beta.16",
13
- "@saltcorn/data": "1.1.2-beta.16",
14
- "@saltcorn/admin-models": "1.1.2-beta.16",
15
- "@saltcorn/filemanager": "1.1.2-beta.16",
16
- "@saltcorn/markup": "1.1.2-beta.16",
17
- "@saltcorn/plugins-loader": "1.1.2-beta.16",
18
- "@saltcorn/sbadmin2": "1.1.2-beta.16",
11
+ "@saltcorn/base-plugin": "1.1.2-beta.18",
12
+ "@saltcorn/builder": "1.1.2-beta.18",
13
+ "@saltcorn/data": "1.1.2-beta.18",
14
+ "@saltcorn/admin-models": "1.1.2-beta.18",
15
+ "@saltcorn/filemanager": "1.1.2-beta.18",
16
+ "@saltcorn/markup": "1.1.2-beta.18",
17
+ "@saltcorn/plugins-loader": "1.1.2-beta.18",
18
+ "@saltcorn/sbadmin2": "1.1.2-beta.18",
19
19
  "@socket.io/cluster-adapter": "^0.2.1",
20
20
  "@socket.io/sticky": "^1.0.1",
21
21
  "adm-zip": "0.5.16",
package/routes/admin.js CHANGED
@@ -117,6 +117,7 @@ const { get_help_markup } = require("../help/index.js");
117
117
  const Docker = require("dockerode");
118
118
  const npmFetch = require("npm-registry-fetch");
119
119
  const Tag = require("@saltcorn/data/models/tag");
120
+ const PluginInstaller = require("@saltcorn/plugins-loader/plugin_installer.js");
120
121
  const MarkdownIt = require("markdown-it"),
121
122
  md = new MarkdownIt();
122
123
 
@@ -841,7 +842,8 @@ const autoBackupForm = (req) => {
841
842
  label: req.__("Backup now"),
842
843
  id: "btnBackupNow",
843
844
  class: "btn btn-outline-secondary",
844
- onclick: "ajax_post('/admin/auto-backup-now');press_store_button(this);",
845
+ onclick:
846
+ "ajax_post('/admin/auto-backup-now');press_store_button(this);",
845
847
  },
846
848
  ],
847
849
  fields: [
@@ -1565,6 +1567,7 @@ const cleanNodeModules = async () => {
1565
1567
  throw new Error(
1566
1568
  `'${topSaltcornDir}' is not a Saltcorn installation directory`
1567
1569
  );
1570
+ await PluginInstaller.cleanPluginsDirectory();
1568
1571
  };
1569
1572
 
1570
1573
  const doInstall = async (req, res, version, deepClean, runPull) => {
package/routes/plugins.js CHANGED
@@ -495,6 +495,17 @@ const store_actions_dropdown = (req) => {
495
495
  '<i class="far fa-arrow-alt-circle-up"></i>&nbsp;' +
496
496
  req.__("Upgrade installed modules")
497
497
  ),
498
+ db.getTenantSchema() === db.connectObj.default_schema &&
499
+ a(
500
+ {
501
+ class: "dropdown-item",
502
+ href: `/plugins/reinstall-all`,
503
+ onClick: `notifyAlert('${req.__("Upgrading modules...")}', true)`,
504
+ },
505
+ '<i class="fas fa-pump-medical"></i>&nbsp;' +
506
+ req.__("Clean modules and restart")
507
+ ),
508
+
498
509
  (db.getTenantSchema() === db.connectObj.default_schema ||
499
510
  tenants_install_git) &&
500
511
  a(
@@ -558,7 +569,7 @@ const plugin_store_html = (items, req) => {
558
569
  },
559
570
  {
560
571
  besides: items.map(store_item_html(req)),
561
- gy:3,
572
+ gy: 3,
562
573
  widths: items.map(() => 4),
563
574
  },
564
575
  ],
@@ -1397,6 +1408,30 @@ router.get(
1397
1408
  })
1398
1409
  );
1399
1410
 
1411
+ /**
1412
+ * @name get/upgrade
1413
+ * @function
1414
+ * @memberof module:routes/plugins~pluginsRouter
1415
+ * @function
1416
+ */
1417
+ router.get(
1418
+ "/reinstall-all",
1419
+ isAdmin,
1420
+ error_catcher(async (req, res) => {
1421
+ //TODO make this post
1422
+ const schema = db.getTenantSchema();
1423
+ if (schema === db.connectObj.default_schema) {
1424
+ await PluginInstaller.cleanPluginsDirectory();
1425
+ req.flash("success", req.__(`Modules cleaned, server restarting...`));
1426
+ setTimeout(() => {
1427
+ if (process.send) getState().processSend("RestartServer");
1428
+ else process.exit(0);
1429
+ }, 1000);
1430
+ }
1431
+ res.redirect(`/plugins`);
1432
+ })
1433
+ );
1434
+
1400
1435
  /**
1401
1436
  * @name get/upgrade-plugin/:name
1402
1437
  * @function
package/routes/tables.js CHANGED
@@ -800,7 +800,9 @@ router.get(
800
800
  let fieldCard;
801
801
  const primaryKeys = fields.filter((f) => f.primary_key);
802
802
  const nPrimaryKeys = primaryKeys.length;
803
- const nonSerialPKS = primaryKeys.some((f) => f.attributes?.NonSerial);
803
+ const nonSerialPKS = primaryKeys.some(
804
+ (f) => f.attributes?.NonSerial && f.type?.name === "Integer"
805
+ );
804
806
 
805
807
  if (fields.length === 0) {
806
808
  fieldCard = [
@@ -864,11 +866,13 @@ router.get(
864
866
  { hover: true }
865
867
  );
866
868
  fieldCard = [
867
- (nPrimaryKeys > 1 || nonSerialPKS) &&
869
+ (nPrimaryKeys !== 1 || nonSerialPKS) &&
870
+ !table.external &&
871
+ !table.provider_name &&
868
872
  div(
869
873
  { class: "alert alert-danger", role: "alert" },
870
874
  i({ class: "fas fa-exclamation-triangle" }),
871
- "This table has composite or non-defaulted primary keys, which are not supported in Saltcorn. A procedure to introduce a single autoincrementing primary key is available.",
875
+ "This table has composite, non-defaulted integer, or no primary keys, which are not supported in Saltcorn. A procedure to introduce a single autoincrementing primary key is available.",
872
876
  post_btn(
873
877
  `/table/repair-composite-primary/${table.id}`,
874
878
  "Add autoincrementing primary key",
@@ -1115,6 +1119,15 @@ router.get(
1115
1119
  req,
1116
1120
  true
1117
1121
  ),
1122
+ req.user.role_id === 1 &&
1123
+ table.name !== "users" &&
1124
+ post_dropdown_item(
1125
+ `/table/delete-with-trig-views/${table.id}`,
1126
+ '<i class="fas fa-trash"></i>&nbsp;' +
1127
+ req.__("Delete table+views+triggers"),
1128
+ req,
1129
+ true
1130
+ ),
1118
1131
  ])
1119
1132
  )
1120
1133
  );
@@ -1276,6 +1289,50 @@ router.post(
1276
1289
  })
1277
1290
  );
1278
1291
 
1292
+ //delete-with-trig-views
1293
+ /**
1294
+ * Delete Table Route Handler definition
1295
+ * /delete:/id, where id is table id in _sc_tables
1296
+ * @name post/delete/:id
1297
+ * @function
1298
+ * @memberof module:routes/tables~tablesRouter
1299
+ * @function
1300
+ */
1301
+ router.post(
1302
+ "/delete-with-trig-views/:id",
1303
+ isAdmin,
1304
+ error_catcher(async (req, res) => {
1305
+ const { id } = req.params;
1306
+ const t = Table.findOne({ id });
1307
+ if (!t) {
1308
+ req.flash("error", `Table not found`);
1309
+ res.redirect(`/table`);
1310
+ return;
1311
+ }
1312
+ if (t.name === "users") {
1313
+ req.flash("error", req.__(`Cannot delete users table`));
1314
+ res.redirect(`/table`);
1315
+ return;
1316
+ }
1317
+ const views = await View.find(
1318
+ t.id ? { table_id: t.id } : { exttable_name: t.name }
1319
+ );
1320
+ for (const view of views) await view.delete();
1321
+ if (t.id) {
1322
+ const triggers = await Trigger.find({ table_id: t.id });
1323
+ for (const trig of triggers) await trig.delete();
1324
+ }
1325
+ try {
1326
+ await t.delete();
1327
+ req.flash("success", req.__(`Table %s deleted`, t.name));
1328
+ res.redirect(`/table`);
1329
+ } catch (err) {
1330
+ req.flash("error", err.message);
1331
+ res.redirect(`/table`);
1332
+ }
1333
+ })
1334
+ );
1335
+
1279
1336
  /**
1280
1337
  * Delete Table Route Handler definition
1281
1338
  * /delete:/id, where id is table id in _sc_tables