zet-lib 3.2.4 → 3.3.0
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/lib/Form.js +8 -2
- package/lib/Mail.js +4 -3
- package/lib/Model.js +9 -2
- package/lib/generatorApp.js +19 -19
- package/lib/generatorModel.js +22 -9
- package/lib/io.js +1 -13
- package/lib/zAppRouter.js +16 -15
- package/lib/zGeneratorRouter.js +40 -40
- package/lib/zMenuRouter.js +2 -1
- package/lib/zPage.js +14 -13
- package/lib/zRoute.js +46 -44
- package/lib/zViewGenerator.js +22 -21
- package/package.json +1 -1
package/lib/Form.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
const Util = require("./Util");
|
|
7
|
+
const path = require('path');
|
|
7
8
|
|
|
8
9
|
const Form = {};
|
|
9
10
|
// Menghitung jumlah tanda "[" dalam str
|
|
@@ -550,7 +551,12 @@ Form.field = (obj) => {
|
|
|
550
551
|
break;
|
|
551
552
|
|
|
552
553
|
case "html":
|
|
553
|
-
|
|
554
|
+
let obj_code = typeof obj.code === 'string' ? obj.code : '';
|
|
555
|
+
if (!obj_code && obj.code) {
|
|
556
|
+
const dir = path.join(dirRoot,'public','runtime','html',obj.routeName,obj.id+'.txt')
|
|
557
|
+
obj_code = Util.readFile(dir);
|
|
558
|
+
}
|
|
559
|
+
displayForm = obj_code;
|
|
554
560
|
break;
|
|
555
561
|
|
|
556
562
|
case "location":
|
|
@@ -1038,7 +1044,7 @@ Form.build = (obj) => {
|
|
|
1038
1044
|
}
|
|
1039
1045
|
|
|
1040
1046
|
if(obj.type == "html") {
|
|
1041
|
-
html = obj
|
|
1047
|
+
html = Form.field(obj)
|
|
1042
1048
|
}
|
|
1043
1049
|
return html;
|
|
1044
1050
|
};
|
package/lib/Mail.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require("dotenv").config();
|
|
2
|
+
const path = require('path');
|
|
2
3
|
const nodemailer = require('nodemailer')
|
|
3
4
|
const ejs = require('ejs')
|
|
4
5
|
const Util = require('./Util')
|
|
@@ -47,7 +48,7 @@ MAIL.send = function (options = {}, transporter = null) {
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
MAIL.forgotPassword = (datas = {}, options = {}) => {
|
|
50
|
-
ejs.renderFile(
|
|
51
|
+
ejs.renderFile(path.join(dirRoot, 'views', 'layouts', 'email', 'forgot_password.ejs'), { data: datas, Util: Util }, function (err, data) {
|
|
51
52
|
let option = Object.assign(mailOptions, options)
|
|
52
53
|
option.html = data
|
|
53
54
|
if (err) {
|
|
@@ -59,7 +60,7 @@ MAIL.forgotPassword = (datas = {}, options = {}) => {
|
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
MAIL.register = (datas = {}, options = {}) => {
|
|
62
|
-
ejs.renderFile(
|
|
63
|
+
ejs.renderFile(path.join(dirRoot, 'views', 'layouts', 'email', 'register.ejs'), { data: datas, Util: Util }, function (err, data) {
|
|
63
64
|
let option = Object.assign(mailOptions, options)
|
|
64
65
|
option.html = data
|
|
65
66
|
if (err) {
|
|
@@ -88,7 +89,7 @@ MAIL.approval = (req, res, data, email) => {
|
|
|
88
89
|
});
|
|
89
90
|
|
|
90
91
|
ejs.renderFile(
|
|
91
|
-
dirRoot
|
|
92
|
+
path.join(dirRoot, 'views', 'layouts', 'email', 'approval.ejs'),
|
|
92
93
|
{ data: data, Util: Util },
|
|
93
94
|
function (err, html) {
|
|
94
95
|
if (err) {
|
package/lib/Model.js
CHANGED
|
@@ -2394,7 +2394,8 @@ Model.relation = {
|
|
|
2394
2394
|
"isSearch",
|
|
2395
2395
|
"order_by",
|
|
2396
2396
|
"import_field",
|
|
2397
|
-
"relation_info"
|
|
2397
|
+
"relation_info",
|
|
2398
|
+
"isAttributes",
|
|
2398
2399
|
],
|
|
2399
2400
|
labels: {
|
|
2400
2401
|
required: "Required",
|
|
@@ -2413,7 +2414,8 @@ Model.relation = {
|
|
|
2413
2414
|
isSearch:"Auto complete Search",
|
|
2414
2415
|
order_by : "Order By",
|
|
2415
2416
|
import_field :"Default Import Field (id)",
|
|
2416
|
-
relation_info : "Relation Data"
|
|
2417
|
+
relation_info : "Relation Data",
|
|
2418
|
+
isAttributes:"Show all attributes data",
|
|
2417
2419
|
},
|
|
2418
2420
|
defaultValues: {
|
|
2419
2421
|
required: false,
|
|
@@ -2423,6 +2425,7 @@ Model.relation = {
|
|
|
2423
2425
|
name: "username",
|
|
2424
2426
|
concat: "CONCAT(fullname, ' ',email)",
|
|
2425
2427
|
where:"",
|
|
2428
|
+
isAttributes:false,
|
|
2426
2429
|
isChain: false,
|
|
2427
2430
|
onChange: "",
|
|
2428
2431
|
information: "",
|
|
@@ -2463,6 +2466,10 @@ Model.relation = {
|
|
|
2463
2466
|
tag: "input",
|
|
2464
2467
|
type: "text",
|
|
2465
2468
|
},
|
|
2469
|
+
isAttributes: {
|
|
2470
|
+
tag: "input",
|
|
2471
|
+
type: "checkbox",
|
|
2472
|
+
},
|
|
2466
2473
|
isChain: {
|
|
2467
2474
|
tag: "input",
|
|
2468
2475
|
type: "checkbox",
|
package/lib/generatorApp.js
CHANGED
|
@@ -34,7 +34,7 @@ generatorApp.CREATE_MODEL_API = async (columns, constraintList, MYMODEL) => {
|
|
|
34
34
|
generatorApp.CREATE_ROUTER = async (MYMODEL, zFields) => {
|
|
35
35
|
let CONTENT =
|
|
36
36
|
zFields.router ||
|
|
37
|
-
fs.readFileSync(generatorApp.DIRECTORY
|
|
37
|
+
fs.readFileSync(path.join(generatorApp.DIRECTORY, "routerApp.ejs"), "utf-8");
|
|
38
38
|
const zfields = await connection.result({
|
|
39
39
|
table: "zfields",
|
|
40
40
|
where: { table: MYMODEL.table },
|
|
@@ -58,7 +58,7 @@ generatorApp.CREATE_ROUTER = async (MYMODEL, zFields) => {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
fs.writeFileSync(
|
|
61
|
-
generatorApp.DIRECTORY_ROUTES
|
|
61
|
+
path.join(generatorApp.DIRECTORY_ROUTES, MYMODEL.table + ".js"),
|
|
62
62
|
CONTENT,
|
|
63
63
|
"utf-8"
|
|
64
64
|
);
|
|
@@ -67,7 +67,7 @@ generatorApp.CREATE_ROUTER = async (MYMODEL, zFields) => {
|
|
|
67
67
|
generatorApp.CREATE_ROUTER_API = (MYMODEL, zfields) => {
|
|
68
68
|
let CONTENT =
|
|
69
69
|
zfields.router ||
|
|
70
|
-
fs.readFileSync(generatorApp.DIRECTORY
|
|
70
|
+
fs.readFileSync(path.join(generatorApp.DIRECTORY, "routerApp.ejs"), "utf-8");
|
|
71
71
|
//var zfields = await connection.result({table: "zfields", where: {table: MYMODEL.table}});
|
|
72
72
|
const ADDITIONAL_FIELDS = generatorApp.ADDITIONAL_FIELDS(MYMODEL);
|
|
73
73
|
const OBJ = {
|
|
@@ -86,7 +86,7 @@ generatorApp.CREATE_ROUTER_API = (MYMODEL, zfields) => {
|
|
|
86
86
|
for (let KEY in OBJ) {
|
|
87
87
|
CONTENT = Util.replaceAll(CONTENT, "[[[" + KEY + "]]]", OBJ[KEY]);
|
|
88
88
|
}
|
|
89
|
-
//fs.writeFileSync(generatorApp.DIRECTORY_ROUTES
|
|
89
|
+
//fs.writeFileSync(path.join(generatorApp.DIRECTORY_ROUTES, MYMODEL.table + ".js"), CONTENT, 'utf-8');
|
|
90
90
|
return {
|
|
91
91
|
filename: MYMODEL.table + ".js",
|
|
92
92
|
content: CONTENT,
|
|
@@ -123,7 +123,7 @@ generatorApp.CREATE_VIEWS = async (MYMODEL, zFields) => {
|
|
|
123
123
|
"[[[GENERATE_VIEW]]]": GENERATE_VIEW,
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
-
const DIR_VIEW = generatorApp.DIRECTORY_VIEWS
|
|
126
|
+
const DIR_VIEW = path.join(generatorApp.DIRECTORY_VIEWS, MYMODEL.table);
|
|
127
127
|
if (!fs.existsSync(DIR_VIEW)) {
|
|
128
128
|
fs.mkdirSync(DIR_VIEW);
|
|
129
129
|
}
|
|
@@ -133,16 +133,16 @@ generatorApp.CREATE_VIEWS = async (MYMODEL, zFields) => {
|
|
|
133
133
|
name = name.replace(".", "_");
|
|
134
134
|
let source = zFields[name];
|
|
135
135
|
if (source) {
|
|
136
|
-
fs.writeFileSync(DIR_VIEW
|
|
136
|
+
fs.writeFileSync(path.join(DIR_VIEW, item), source);
|
|
137
137
|
} else {
|
|
138
|
-
source = generatorApp.DIRECTORY_GENERATOR_VIEWS
|
|
139
|
-
fs.copySync(source, DIR_VIEW
|
|
138
|
+
source = path.join(generatorApp.DIRECTORY_GENERATOR_VIEWS, item);
|
|
139
|
+
fs.copySync(source, path.join(DIR_VIEW, item));
|
|
140
140
|
}
|
|
141
|
-
console.log(DIR_VIEW
|
|
141
|
+
console.log(path.join(DIR_VIEW, item));
|
|
142
142
|
for (let KEY in OBJ) {
|
|
143
143
|
generatorApp.MODIFIY(
|
|
144
|
-
DIR_VIEW
|
|
145
|
-
DIR_VIEW
|
|
144
|
+
path.join(DIR_VIEW, item),
|
|
145
|
+
path.join(DIR_VIEW, item),
|
|
146
146
|
KEY,
|
|
147
147
|
OBJ[KEY]
|
|
148
148
|
);
|
|
@@ -183,7 +183,7 @@ generatorApp.CREATE_VIEWS_API = (MYMODEL, zFields) => {
|
|
|
183
183
|
"[[[GENERATE_VIEW]]]": GENERATE_VIEW,
|
|
184
184
|
};
|
|
185
185
|
|
|
186
|
-
const DIR_VIEW =
|
|
186
|
+
const DIR_VIEW = path.join(dirRoot, "public", "temp", token);
|
|
187
187
|
if (!fs.existsSync(DIR_VIEW)) {
|
|
188
188
|
fs.mkdirSync(DIR_VIEW);
|
|
189
189
|
}
|
|
@@ -194,23 +194,23 @@ generatorApp.CREATE_VIEWS_API = (MYMODEL, zFields) => {
|
|
|
194
194
|
name = name.replace(".", "_");
|
|
195
195
|
let source = zFields.hasOwnProperty(name)
|
|
196
196
|
? zFields[name]
|
|
197
|
-
: fs.readFileSync(generatorApp.DIRECTORY_GENERATOR_VIEWS
|
|
197
|
+
: fs.readFileSync(path.join(generatorApp.DIRECTORY_GENERATOR_VIEWS, item), {
|
|
198
198
|
encoding: "utf8",
|
|
199
199
|
flag: "r",
|
|
200
200
|
});
|
|
201
201
|
if (source) {
|
|
202
|
-
fs.writeFileSync(DIR_VIEW
|
|
202
|
+
fs.writeFileSync(path.join(DIR_VIEW, item), source);
|
|
203
203
|
} else {
|
|
204
204
|
source = fs.readFileSync(
|
|
205
|
-
generatorApp.DIRECTORY_GENERATOR_VIEWS
|
|
205
|
+
path.join(generatorApp.DIRECTORY_GENERATOR_VIEWS, item),
|
|
206
206
|
{ encoding: "utf8", flag: "r" }
|
|
207
207
|
);
|
|
208
|
-
fs.copySync(source, DIR_VIEW
|
|
208
|
+
fs.copySync(source, path.join(DIR_VIEW, item));
|
|
209
209
|
}
|
|
210
210
|
for (let KEY in OBJ) {
|
|
211
211
|
generatorApp.MODIFIY(
|
|
212
|
-
DIR_VIEW
|
|
213
|
-
DIR_VIEW
|
|
212
|
+
path.join(DIR_VIEW, item),
|
|
213
|
+
path.join(DIR_VIEW, item),
|
|
214
214
|
KEY,
|
|
215
215
|
OBJ[KEY]
|
|
216
216
|
);
|
|
@@ -218,7 +218,7 @@ generatorApp.CREATE_VIEWS_API = (MYMODEL, zFields) => {
|
|
|
218
218
|
}
|
|
219
219
|
for (let i = 0; i < views.length; i++) {
|
|
220
220
|
const item = views[i];
|
|
221
|
-
datas[item] = fs.readFileSync(
|
|
221
|
+
datas[item] = fs.readFileSync(path.join(DIR_VIEW, item), {
|
|
222
222
|
encoding: "utf8",
|
|
223
223
|
flag: "r",
|
|
224
224
|
});
|
package/lib/generatorModel.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Created by sintret dev on 10/1/2021.
|
|
3
3
|
*/
|
|
4
|
+
const path = require("path");
|
|
4
5
|
const configGenerator = require("./config_generator");
|
|
5
6
|
const Model = require("./Model");
|
|
6
7
|
const fs = require("fs-extra");
|
|
@@ -285,6 +286,10 @@ me.prepare = (MYMODEL) => {
|
|
|
285
286
|
widgets[key].inputGroupRight = property.values.inputGroupRight;
|
|
286
287
|
widgets[key].hasInputGroup = true;
|
|
287
288
|
}
|
|
289
|
+
widgets[key].isAttributes = false;
|
|
290
|
+
if (Object.prototype.hasOwnProperty.call(property.values,"isAttributes") && property.values.isAttributes) {
|
|
291
|
+
widgets[key].isAttributes = true;
|
|
292
|
+
}
|
|
288
293
|
widgets[key].onChange = false;
|
|
289
294
|
if (Object.prototype.hasOwnProperty.call(property.values,"onChange") && property.values.onChange.length > 4) {
|
|
290
295
|
widgets[key].onChange = true;
|
|
@@ -393,22 +398,21 @@ me.prepare = (MYMODEL) => {
|
|
|
393
398
|
widgets[key].relation_info = property.values.relation_info ? true : false;
|
|
394
399
|
if(widgets[key].relation_info) {
|
|
395
400
|
//create file info to runtime
|
|
396
|
-
let dirInfo =
|
|
397
|
-
//Util.writeFile(
|
|
401
|
+
let dirInfo = path.join(dirRoot, "public", "runtime", "info", MYMODEL.table);
|
|
402
|
+
//Util.writeFile(path.join(dirRoot, "runtime", "info", MYMODEL.tab))
|
|
398
403
|
if(!fs.existsSync(dirInfo)) {
|
|
399
404
|
fs.mkdirSync(dirInfo, { recursive: true });
|
|
400
405
|
}
|
|
401
|
-
fs.writeFileSync(
|
|
406
|
+
fs.writeFileSync(path.join(dirInfo, key + ".txt"), property.values.relation_info);
|
|
402
407
|
}
|
|
403
|
-
console.log(widgets[key].onChange)
|
|
404
408
|
if(widgets[key].onChange) {
|
|
405
409
|
//create file info to runtime
|
|
406
|
-
let dirInfo =
|
|
407
|
-
//Util.writeFile(
|
|
410
|
+
let dirInfo = path.join(dirRoot, "public", "runtime", "onchange", MYMODEL.table);
|
|
411
|
+
//Util.writeFile(path.join(dirRoot, "runtime", "info", MYMODEL.tab))
|
|
408
412
|
if(!fs.existsSync(dirInfo)) {
|
|
409
413
|
fs.mkdirSync(dirInfo, { recursive: true });
|
|
410
414
|
}
|
|
411
|
-
fs.writeFileSync(
|
|
415
|
+
fs.writeFileSync(path.join(dirInfo, key + ".txt"), property.values.onChange);
|
|
412
416
|
}
|
|
413
417
|
break;
|
|
414
418
|
case "dragdrop":
|
|
@@ -468,7 +472,16 @@ me.prepare = (MYMODEL) => {
|
|
|
468
472
|
: property.values.height;
|
|
469
473
|
break;
|
|
470
474
|
case "html":
|
|
471
|
-
widgets[key].code = property.values.code
|
|
475
|
+
widgets[key].code = property.values.code ? true : false;
|
|
476
|
+
if(widgets[key].code) {
|
|
477
|
+
//create file info to runtime
|
|
478
|
+
let dirInfo = path.join(dirRoot, "public", "runtime", "html", MYMODEL.table);
|
|
479
|
+
//Util.writeFile(path.join(dirRoot, "runtime", "info", MYMODEL.tab))
|
|
480
|
+
if(!fs.existsSync(dirInfo)) {
|
|
481
|
+
fs.mkdirSync(dirInfo, { recursive: true });
|
|
482
|
+
}
|
|
483
|
+
fs.writeFileSync(path.join(dirInfo, key + ".txt"), property.values.code);
|
|
484
|
+
}
|
|
472
485
|
break;
|
|
473
486
|
|
|
474
487
|
case "money":
|
|
@@ -520,7 +533,7 @@ me.create = async (ZFIELDS) => {
|
|
|
520
533
|
const JSON_MODEL = me.prepare(ZFIELDS);
|
|
521
534
|
jsonText += me.build(JSON_MODEL);
|
|
522
535
|
jsonText += `}`;
|
|
523
|
-
const filename =
|
|
536
|
+
const filename = path.join(dirRoot, "models", ZFIELDS.table + ".js");
|
|
524
537
|
fs.writeFile(filename, jsonText, function (err) {
|
|
525
538
|
if (err) {
|
|
526
539
|
return console.log(err.toString());
|
package/lib/io.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const { Server } = require('socket.io');
|
|
2
|
-
const io = new Server();
|
|
3
|
-
//room = token
|
|
2
|
+
const io = new Server();
|
|
4
3
|
let socketArray = [];
|
|
5
4
|
|
|
6
5
|
io.on('connection', function (socket) {
|
|
@@ -11,26 +10,15 @@ io.on('connection', function (socket) {
|
|
|
11
10
|
socket.handshake.session.user = {
|
|
12
11
|
username: 'OSK'
|
|
13
12
|
};
|
|
14
|
-
//console.log('socket.handshake session data is %j.', socket.handshake.session);
|
|
15
|
-
|
|
16
|
-
// socket.handshake.session.save();
|
|
17
|
-
//emit logged_in for debugging purposes of this example
|
|
18
13
|
socket.emit('logged_in', socket.handshake.session);
|
|
19
14
|
});
|
|
20
15
|
// Unset session data via socket
|
|
21
16
|
socket.on('checksession', function() {
|
|
22
|
-
// console.log('Received checksession message');
|
|
23
|
-
// console.log('socket.handshake session data is %j.', socket.handshake.session);
|
|
24
17
|
socket.emit('checksession', socket.handshake.session);
|
|
25
18
|
});
|
|
26
|
-
// Unset session data via socket
|
|
27
19
|
socket.on('logout', function() {
|
|
28
20
|
console.log('Received logout message');
|
|
29
21
|
delete socket.handshake.session.user;
|
|
30
|
-
// socket.handshake.session.save();
|
|
31
|
-
//emit logged_out for debugging purposes of this example
|
|
32
|
-
//console.log('socket.handshake session data is %j.', socket.handshake.session);
|
|
33
|
-
|
|
34
22
|
socket.emit('logged_out', socket.handshake.session);
|
|
35
23
|
});
|
|
36
24
|
|
package/lib/zAppRouter.js
CHANGED
|
@@ -161,7 +161,7 @@ router.post("/profile-sign", access, async (req, res) => {
|
|
|
161
161
|
},
|
|
162
162
|
});
|
|
163
163
|
fs.writeFile(
|
|
164
|
-
dirRoot
|
|
164
|
+
path.join(dirRoot, "public", "uploads", "zuser", filename),
|
|
165
165
|
base64Image,
|
|
166
166
|
{ encoding: "base64" },
|
|
167
167
|
function (err) {}
|
|
@@ -1337,8 +1337,8 @@ router.post('/get_approval_comments', async(req,res) => {
|
|
|
1337
1337
|
|
|
1338
1338
|
router.get("/zdownload/zgenerator/:table", async (req, res) => {
|
|
1339
1339
|
var table = req.params.table;
|
|
1340
|
-
var
|
|
1341
|
-
res.download(
|
|
1340
|
+
var filePath = path.join(dirRoot, "public", "uploads", "zgenerator", table + ".json");
|
|
1341
|
+
res.download(filePath, function (err) {
|
|
1342
1342
|
if (err) {
|
|
1343
1343
|
//console.log(err);
|
|
1344
1344
|
}
|
|
@@ -1592,12 +1592,12 @@ router.post("/zdropzone", async (req, res) => {
|
|
|
1592
1592
|
try {
|
|
1593
1593
|
let userId = res.locals.userId;
|
|
1594
1594
|
if (userId) {
|
|
1595
|
-
let dir =
|
|
1595
|
+
let dir = path.join(dirRoot, "public", "zdropzone", userId);
|
|
1596
1596
|
if (!fs.existsSync(dir)) {
|
|
1597
1597
|
fs.mkdirSync(dir, { recursive: true });
|
|
1598
1598
|
}
|
|
1599
1599
|
let filename = req.files.file.name;
|
|
1600
|
-
req.files.file.mv(dir
|
|
1600
|
+
req.files.file.mv(path.join(dir, filename), function (err) {
|
|
1601
1601
|
if (err) {
|
|
1602
1602
|
return res.status(500).send(err + "");
|
|
1603
1603
|
}
|
|
@@ -1615,11 +1615,11 @@ router.post("/zdropzone-remove", async (req, res) => {
|
|
|
1615
1615
|
try {
|
|
1616
1616
|
let userId = res.locals.userId;
|
|
1617
1617
|
let cacheName = req.body.cname.replace("ZUSER___ID", userId);
|
|
1618
|
-
let dir =
|
|
1618
|
+
let dir = path.join(dirRoot, "public", "zdropzone", userId);
|
|
1619
1619
|
if (!fs.existsSync(dir)) {
|
|
1620
1620
|
fs.mkdirSync(dir, { recursive: true });
|
|
1621
1621
|
}
|
|
1622
|
-
let filename =
|
|
1622
|
+
let filename = path.join(dirRoot, "public", "zdropzone", userId, req.body.file);
|
|
1623
1623
|
let arr = [];
|
|
1624
1624
|
if (Util.fileExist(filename)) {
|
|
1625
1625
|
await fs.unlink(filename);
|
|
@@ -1639,7 +1639,7 @@ router.post("/zdropzone-remove", async (req, res) => {
|
|
|
1639
1639
|
router.post("/zdropzone-attributes", async (req, res) => {
|
|
1640
1640
|
try {
|
|
1641
1641
|
let userId = res.locals.userId;
|
|
1642
|
-
let dir =
|
|
1642
|
+
let dir = path.join(dirRoot, "public", "zdropzone", userId);
|
|
1643
1643
|
if (!fs.existsSync(dir)) {
|
|
1644
1644
|
fs.mkdirSync(dir, { recursive: true });
|
|
1645
1645
|
}
|
|
@@ -1726,13 +1726,14 @@ router.get("/zdownloads-dropzone/:table/:field/:id", async (req, res) => {
|
|
|
1726
1726
|
id: id,
|
|
1727
1727
|
},
|
|
1728
1728
|
});
|
|
1729
|
-
let dir =
|
|
1729
|
+
let dir = path.join(dirRoot, "public", "uploads", table, field);
|
|
1730
1730
|
let arr = [];
|
|
1731
1731
|
let files = result[field];
|
|
1732
1732
|
for (const file of files) {
|
|
1733
|
-
|
|
1733
|
+
let fullPath = path.join(dir, file);
|
|
1734
|
+
if (Util.fileExist(fullPath)) {
|
|
1734
1735
|
let filename = file.substring(13);
|
|
1735
|
-
arr.push({ path:
|
|
1736
|
+
arr.push({ path: fullPath, name: filename });
|
|
1736
1737
|
//io.to(room).emit('message', `Zip file ${filename}`)
|
|
1737
1738
|
}
|
|
1738
1739
|
}
|
|
@@ -1792,14 +1793,14 @@ router.post("/zcompress-dropzone", async (req, res) => {
|
|
|
1792
1793
|
if (!fs.existsSync(tempDir)) {
|
|
1793
1794
|
fs.mkdirSync(tempDir);
|
|
1794
1795
|
}
|
|
1795
|
-
//let dir =
|
|
1796
|
+
//let dir = path.join(dirRoot, "public", "uploads", table, field);
|
|
1796
1797
|
let arr = [];
|
|
1797
1798
|
let files = result[field];
|
|
1798
1799
|
const count = files.length;
|
|
1799
1800
|
let i = 0;
|
|
1800
1801
|
for (const file of files) {
|
|
1801
1802
|
let filename = file.substring(13);
|
|
1802
|
-
let attributes = Util.fileAttribute(dir
|
|
1803
|
+
let attributes = Util.fileAttribute(path.join(dir, file));
|
|
1803
1804
|
if (attributes.type == "image") {
|
|
1804
1805
|
const filePath = path.join(dir, file);
|
|
1805
1806
|
const tempPath = path.join(tempDir, file);
|
|
@@ -2098,7 +2099,7 @@ router.get("/zdownloads-dropbox/:table/:field/:id", async (req, res) => {
|
|
|
2098
2099
|
id: id,
|
|
2099
2100
|
},
|
|
2100
2101
|
});
|
|
2101
|
-
let dir =
|
|
2102
|
+
let dir = path.join(dirRoot, "public", "uploads", table, field);
|
|
2102
2103
|
let arr = [];
|
|
2103
2104
|
let files = result[field];
|
|
2104
2105
|
const jsZip = new JSZip();
|
|
@@ -2273,7 +2274,7 @@ router.post('/zcall-information_info', async(req,res) => {
|
|
|
2273
2274
|
let data = ''
|
|
2274
2275
|
try {
|
|
2275
2276
|
const {table, elementId, myvalue} = req.body;
|
|
2276
|
-
let content = Util.readFile(
|
|
2277
|
+
let content = Util.readFile(path.join(dirRoot, "public", "runtime", "info", table, elementId + ".txt"))
|
|
2277
2278
|
data = content;
|
|
2278
2279
|
|
|
2279
2280
|
// Fungsi untuk mengekstrak semua field dari template
|
package/lib/zGeneratorRouter.js
CHANGED
|
@@ -47,7 +47,7 @@ const nots = [
|
|
|
47
47
|
//const generatorUrl = "https://generator.cmsqu.com";
|
|
48
48
|
|
|
49
49
|
const bodyView = Util.readFile(
|
|
50
|
-
require.resolve(__dirname
|
|
50
|
+
require.resolve(path.join(__dirname, "views", "generator.ejs"))
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
router.get("/", csrfProtection, async (req, res) => {
|
|
@@ -136,14 +136,14 @@ router.get("/", csrfProtection, async (req, res) => {
|
|
|
136
136
|
|
|
137
137
|
const bodyHTML = ejs.render(bodyView, renderData);
|
|
138
138
|
const endHTML = ejs.render(
|
|
139
|
-
Util.readFile(require.resolve(__dirname
|
|
139
|
+
Util.readFile(require.resolve(path.join(__dirname, "views", "generatorjs.ejs"))),
|
|
140
140
|
renderData
|
|
141
141
|
);
|
|
142
142
|
let dataRender = renderData;
|
|
143
143
|
dataRender.bodyHTML = bodyHTML;
|
|
144
144
|
dataRender.endHTML = endHTML;
|
|
145
145
|
res.render(
|
|
146
|
-
require.resolve(__dirname
|
|
146
|
+
require.resolve(path.join(__dirname, "views", "generator_layout.ejs")),
|
|
147
147
|
dataRender
|
|
148
148
|
);
|
|
149
149
|
});
|
|
@@ -342,7 +342,7 @@ router.post("/save_and_generate", csrfProtection, async (req, res) => {
|
|
|
342
342
|
if (nots.includes(req.body.table)) {
|
|
343
343
|
return res.json(Util.flashError("Table is locked"));
|
|
344
344
|
}
|
|
345
|
-
let dir =
|
|
345
|
+
let dir = path.join(dirRoot, "public", "temp");
|
|
346
346
|
Util.dirExist(dir, true);
|
|
347
347
|
//console.log(JSON.stringify(req.body))
|
|
348
348
|
const json = await generate(req, res);
|
|
@@ -546,7 +546,7 @@ const generate = async (req, res) => {
|
|
|
546
546
|
});
|
|
547
547
|
|
|
548
548
|
fs.writeFileSync(
|
|
549
|
-
|
|
549
|
+
path.join(dirRoot, "models", filesKey.filename),
|
|
550
550
|
filesKey.content
|
|
551
551
|
);
|
|
552
552
|
console.log(`The file model of ${filesKey.filename} is saved!`);
|
|
@@ -603,13 +603,13 @@ const generate = async (req, res) => {
|
|
|
603
603
|
newModel += zRoute.buildFileModel(MYMODEL);
|
|
604
604
|
newModel += `${Util.tab}};`;
|
|
605
605
|
|
|
606
|
-
fs.writeFileSync(
|
|
606
|
+
fs.writeFileSync(path.join(dirRoot, "models", filesKey.filename), newModel);
|
|
607
607
|
}
|
|
608
608
|
//check model if it has select relation in concat
|
|
609
609
|
await scanning(MYMODEL, result);
|
|
610
610
|
}
|
|
611
611
|
//generate views
|
|
612
|
-
let DIR_VIEW =
|
|
612
|
+
let DIR_VIEW = path.join(dirRoot, "views", table);
|
|
613
613
|
if (key == "views") {
|
|
614
614
|
if (!fs.existsSync(DIR_VIEW)) {
|
|
615
615
|
fs.mkdirSync(DIR_VIEW);
|
|
@@ -619,10 +619,10 @@ const generate = async (req, res) => {
|
|
|
619
619
|
for (const q in filesKey) {
|
|
620
620
|
console.log(q);
|
|
621
621
|
if (Util.in_array(q, compilesJS)) {
|
|
622
|
-
fs.writeFileSync(
|
|
622
|
+
fs.writeFileSync(path.join(DIR_VIEW, q), filesKey[q]);
|
|
623
623
|
} else {
|
|
624
624
|
fs.writeFileSync(
|
|
625
|
-
|
|
625
|
+
path.join(DIR_VIEW, q),
|
|
626
626
|
await minify(filesKey[q], {
|
|
627
627
|
minifyJS: true,
|
|
628
628
|
minifyCSS: true,
|
|
@@ -637,7 +637,7 @@ const generate = async (req, res) => {
|
|
|
637
637
|
if (!dummy) {
|
|
638
638
|
if (key == "route") {
|
|
639
639
|
fs.writeFileSync(
|
|
640
|
-
|
|
640
|
+
path.join(dirRoot, "routes", filesKey.filename),
|
|
641
641
|
filesKey.content
|
|
642
642
|
);
|
|
643
643
|
console.log(`The files route of ${filesKey.filename} is saved!`);
|
|
@@ -647,11 +647,11 @@ const generate = async (req, res) => {
|
|
|
647
647
|
|
|
648
648
|
//make a directory
|
|
649
649
|
if (!dummy) {
|
|
650
|
-
let path_script =
|
|
650
|
+
let path_script = path.join(dirRoot, "public", "runtime", "script", table);
|
|
651
651
|
Util.dirExist(path_script, true);
|
|
652
|
-
let path_head =
|
|
652
|
+
let path_head = path.join(dirRoot, "public", "runtime", "head", table);
|
|
653
653
|
Util.dirExist(path_head, true);
|
|
654
|
-
let path_end =
|
|
654
|
+
let path_end = path.join(dirRoot, "public", "runtime", "end", table);
|
|
655
655
|
Util.dirExist(path_end, true);
|
|
656
656
|
//we need to generate javascript code into runtime
|
|
657
657
|
let relations = await zRoute.relations(req, res, MYMODEL.table);
|
|
@@ -667,9 +667,9 @@ const generate = async (req, res) => {
|
|
|
667
667
|
Util.deleteAllFiles(path_script);
|
|
668
668
|
Util.deleteAllFiles(path_head);
|
|
669
669
|
Util.deleteAllFiles(path_end);
|
|
670
|
-
Util.writeFile(`${
|
|
671
|
-
Util.writeFile(
|
|
672
|
-
Util.writeFile(
|
|
670
|
+
Util.writeFile(path.join(path_script, `${time}.js`), script.code);
|
|
671
|
+
Util.writeFile(path.join(path_head, "head.txt"), jsObj.head);
|
|
672
|
+
Util.writeFile(path.join(path_end, "end.txt"), jsObj.end);
|
|
673
673
|
}
|
|
674
674
|
|
|
675
675
|
//restart pm2 module in production
|
|
@@ -784,7 +784,7 @@ const buildJoin = async (MYMODEL, result) => {
|
|
|
784
784
|
if (result.joins && Object.keys(joins).length > 0) {
|
|
785
785
|
let newDataObj = {};
|
|
786
786
|
for (let key in joins) {
|
|
787
|
-
let THEIR_MODEL = require(
|
|
787
|
+
let THEIR_MODEL = require(path.join(dirRoot, "models", key));
|
|
788
788
|
//console.log(THEIR_MODEL)
|
|
789
789
|
let arr = joins[key] || [];
|
|
790
790
|
table_joins.push(key);
|
|
@@ -932,7 +932,7 @@ router.delete("/delete-table", csrfProtection, async (req, res) => {
|
|
|
932
932
|
//await connection.query("DELETE FROM zfields WHERE `table` = ?", [table]);
|
|
933
933
|
await connection.query(`DROP table "${table}";`);
|
|
934
934
|
//delete file
|
|
935
|
-
let modelFile = dirRoot
|
|
935
|
+
let modelFile = path.join(dirRoot, "models", table + ".js");
|
|
936
936
|
fs.stat(modelFile, function (err, stats) {
|
|
937
937
|
console.log(stats); //here we got all information of file in stats variable
|
|
938
938
|
if (err) {
|
|
@@ -945,7 +945,7 @@ router.delete("/delete-table", csrfProtection, async (req, res) => {
|
|
|
945
945
|
}
|
|
946
946
|
});
|
|
947
947
|
|
|
948
|
-
let routesFile = dirRoot
|
|
948
|
+
let routesFile = path.join(dirRoot, "routes", table + ".js");
|
|
949
949
|
fs.stat(routesFile, function (err, stats) {
|
|
950
950
|
console.log(stats); //here we got all information of file in stats variable
|
|
951
951
|
if (err) {
|
|
@@ -958,7 +958,7 @@ router.delete("/delete-table", csrfProtection, async (req, res) => {
|
|
|
958
958
|
}
|
|
959
959
|
});
|
|
960
960
|
|
|
961
|
-
let runtimeFile = dirRoot
|
|
961
|
+
let runtimeFile = path.join(dirRoot, "public", "runtime", "script", table);
|
|
962
962
|
fs.rm(
|
|
963
963
|
runtimeFile,
|
|
964
964
|
{
|
|
@@ -972,7 +972,7 @@ router.delete("/delete-table", csrfProtection, async (req, res) => {
|
|
|
972
972
|
}
|
|
973
973
|
}
|
|
974
974
|
);
|
|
975
|
-
let runtimeFileHead = dirRoot
|
|
975
|
+
let runtimeFileHead = path.join(dirRoot, "public", "runtime", "head", table);
|
|
976
976
|
fs.rm(
|
|
977
977
|
runtimeFileHead,
|
|
978
978
|
{
|
|
@@ -986,7 +986,7 @@ router.delete("/delete-table", csrfProtection, async (req, res) => {
|
|
|
986
986
|
}
|
|
987
987
|
}
|
|
988
988
|
);
|
|
989
|
-
let runtimeFileEnd = dirRoot
|
|
989
|
+
let runtimeFileEnd = path.join(dirRoot, "public", "runtime", "end", table);
|
|
990
990
|
fs.rm(
|
|
991
991
|
runtimeFileEnd,
|
|
992
992
|
{
|
|
@@ -1006,7 +1006,7 @@ router.delete("/delete-table", csrfProtection, async (req, res) => {
|
|
|
1006
1006
|
where: { route_name: table },
|
|
1007
1007
|
});
|
|
1008
1008
|
if (table) {
|
|
1009
|
-
const viewsFile = dirRoot
|
|
1009
|
+
const viewsFile = path.join(dirRoot, "views", table);
|
|
1010
1010
|
fs.rm(
|
|
1011
1011
|
viewsFile,
|
|
1012
1012
|
{
|
|
@@ -1414,12 +1414,12 @@ router.post("/export", async (req, res) => {
|
|
|
1414
1414
|
table: table,
|
|
1415
1415
|
},
|
|
1416
1416
|
});
|
|
1417
|
-
const dir =
|
|
1417
|
+
const dir = path.join(dirRoot, "public", "uploads", "zgenerator");
|
|
1418
1418
|
if (!fs.existsSync(dir)) {
|
|
1419
1419
|
fs.mkdirSync(dir);
|
|
1420
1420
|
}
|
|
1421
1421
|
const text = JSON.stringify(result);
|
|
1422
|
-
fs.writeFileSync(
|
|
1422
|
+
fs.writeFileSync(path.join(dir, table + ".json"), text);
|
|
1423
1423
|
} else {
|
|
1424
1424
|
json = Util.flashError("no table selected");
|
|
1425
1425
|
}
|
|
@@ -1495,7 +1495,7 @@ router.post("/import", async (req, res) => {
|
|
|
1495
1495
|
Scanning relation id to name
|
|
1496
1496
|
*/
|
|
1497
1497
|
const scanning = async (MYMODEL, result) => {
|
|
1498
|
-
//let MYMODEL = require(
|
|
1498
|
+
//let MYMODEL = require(path.join(dirRoot, "models", table));
|
|
1499
1499
|
let table = MYMODEL.table;
|
|
1500
1500
|
const widgets = MYMODEL.widgets;
|
|
1501
1501
|
const not_scanning = ["created_by", "updated_by"];
|
|
@@ -1511,7 +1511,7 @@ const scanning = async (MYMODEL, result) => {
|
|
|
1511
1511
|
if (arr.length) {
|
|
1512
1512
|
let str = Util.replaceAll(arr[0], '"', '')
|
|
1513
1513
|
let mysplits = str.indexOf(',') > -1 ? str.split(',') : [str]
|
|
1514
|
-
let MYMODEL_TABLE = require(
|
|
1514
|
+
let MYMODEL_TABLE = require(path.join(dirRoot, "models", widgets[key].table))
|
|
1515
1515
|
let widgetsRelations = MYMODEL_TABLE.widgets
|
|
1516
1516
|
let relationsKeys = []
|
|
1517
1517
|
let relationsKeysObject = {}
|
|
@@ -1546,7 +1546,7 @@ const scanning = async (MYMODEL, result) => {
|
|
|
1546
1546
|
newModel += zRoute.buildFileModel(MYMODEL);
|
|
1547
1547
|
newModel += `${Util.newLine}`;
|
|
1548
1548
|
newModel += `}`;
|
|
1549
|
-
fs.writeFileSync(
|
|
1549
|
+
fs.writeFileSync(path.join(dirRoot, "models", MYMODEL.table + ".js"), newModel);
|
|
1550
1550
|
}
|
|
1551
1551
|
|
|
1552
1552
|
//check if has join
|
|
@@ -1559,7 +1559,7 @@ const scanning = async (MYMODEL, result) => {
|
|
|
1559
1559
|
newModel += zRoute.buildFileModel(MYMODEL);
|
|
1560
1560
|
newModel += `${Util.newLine}`;
|
|
1561
1561
|
newModel += `}`;
|
|
1562
|
-
fs.writeFileSync(
|
|
1562
|
+
fs.writeFileSync(path.join(dirRoot, "models", MYMODEL.table + ".js"), newModel);
|
|
1563
1563
|
//return MYMODEL;
|
|
1564
1564
|
};
|
|
1565
1565
|
|
|
@@ -1572,11 +1572,11 @@ router.post("/generate-assets", async (req, res) => {
|
|
|
1572
1572
|
for (let key in MYMODELS) {
|
|
1573
1573
|
let MYMODEL = MYMODELS[key];
|
|
1574
1574
|
let table = MYMODEL.table;
|
|
1575
|
-
let path_script =
|
|
1575
|
+
let path_script = path.join(dirRoot, "public", "runtime", "script", table);
|
|
1576
1576
|
Util.dirExist(path_script, true);
|
|
1577
|
-
let path_head =
|
|
1577
|
+
let path_head = path.join(dirRoot, "public", "runtime", "head", table);
|
|
1578
1578
|
Util.dirExist(path_head, true);
|
|
1579
|
-
let path_end =
|
|
1579
|
+
let path_end = path.join(dirRoot, "public", "runtime", "end", table);
|
|
1580
1580
|
Util.dirExist(path_end, true);
|
|
1581
1581
|
//we need to generate javascript code into runtime
|
|
1582
1582
|
let relations = await zRoute.relations(req, res, MYMODEL.table);
|
|
@@ -1590,9 +1590,9 @@ router.post("/generate-assets", async (req, res) => {
|
|
|
1590
1590
|
//minify script
|
|
1591
1591
|
let script = uglifyJS.minify(jsObj.script);
|
|
1592
1592
|
if (script.error) throw script.error;
|
|
1593
|
-
Util.writeFile(`${
|
|
1594
|
-
Util.writeFile(
|
|
1595
|
-
Util.writeFile(
|
|
1593
|
+
Util.writeFile(path.join(path_script, `${time}.js`), script.code);
|
|
1594
|
+
Util.writeFile(path.join(path_head, "head.txt"), jsObj.head);
|
|
1595
|
+
Util.writeFile(path.join(path_end, "end.txt"), jsObj.end);
|
|
1596
1596
|
}
|
|
1597
1597
|
} catch (e) {
|
|
1598
1598
|
notifObj = Util.flashError(e.toString());
|
|
@@ -1613,8 +1613,8 @@ router.post("/minify", async (req, res) => {
|
|
|
1613
1613
|
|
|
1614
1614
|
const viewsMini = async () => {
|
|
1615
1615
|
let notifyObj = Util.jsonSuccess("Success");
|
|
1616
|
-
const viewDir =
|
|
1617
|
-
const layoutsDir =
|
|
1616
|
+
const viewDir = path.join(dirRoot, "views");
|
|
1617
|
+
const layoutsDir = path.join(dirRoot, "views", "layouts");
|
|
1618
1618
|
let item;
|
|
1619
1619
|
try {
|
|
1620
1620
|
let views = Util.getAllFiles(viewDir);
|
|
@@ -1627,11 +1627,11 @@ const viewsMini = async () => {
|
|
|
1627
1627
|
for (const dir of views) {
|
|
1628
1628
|
console.log("dir :", dir);
|
|
1629
1629
|
if (!Util.in_array(dir, notViewDir)) {
|
|
1630
|
-
let files = Util.getAllFiles(
|
|
1630
|
+
let files = Util.getAllFiles(path.join(viewDir, dir));
|
|
1631
1631
|
//console.log(files);
|
|
1632
1632
|
for (item of files) {
|
|
1633
1633
|
if (item.includes(".ejs")) {
|
|
1634
|
-
let filename =
|
|
1634
|
+
let filename = path.join(viewDir, dir, item);
|
|
1635
1635
|
let content = Util.readFile(filename);
|
|
1636
1636
|
let contentChange = await minify(content, options);
|
|
1637
1637
|
fs.writeFileSync(filename, contentChange);
|
|
@@ -1643,7 +1643,7 @@ const viewsMini = async () => {
|
|
|
1643
1643
|
let layouts = Util.getAllFiles(layoutsDir);
|
|
1644
1644
|
for (item of layouts) {
|
|
1645
1645
|
if (item.includes(".ejs")) {
|
|
1646
|
-
let filename =
|
|
1646
|
+
let filename = path.join(layoutsDir, item);
|
|
1647
1647
|
let content = Util.readFile(filename);
|
|
1648
1648
|
let contentChange = await minify(content, options);
|
|
1649
1649
|
fs.writeFileSync(filename, contentChange);
|
package/lib/zMenuRouter.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const express = require('express');
|
|
2
|
+
const path = require('path');
|
|
2
3
|
const router = express.Router();
|
|
3
4
|
const csrf = require('./csrf');
|
|
4
5
|
const csrfProtection = csrf({cookie: true});
|
|
@@ -19,7 +20,7 @@ if (typeof global.dirRoot === 'undefined') {
|
|
|
19
20
|
icons list for tabler and set to /public/js
|
|
20
21
|
*/
|
|
21
22
|
const iconList = () => {
|
|
22
|
-
const dir =
|
|
23
|
+
const dir = path.join(dirRoot, 'public', 'assets', 'icons');
|
|
23
24
|
const icons = fs.readdirSync(dir);
|
|
24
25
|
return icons;
|
|
25
26
|
};
|
package/lib/zPage.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* For dynamic router
|
|
3
3
|
*/
|
|
4
|
+
const path = require('path');
|
|
4
5
|
const axios = require('axios');
|
|
5
6
|
const fs = require('fs-extra');
|
|
6
7
|
const nodemailer = require('nodemailer');
|
|
@@ -35,7 +36,7 @@ zpage.build = async (req, res) => {
|
|
|
35
36
|
});
|
|
36
37
|
server_code += `module.exports = router;`;
|
|
37
38
|
|
|
38
|
-
fs.writeFileSync(dirRoot
|
|
39
|
+
fs.writeFileSync(path.join(dirRoot, "routes", "zindex.js"), server_code, 'utf-8');
|
|
39
40
|
if (process.env.NODE_ENV === "production") {
|
|
40
41
|
setTimeout(function () {
|
|
41
42
|
pm2.connect(function (err) {
|
|
@@ -65,7 +66,7 @@ const { connection, Util, io, zCache, myCache, zDebug, zDataTable, moduleLib, zF
|
|
|
65
66
|
zpage.createRoute = (obj, token, layoutObj) => {
|
|
66
67
|
const MYMODELS = myCache.get('MYMODELS');
|
|
67
68
|
const MYMODEL = MYMODELS.zpage;
|
|
68
|
-
let DIR = dirRoot
|
|
69
|
+
let DIR = path.join(dirRoot, "views", "zindex");
|
|
69
70
|
let METHOD = MYMODEL.widgets.method.fields;
|
|
70
71
|
let layout = "new-blank.ejs";
|
|
71
72
|
if (obj.layouts == 2) {
|
|
@@ -92,10 +93,10 @@ zpage.createRoute = (obj, token, layoutObj) => {
|
|
|
92
93
|
let render = "";
|
|
93
94
|
let renderData = "";
|
|
94
95
|
if (obj.head) {
|
|
95
|
-
fs.writeFileSync(
|
|
96
|
+
fs.writeFileSync(path.join(DIR, `page${obj.id}-head.ejs`), obj.head, 'utf-8');
|
|
96
97
|
renderData += `renderData.renderHead = "zindex/page${obj.id}-head.ejs"; `
|
|
97
98
|
} else {
|
|
98
|
-
fs.unlink(
|
|
99
|
+
fs.unlink(path.join(DIR, `page${obj.id}-head.ejs`), function (err) {
|
|
99
100
|
if (err) return console.log(err);
|
|
100
101
|
console.log('file deleted successfully');
|
|
101
102
|
});
|
|
@@ -103,26 +104,26 @@ zpage.createRoute = (obj, token, layoutObj) => {
|
|
|
103
104
|
|
|
104
105
|
let isrenderPage = false;
|
|
105
106
|
if (obj.client_code) {
|
|
106
|
-
fs.writeFileSync(
|
|
107
|
+
fs.writeFileSync(path.join(DIR, `page${obj.id}.ejs`), obj.client_code, 'utf-8');
|
|
107
108
|
renderData += `renderData.renderBody = "zindex/page${obj.id}.ejs"; `
|
|
108
109
|
isrenderPage = true;
|
|
109
110
|
} else {
|
|
110
|
-
fs.unlink(
|
|
111
|
+
fs.unlink(path.join(DIR, `page${obj.id}.ejs`), function (err) {
|
|
111
112
|
if (err) return console.log(err);
|
|
112
113
|
console.log('file deleted successfully');
|
|
113
114
|
});
|
|
114
115
|
}
|
|
115
116
|
//optional
|
|
116
117
|
if(!isrenderPage && obj.method == 1) {
|
|
117
|
-
fs.writeFileSync(
|
|
118
|
+
fs.writeFileSync(path.join(DIR, `page${obj.id}.ejs`), obj.client_code, 'utf-8');
|
|
118
119
|
renderData += `renderData.renderBody = "zindex/page${obj.id}.ejs"; `
|
|
119
120
|
}
|
|
120
121
|
//end optional
|
|
121
122
|
if (obj.scripts) {
|
|
122
|
-
fs.writeFileSync(
|
|
123
|
+
fs.writeFileSync(path.join(DIR, `page${obj.id}-script.ejs`), obj.scripts, 'utf-8');
|
|
123
124
|
renderData += `renderData.renderEnd = "zindex/page${obj.id}-script.ejs"; `
|
|
124
125
|
} else {
|
|
125
|
-
fs.unlink(
|
|
126
|
+
fs.unlink(path.join(DIR, `page${obj.id}-script.ejs`), function (err) {
|
|
126
127
|
if (err) return console.log(err);
|
|
127
128
|
console.log('file deleted successfully');
|
|
128
129
|
});
|
|
@@ -162,8 +163,8 @@ zpage.buildLayout = async (obj) => {
|
|
|
162
163
|
minifyCSS:true,
|
|
163
164
|
collapseWhitespace: true
|
|
164
165
|
});
|
|
165
|
-
console.log(dirRoot
|
|
166
|
-
fs.writeFileSync(dirRoot
|
|
166
|
+
console.log(path.join(dirRoot, "views", "layouts", name + ".ejs"));
|
|
167
|
+
fs.writeFileSync(path.join(dirRoot, "views", "layouts", name + ".ejs"), html, 'utf-8');
|
|
167
168
|
if (process.env.NODE_ENV === "production") {
|
|
168
169
|
setTimeout(function () {
|
|
169
170
|
pm2.connect(function (err) {
|
|
@@ -181,8 +182,8 @@ zpage.buildLayout = async (obj) => {
|
|
|
181
182
|
|
|
182
183
|
zpage.layoutDelete = async (obj) => {
|
|
183
184
|
let name = Util.toName(obj.name);
|
|
184
|
-
let
|
|
185
|
-
fs.unlink(
|
|
185
|
+
let filePath = path.join(dirRoot, "views", "layouts", "customs", name + ".ejs");
|
|
186
|
+
fs.unlink(filePath, function (err) {
|
|
186
187
|
if (err) return console.log(err);
|
|
187
188
|
console.log('file deleted successfully');
|
|
188
189
|
});
|
package/lib/zRoute.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* service for routes
|
|
4
4
|
*/
|
|
5
5
|
require("dotenv").config();
|
|
6
|
+
const path = require("path");
|
|
6
7
|
const excelToJson = require("convert-excel-to-json");
|
|
7
8
|
const qs = require("qs");
|
|
8
9
|
//for generate PDF
|
|
@@ -34,11 +35,11 @@ zRoute.tableHasNoCompanyId = ["zcompany", "zrole", "zgrid"];
|
|
|
34
35
|
//get all models
|
|
35
36
|
zRoute.MYMODELS = () => {
|
|
36
37
|
let obj = {};
|
|
37
|
-
const dir =
|
|
38
|
+
const dir = path.join(dirRoot, "models");
|
|
38
39
|
let models = Util.getAllFiles(dir);
|
|
39
40
|
for (const item of models) {
|
|
40
41
|
let name = item.replace(".js", "");
|
|
41
|
-
obj[name] = require(
|
|
42
|
+
obj[name] = require(path.join(dir, name));
|
|
42
43
|
}
|
|
43
44
|
return obj;
|
|
44
45
|
};
|
|
@@ -46,7 +47,7 @@ zRoute.MYMODELS = () => {
|
|
|
46
47
|
//get all routes
|
|
47
48
|
zRoute.ROUTES = () => {
|
|
48
49
|
let arr = [];
|
|
49
|
-
const dir =
|
|
50
|
+
const dir = path.join(dirRoot, "routes");
|
|
50
51
|
let routes = Util.getAllFiles(dir);
|
|
51
52
|
let nots = ["index", "zindex", "auth"];
|
|
52
53
|
for (const item of routes) {
|
|
@@ -66,7 +67,7 @@ zRoute.renderHTML = (datas) => {
|
|
|
66
67
|
if (myCache.has(renderBody)) {
|
|
67
68
|
bodyHTML = myCache.get(renderBody);
|
|
68
69
|
} else {
|
|
69
|
-
bodyHTML = Util.readFile(
|
|
70
|
+
bodyHTML = Util.readFile(path.join(dirRoot, "views", datas.renderBody));
|
|
70
71
|
myCache.set(renderBody, bodyHTML);
|
|
71
72
|
}
|
|
72
73
|
delete datas.renderBody;
|
|
@@ -76,7 +77,7 @@ zRoute.renderHTML = (datas) => {
|
|
|
76
77
|
if (myCache.has(renderEnd)) {
|
|
77
78
|
endHTML = myCache.get(renderEnd);
|
|
78
79
|
} else {
|
|
79
|
-
endHTML = Util.readFile(
|
|
80
|
+
endHTML = Util.readFile(path.join(dirRoot, "views", datas.renderEnd));
|
|
80
81
|
myCache.set(renderEnd, endHTML);
|
|
81
82
|
}
|
|
82
83
|
delete datas.renderEnd;
|
|
@@ -120,7 +121,7 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
|
|
|
120
121
|
let post = qs.parse(body);
|
|
121
122
|
let isEmptyFiles = Util.isEmptyObject(req.files);
|
|
122
123
|
let time = new Date().getTime();
|
|
123
|
-
let path_tmp = dirRoot
|
|
124
|
+
let path_tmp = path.join(dirRoot, "public", "uploads", routeName);
|
|
124
125
|
let hasFile = false;
|
|
125
126
|
let files;
|
|
126
127
|
let checkboxes = [];
|
|
@@ -137,11 +138,11 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
|
|
|
137
138
|
if (Array.isArray(fileRoute[key])) {
|
|
138
139
|
hasFile = true;
|
|
139
140
|
//add folder again
|
|
140
|
-
fs.ensureDir(path_tmp
|
|
141
|
+
fs.ensureDir(path.join(path_tmp, key), (err) => {
|
|
141
142
|
//console.log('ensureDir',err); // => null
|
|
142
143
|
});
|
|
143
144
|
} else {
|
|
144
|
-
fileRoute[key].mv(path_tmp
|
|
145
|
+
fileRoute[key].mv(path.join(path_tmp, filename), function (err) {
|
|
145
146
|
if (err) {
|
|
146
147
|
//console.log('fileempty move',err); // => null
|
|
147
148
|
return res.status(500).send(err);
|
|
@@ -259,7 +260,7 @@ zRoute.post = (req, res, MYMODEL, routeName, body) => {
|
|
|
259
260
|
req.files[fileImageName].name;
|
|
260
261
|
item[k] = kname;
|
|
261
262
|
req.files[fileImageName].mv(
|
|
262
|
-
path_tmp
|
|
263
|
+
path.join(path_tmp, key, kname),
|
|
263
264
|
function (err) {
|
|
264
265
|
if (err) {
|
|
265
266
|
return res.status(500).send(err);
|
|
@@ -1730,7 +1731,7 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
|
|
|
1730
1731
|
}
|
|
1731
1732
|
}
|
|
1732
1733
|
//check directory for import not export
|
|
1733
|
-
const dir =
|
|
1734
|
+
const dir = path.join(dirRoot, "public", "excel", "tmp");
|
|
1734
1735
|
if (!fs.existsSync(dir)) {
|
|
1735
1736
|
fs.mkdirSync(dir);
|
|
1736
1737
|
}
|
|
@@ -2372,7 +2373,7 @@ zRoute.generatePDF = async (file, layout = "pdf_bootstrap", options = {}) => {
|
|
|
2372
2373
|
puppeterOptions.defaultViewport = { width: 1920, height: 1080 };
|
|
2373
2374
|
const browser = await puppeteer.launch(puppeterOptions);
|
|
2374
2375
|
const page = await browser.newPage();
|
|
2375
|
-
let mylayout =
|
|
2376
|
+
let mylayout = path.join(dirRoot, "views", "layouts", layout + ".ejs");
|
|
2376
2377
|
if (file.content) {
|
|
2377
2378
|
const html = await ejs.renderFile(
|
|
2378
2379
|
mylayout,
|
|
@@ -2390,7 +2391,7 @@ zRoute.generatePDF = async (file, layout = "pdf_bootstrap", options = {}) => {
|
|
|
2390
2391
|
});
|
|
2391
2392
|
}
|
|
2392
2393
|
let fileName = new Date().getTime() + ".pdf";
|
|
2393
|
-
const filePath =
|
|
2394
|
+
const filePath = path.join(dirRoot, "public", "_pdf", fileName);
|
|
2394
2395
|
const myoptions = {
|
|
2395
2396
|
path: filePath,
|
|
2396
2397
|
format: "A4",
|
|
@@ -3183,7 +3184,7 @@ zRoute.forms = (
|
|
|
3183
3184
|
dropfiles = [obj.value];
|
|
3184
3185
|
}
|
|
3185
3186
|
dropfiles.map((item) => {
|
|
3186
|
-
let filename =
|
|
3187
|
+
let filename = path.join(dirRoot, "public", "uploads", MYMODEL.table, key, item);
|
|
3187
3188
|
var fileSizeInBytes = 12345;
|
|
3188
3189
|
if (Util.fileExist(filename)) {
|
|
3189
3190
|
var stats = fs.statSync(filename);
|
|
@@ -3215,7 +3216,7 @@ zRoute.forms = (
|
|
|
3215
3216
|
dropfiles = [obj.value];
|
|
3216
3217
|
}
|
|
3217
3218
|
dropfiles.map((item) => {
|
|
3218
|
-
let filename = item;
|
|
3219
|
+
let filename = item; //path.join(dirRoot, "public", "uploads", MYMODEL.table, key, item);
|
|
3219
3220
|
var fileSizeInBytes = 12345;
|
|
3220
3221
|
if (Util.fileExist(filename)) {
|
|
3221
3222
|
var stats = fs.statSync(filename);
|
|
@@ -4058,11 +4059,11 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4058
4059
|
//check a file in directory
|
|
4059
4060
|
//make a directory
|
|
4060
4061
|
let table = MYMODEL.table;
|
|
4061
|
-
let path_script =
|
|
4062
|
+
let path_script = path.join(dirRoot, "public", "runtime", "script", table);
|
|
4062
4063
|
Util.dirExist(path_script, true);
|
|
4063
|
-
let path_head =
|
|
4064
|
+
let path_head = path.join(dirRoot, "public", "runtime", "head", table);
|
|
4064
4065
|
Util.dirExist(path_head, true);
|
|
4065
|
-
let path_end =
|
|
4066
|
+
let path_end = path.join(dirRoot, "public", "runtime", "end", table);
|
|
4066
4067
|
Util.dirExist(path_end, true);
|
|
4067
4068
|
let files = Util.getAllFiles(path_script);
|
|
4068
4069
|
let head = res.locals.moduleHead;
|
|
@@ -4071,10 +4072,10 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4071
4072
|
let head_files = Util.getAllFiles(path_head);
|
|
4072
4073
|
let end_files = Util.getAllFiles(path_end);
|
|
4073
4074
|
if (head_files.length) {
|
|
4074
|
-
head += Util.readFile(
|
|
4075
|
+
head += Util.readFile(path.join(path_head, "head.txt"));
|
|
4075
4076
|
}
|
|
4076
4077
|
if (end_files.length) {
|
|
4077
|
-
end += Util.readFile(
|
|
4078
|
+
end += Util.readFile(path.join(path_end, "end.txt"));
|
|
4078
4079
|
}
|
|
4079
4080
|
end += `<script src="/runtime/script/${table}/${files[0]}"></script>`;
|
|
4080
4081
|
} else {
|
|
@@ -4083,9 +4084,9 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4083
4084
|
Util.deleteAllFiles(path_head);
|
|
4084
4085
|
Util.deleteAllFiles(path_end);
|
|
4085
4086
|
//minify js
|
|
4086
|
-
Util.writeFile(`${
|
|
4087
|
-
Util.writeFile(
|
|
4088
|
-
Util.writeFile(
|
|
4087
|
+
Util.writeFile(path.join(path_script, `${time}.js`), uglifyJS.minify(jsObj.script));
|
|
4088
|
+
Util.writeFile(path.join(path_head, "head.txt"), jsObj.head);
|
|
4089
|
+
Util.writeFile(path.join(path_end, "end.txt"), jsObj.end);
|
|
4089
4090
|
end += `<script src="/runtime/script/${table}/${time}.js"></script>`;
|
|
4090
4091
|
if (jsObj.head) {
|
|
4091
4092
|
head += jsObj.head;
|
|
@@ -4104,7 +4105,7 @@ zRoute.moduleLib = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4104
4105
|
let scriptTemp = "";
|
|
4105
4106
|
for (let keys in MYMODEL.widgets) {
|
|
4106
4107
|
if (MYMODEL.widgets[keys].name == "table") {
|
|
4107
|
-
let MODEL_TABLE = require(
|
|
4108
|
+
let MODEL_TABLE = require(path.join(dirRoot, "models", MYMODEL.widgets[keys].table));
|
|
4108
4109
|
for (let key in MODEL_TABLE.widgets) {
|
|
4109
4110
|
if (MODEL_TABLE.widgets[key].name == "dropdown_multi") {
|
|
4110
4111
|
let relObject = relations[keys + "Row"][key + "Object"];
|
|
@@ -4735,7 +4736,7 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4735
4736
|
case "table":
|
|
4736
4737
|
let MODEL_TABLE =
|
|
4737
4738
|
MYMODELS[MYMODEL.widgets[keys].table] ||
|
|
4738
|
-
require(
|
|
4739
|
+
require(path.join(dirRoot, "models", MYMODEL.widgets[keys].table));
|
|
4739
4740
|
//let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
|
|
4740
4741
|
//relations[key + "TABLE"]
|
|
4741
4742
|
let RELATIONS_MODEL_TABLE =
|
|
@@ -4934,7 +4935,7 @@ $("#body-${keys}>tr").each(function (index, tr) {
|
|
|
4934
4935
|
$(function(){`
|
|
4935
4936
|
onChanges.forEach(function (item) {
|
|
4936
4937
|
let tableItem = MYMODEL.widgets[item].table;
|
|
4937
|
-
let dirContent =
|
|
4938
|
+
let dirContent = path.join(dirRoot, "public", "runtime", "onchange", MYMODEL.table, item + ".txt");
|
|
4938
4939
|
let contentAjax = Util.readFile(dirContent);
|
|
4939
4940
|
scriptForm += `
|
|
4940
4941
|
$("#${item}").on("change", function() {
|
|
@@ -4997,9 +4998,8 @@ zRoute.insertSQL = async (req, res, table, data) => {
|
|
|
4997
4998
|
for (let key in MYMODEL.widgets) {
|
|
4998
4999
|
if (MYMODEL.widgets[key].name === "dropzone") {
|
|
4999
5000
|
//console.log('has dropzone')
|
|
5000
|
-
let path_src = dirRoot
|
|
5001
|
-
let path_dest =
|
|
5002
|
-
dirRoot + "/public/uploads/" + MYMODEL.routeName + "/" + key + "/";
|
|
5001
|
+
let path_src = path.join(dirRoot, "public", "zdropzone", userId);
|
|
5002
|
+
let path_dest = path.join(dirRoot, "public", "uploads", MYMODEL.routeName, key);
|
|
5003
5003
|
if (!fs.existsSync(path_dest)) {
|
|
5004
5004
|
fs.mkdirSync(path_dest, { recursive: true });
|
|
5005
5005
|
}
|
|
@@ -5010,10 +5010,11 @@ zRoute.insertSQL = async (req, res, table, data) => {
|
|
|
5010
5010
|
if (arr.length > 0) {
|
|
5011
5011
|
let time = new Date().getTime();
|
|
5012
5012
|
arr.map((item) => {
|
|
5013
|
-
|
|
5013
|
+
let srcFile = path.join(path_src, item);
|
|
5014
|
+
if (Util.fileExist(srcFile)) {
|
|
5014
5015
|
let newItem = Util.cleanString(time + item);
|
|
5015
5016
|
newArr.push(newItem);
|
|
5016
|
-
fs.rename(
|
|
5017
|
+
fs.rename(srcFile, path.join(path_dest, newItem));
|
|
5017
5018
|
}
|
|
5018
5019
|
});
|
|
5019
5020
|
data[key] = Util.array_to_jsonb(newArr);
|
|
@@ -5160,9 +5161,8 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
|
|
|
5160
5161
|
}
|
|
5161
5162
|
if (MYMODEL.widgets[key].name === "dropzone") {
|
|
5162
5163
|
//console.log('has dropzone')
|
|
5163
|
-
let path_src = dirRoot
|
|
5164
|
-
let path_dest =
|
|
5165
|
-
dirRoot + "/public/uploads/" + MYMODEL.table + "/" + key + "/";
|
|
5164
|
+
let path_src = path.join(dirRoot, "public", "zdropzone", userId);
|
|
5165
|
+
let path_dest = path.join(dirRoot, "public", "uploads", MYMODEL.table, key);
|
|
5166
5166
|
if (!fs.existsSync(path_dest)) {
|
|
5167
5167
|
fs.mkdirSync(path_dest, { recursive: true });
|
|
5168
5168
|
}
|
|
@@ -5172,11 +5172,13 @@ zRoute.updateSQL = async (req, res, table, data, whereData) => {
|
|
|
5172
5172
|
let newArr = [];
|
|
5173
5173
|
let time = new Date().getTime();
|
|
5174
5174
|
arr.map((item) => {
|
|
5175
|
-
|
|
5175
|
+
let destFile = path.join(path_dest, item);
|
|
5176
|
+
if (!Util.fileExist(destFile)) {
|
|
5176
5177
|
let newItem = time + item;
|
|
5177
5178
|
newArr.push(newItem);
|
|
5178
|
-
|
|
5179
|
-
|
|
5179
|
+
let srcFile = path.join(path_src, item);
|
|
5180
|
+
if (Util.fileExist(srcFile)) {
|
|
5181
|
+
fs.rename(srcFile, path.join(path_dest, newItem));
|
|
5180
5182
|
}
|
|
5181
5183
|
} else {
|
|
5182
5184
|
newArr.push(item);
|
|
@@ -5383,16 +5385,16 @@ zRoute.deleteFiles = async (table, result) => {
|
|
|
5383
5385
|
for (let key in widgets) {
|
|
5384
5386
|
if (widgets[key].name == "dropzone") {
|
|
5385
5387
|
if (result[key]) {
|
|
5386
|
-
let dir =
|
|
5388
|
+
let dir = path.join(dirRoot, "public", "uploads", table, key);
|
|
5387
5389
|
result[key].map((item) => {
|
|
5388
|
-
fs.remove(dir
|
|
5390
|
+
fs.remove(path.join(dir, item), () => {});
|
|
5389
5391
|
});
|
|
5390
5392
|
}
|
|
5391
5393
|
}
|
|
5392
5394
|
if (widgets[key].name == "image" || widgets[key].name == "file") {
|
|
5393
5395
|
if (result[key]) {
|
|
5394
|
-
let dir =
|
|
5395
|
-
fs.remove(dir
|
|
5396
|
+
let dir = path.join(dirRoot, "public", "uploads", table);
|
|
5397
|
+
fs.remove(path.join(dir, result[key]), () => {});
|
|
5396
5398
|
}
|
|
5397
5399
|
}
|
|
5398
5400
|
if (widgets[key].name == "dropbox") {
|
|
@@ -5487,7 +5489,7 @@ zRoute.import = async (req, res, MYMODEL) => {
|
|
|
5487
5489
|
}
|
|
5488
5490
|
let mytables = "<table>";
|
|
5489
5491
|
let uniqueName = Util.generateUnique() + ".xlsx";
|
|
5490
|
-
const filename =
|
|
5492
|
+
const filename = path.join(dirRoot, "public", "uploads", "zlogs_upload", uniqueName);
|
|
5491
5493
|
let excelFile = req.files.excel,
|
|
5492
5494
|
labels = MYMODEL.labels,
|
|
5493
5495
|
keys = {};
|
|
@@ -5685,10 +5687,10 @@ zRoute.buildForm = async (req, res) => {
|
|
|
5685
5687
|
let table = req.body.table;
|
|
5686
5688
|
let keys = req.body.keys;
|
|
5687
5689
|
let relations = JSON.parse(req.body.relations) || {};
|
|
5688
|
-
let MYMODEL = MYMODELS[table] || require(
|
|
5690
|
+
let MYMODEL = MYMODELS[table] || require(path.join(dirRoot, "models", table));
|
|
5689
5691
|
let MODEL_TABLE =
|
|
5690
5692
|
MYMODELS[MYMODEL.widgets[keys].table] ||
|
|
5691
|
-
require(
|
|
5693
|
+
require(path.join(dirRoot, "models", MYMODEL.widgets[keys].table));
|
|
5692
5694
|
let MODEL_TABLE_RELATIONS = await zRoute.relations(
|
|
5693
5695
|
req,
|
|
5694
5696
|
res,
|
|
@@ -6187,7 +6189,7 @@ zRoute.makeFunctionsSystem = () => {
|
|
|
6187
6189
|
}
|
|
6188
6190
|
let templateSystem = `const { connection, Util, io, zCache, myCache, zDebug, zDataTable, moduleLib, zFunction, zFn, zMail, zRoute, zRole} = require('zet-lib');
|
|
6189
6191
|
module.exports = (req, res, next) => {`;
|
|
6190
|
-
let fileSystem =
|
|
6192
|
+
let fileSystem = path.join(dirRoot, "components", "zFunctionsSystem.js");
|
|
6191
6193
|
templateSystem += content;
|
|
6192
6194
|
templateSystem += ` next();
|
|
6193
6195
|
};
|
package/lib/zViewGenerator.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const express = require('express');
|
|
2
|
+
const path = require('path');
|
|
2
3
|
const router = express.Router();
|
|
3
4
|
const csrf = require('./csrf');
|
|
4
5
|
const csrfProtection = csrf({cookie: true});
|
|
@@ -73,13 +74,13 @@ router.get('/', csrfProtection, async (req, res) => {
|
|
|
73
74
|
relations: relations,
|
|
74
75
|
routeName: res.locals.routeName
|
|
75
76
|
}
|
|
76
|
-
const bodyView = Util.readFile(require.resolve(__dirname
|
|
77
|
+
const bodyView = Util.readFile(require.resolve(path.join(__dirname, 'views', 'zview.ejs')))
|
|
77
78
|
const bodyHTML = ejs.render(bodyView, renderData)
|
|
78
|
-
const endHTML = ejs.render(Util.readFile(require.resolve(__dirname
|
|
79
|
+
const endHTML = ejs.render(Util.readFile(require.resolve(path.join(__dirname, 'views', 'zviewjs.ejs'))), renderData)
|
|
79
80
|
let dataRender = renderData
|
|
80
81
|
dataRender.bodyHTML = bodyHTML
|
|
81
82
|
dataRender.endHTML = endHTML
|
|
82
|
-
res.render(require.resolve(__dirname
|
|
83
|
+
res.render(require.resolve(path.join(__dirname, 'views', 'view_layout.ejs')), dataRender)
|
|
83
84
|
})
|
|
84
85
|
|
|
85
86
|
router.post('/addview', async (req, res) => {
|
|
@@ -152,19 +153,19 @@ router.post('/load-form', async (req, res) => {
|
|
|
152
153
|
if (result.id) {
|
|
153
154
|
json = Util.jsonSuccess('success')
|
|
154
155
|
if (!result.router) {
|
|
155
|
-
result.router = Util.readFile(require.resolve(__dirname
|
|
156
|
+
result.router = Util.readFile(require.resolve(path.join(__dirname, 'views', 'router.txt')))
|
|
156
157
|
}
|
|
157
158
|
if (!result.index_ejs) {
|
|
158
|
-
result.index_ejs = Util.readFile(require.resolve(__dirname
|
|
159
|
+
result.index_ejs = Util.readFile(require.resolve(path.join(__dirname, 'views', 'index_ejs.txt')))
|
|
159
160
|
}
|
|
160
161
|
if (!result.indexcss_ejs) {
|
|
161
|
-
result.indexcss_ejs = Util.readFile(require.resolve(__dirname
|
|
162
|
+
result.indexcss_ejs = Util.readFile(require.resolve(path.join(__dirname, 'views', 'indexcss_ejs.txt')))
|
|
162
163
|
}
|
|
163
164
|
if (!result.indexjs_ejs) {
|
|
164
|
-
result.indexjs_ejs = Util.readFile(require.resolve(__dirname
|
|
165
|
+
result.indexjs_ejs = Util.readFile(require.resolve(path.join(__dirname, 'views', 'indexjs_ejs.txt')))
|
|
165
166
|
}
|
|
166
167
|
if (!result.view_ejs) {
|
|
167
|
-
result.view_ejs = Util.readFile(require.resolve(__dirname
|
|
168
|
+
result.view_ejs = Util.readFile(require.resolve(path.join(__dirname, 'views', 'view_ejs.txt')))
|
|
168
169
|
}
|
|
169
170
|
if (!result.queries) {
|
|
170
171
|
result.queries = {
|
|
@@ -274,7 +275,7 @@ router.delete('/delete-table', csrfProtection, async (req, res) => {
|
|
|
274
275
|
//await connection.query("DELETE FROM zfields WHERE `table` = ?", [table]);
|
|
275
276
|
await connection.query(`DROP VIEW "${table}";`)
|
|
276
277
|
//delete file
|
|
277
|
-
let modelFile = dirRoot
|
|
278
|
+
let modelFile = path.join(dirRoot, 'models', table + '.js')
|
|
278
279
|
fs.stat(modelFile, function (err, stats) {
|
|
279
280
|
console.log(stats) //here we got all information of file in stats variable
|
|
280
281
|
if (err) {
|
|
@@ -287,7 +288,7 @@ router.delete('/delete-table', csrfProtection, async (req, res) => {
|
|
|
287
288
|
}
|
|
288
289
|
})
|
|
289
290
|
|
|
290
|
-
let routesFile = dirRoot
|
|
291
|
+
let routesFile = path.join(dirRoot, 'routes', table + '.js')
|
|
291
292
|
fs.stat(routesFile, function (err, stats) {
|
|
292
293
|
console.log(stats) //here we got all information of file in stats variable
|
|
293
294
|
if (err) {
|
|
@@ -300,7 +301,7 @@ router.delete('/delete-table', csrfProtection, async (req, res) => {
|
|
|
300
301
|
}
|
|
301
302
|
})
|
|
302
303
|
|
|
303
|
-
let runtimeFile = dirRoot
|
|
304
|
+
let runtimeFile = path.join(dirRoot, 'public', 'runtime', 'script', table)
|
|
304
305
|
fs.rm(
|
|
305
306
|
runtimeFile,
|
|
306
307
|
{
|
|
@@ -314,7 +315,7 @@ router.delete('/delete-table', csrfProtection, async (req, res) => {
|
|
|
314
315
|
}
|
|
315
316
|
}
|
|
316
317
|
)
|
|
317
|
-
let runtimeFileHead = dirRoot
|
|
318
|
+
let runtimeFileHead = path.join(dirRoot, 'public', 'runtime', 'head', table)
|
|
318
319
|
fs.rm(
|
|
319
320
|
runtimeFileHead,
|
|
320
321
|
{
|
|
@@ -328,7 +329,7 @@ router.delete('/delete-table', csrfProtection, async (req, res) => {
|
|
|
328
329
|
}
|
|
329
330
|
}
|
|
330
331
|
)
|
|
331
|
-
let runtimeFileEnd = dirRoot
|
|
332
|
+
let runtimeFileEnd = path.join(dirRoot, 'public', 'runtime', 'end', table)
|
|
332
333
|
fs.rm(
|
|
333
334
|
runtimeFileEnd,
|
|
334
335
|
{
|
|
@@ -348,7 +349,7 @@ router.delete('/delete-table', csrfProtection, async (req, res) => {
|
|
|
348
349
|
where: {route_name: table},
|
|
349
350
|
})
|
|
350
351
|
if (table) {
|
|
351
|
-
const viewsFile = dirRoot
|
|
352
|
+
const viewsFile = path.join(dirRoot, 'views', table)
|
|
352
353
|
fs.rm(
|
|
353
354
|
viewsFile,
|
|
354
355
|
{
|
|
@@ -1046,23 +1047,23 @@ const createAllFiles = async (table) => {
|
|
|
1046
1047
|
})
|
|
1047
1048
|
//create model file
|
|
1048
1049
|
let modelContent = `let MYMODEL = ${Util.newLine} ${JSON.stringify(json,null,2)} ${Util.newLine}module.exports=MYMODEL`
|
|
1049
|
-
fs.writeFileSync(
|
|
1050
|
+
fs.writeFileSync(path.join(dirRoot, 'models', table + '.js'), modelContent)
|
|
1050
1051
|
console.log(`The file model of ${table}.js is saved!`)
|
|
1051
1052
|
//create route file
|
|
1052
|
-
fs.writeFileSync(
|
|
1053
|
+
fs.writeFileSync(path.join(dirRoot, 'routes', table + '.js'), result.router.replace('[[[TABLE_NAME]]]', table))
|
|
1053
1054
|
console.log(`The file model of ${table}.js is saved!`)
|
|
1054
1055
|
//create views file
|
|
1055
|
-
let DIR_VIEW =
|
|
1056
|
+
let DIR_VIEW = path.join(dirRoot, 'views', table)
|
|
1056
1057
|
if (!fs.existsSync(DIR_VIEW)) {
|
|
1057
1058
|
fs.mkdirSync(DIR_VIEW)
|
|
1058
1059
|
}
|
|
1059
|
-
fs.writeFileSync(
|
|
1060
|
+
fs.writeFileSync(path.join(DIR_VIEW, 'index.ejs'), result.index_ejs)
|
|
1060
1061
|
console.log(`The file model of index.ejs is saved!`)
|
|
1061
|
-
fs.writeFileSync(
|
|
1062
|
+
fs.writeFileSync(path.join(DIR_VIEW, 'indexcss.ejs'), result.indexcss_ejs)
|
|
1062
1063
|
console.log(`The file model of indexcss.ejs is saved!`)
|
|
1063
|
-
fs.writeFileSync(
|
|
1064
|
+
fs.writeFileSync(path.join(DIR_VIEW, 'indexjs.ejs'), result.indexjs_ejs)
|
|
1064
1065
|
console.log(`The file model of indexjs.ejs is saved!`)
|
|
1065
|
-
fs.writeFileSync(
|
|
1066
|
+
fs.writeFileSync(path.join(DIR_VIEW, 'view.ejs'), result.view_ejs)
|
|
1066
1067
|
console.log(`The file model of view.ejs is saved!`)
|
|
1067
1068
|
}
|
|
1068
1069
|
|