@opengis/cms 0.0.26 → 0.0.28
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/README.md +98 -98
- package/dist/index-W-qQIppj-DunG40EG.js +2452 -0
- package/dist/index.html +28 -28
- package/dist/index.js +12683 -6702
- package/dist/index.umd.cjs +87 -41
- package/dist/style.css +1 -0
- package/package.json +68 -68
- package/plugin.js +76 -76
- package/server/app.js +35 -35
- package/server/config.js +4 -4
- package/server/functions/getDraftKey.js +22 -22
- package/server/index.js +22 -22
- package/server/migrations/fixes.sql +123 -123
- package/server/migrations/site.sql +545 -545
- package/server/plugins/adminHook.js +78 -78
- package/server/plugins/hook.js +59 -59
- package/server/plugins/vite.js +84 -84
- package/server/routes/category/controllers/cms.category.delete.js +21 -21
- package/server/routes/category/controllers/cms.category.get.js +17 -17
- package/server/routes/category/controllers/cms.category.list.js +16 -16
- package/server/routes/category/controllers/cms.category.post.js +21 -21
- package/server/routes/category/controllers/cms.category.put.js +23 -23
- package/server/routes/category/index.mjs +22 -22
- package/server/routes/cms/controllers/cmsStat.js +55 -55
- package/server/routes/cms/controllers/cmsSuggest.js +57 -57
- package/server/routes/cms/controllers/deleteContent.js +114 -114
- package/server/routes/cms/controllers/deleteMedia.js +75 -75
- package/server/routes/cms/controllers/downloadMedia.js +48 -48
- package/server/routes/cms/controllers/getContent.js +110 -110
- package/server/routes/cms/controllers/getContentBySlug.js +95 -95
- package/server/routes/cms/controllers/getPermissions.js +15 -15
- package/server/routes/cms/controllers/insertContent.js +218 -218
- package/server/routes/cms/controllers/listMedia.js +93 -93
- package/server/routes/cms/controllers/metadataMedia.js +38 -38
- package/server/routes/cms/controllers/properties.get.js +53 -53
- package/server/routes/cms/controllers/properties.post.js +99 -99
- package/server/routes/cms/controllers/searchContent.js +205 -205
- package/server/routes/cms/controllers/setPermissions.js +49 -49
- package/server/routes/cms/controllers/translate.js +89 -89
- package/server/routes/cms/controllers/updateContent.js +238 -238
- package/server/routes/cms/controllers/uploadMedia.js +78 -78
- package/server/routes/cms/index.mjs +114 -114
- package/server/routes/cms/utils/additionalData.js +35 -35
- package/server/routes/cms/utils/getCollection.js +81 -81
- package/server/routes/cms/utils/getSingle.js +187 -187
- package/server/routes/cms/utils/insertContentLocalization.js +86 -86
- package/server/routes/cms/utils/requestTranslation.js +85 -85
- package/server/routes/cms/utils/updateLocalization.js +47 -47
- package/server/routes/cmsSpace/controllers/deleteSpace.js +25 -25
- package/server/routes/cmsSpace/controllers/getSpaces.js +27 -27
- package/server/routes/cmsSpace/controllers/insertSpace.js +21 -21
- package/server/routes/cmsSpace/controllers/updateSpace.js +23 -23
- package/server/routes/cmsSpace/index.mjs +20 -20
- package/server/routes/contentType/controllers/addContentType.js +162 -162
- package/server/routes/contentType/controllers/contentTypeList.js +54 -54
- package/server/routes/contentType/controllers/delContentType.js +75 -75
- package/server/routes/contentType/controllers/editContentType.js +61 -61
- package/server/routes/contentType/controllers/getContentType.js +37 -37
- package/server/routes/contentType/index.mjs +35 -35
- package/server/routes/contentType/utils/updateContents.js +28 -28
- package/server/routes/contentType/utils/updateCustomContentTable.js +55 -55
- package/server/routes/feedback/controllers/email.list.js +24 -24
- package/server/routes/feedback/controllers/feedback.js +48 -48
- package/server/routes/feedback/controllers/feedback.list.js +37 -37
- package/server/routes/feedback/controllers/news.subscriptions.js +44 -44
- package/server/routes/feedback/index.mjs +71 -71
- package/server/routes/logs/controllers/export.user.logs.js +77 -77
- package/server/routes/logs/controllers/user.logs.js +44 -44
- package/server/routes/logs/index.mjs +9 -9
- package/server/routes/menu/controllers/addMenu.js +37 -37
- package/server/routes/menu/controllers/delMenu.js +31 -31
- package/server/routes/menu/controllers/editMenu.js +41 -41
- package/server/routes/menu/controllers/getMenu.js +42 -42
- package/server/routes/menu/index.mjs +13 -13
- package/server/routes/migration/controllers/collectionToCustom.js +137 -137
- package/server/routes/migration/index.mjs +8 -8
- package/server/routes/root.mjs +8 -8
- package/server/routes/tags/controllers/add.tags.js +24 -24
- package/server/routes/tags/controllers/del.tags.js +19 -19
- package/server/routes/tags/controllers/edit.tags.js +25 -25
- package/server/routes/tags/controllers/get.tags.js +15 -15
- package/server/routes/tags/index.mjs +14 -14
- package/server/templates/cls/cms.category_type.json +9 -9
- package/server/templates/cls/cms.content_review_status.json +9 -9
- package/server/templates/cls/cms.content_status.json +9 -9
- package/server/templates/cls/cms.content_type.json +9 -9
- package/server/templates/cls/cms.lang.json +9 -9
- package/server/templates/page/login.html +126 -126
- package/server/templates/select/core.user_mentioned.sql +1 -1
- package/dist/index-W-qQIppj-DRzFSjU1.js +0 -2452
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
|
|
4
|
-
import { config, getFolder, pgClients } from "@opengis/fastify-table/utils.js";
|
|
5
|
-
|
|
6
|
-
const rootDir = getFolder(config, 'local');
|
|
7
|
-
|
|
8
|
-
export default async function metadataMedia({
|
|
9
|
-
routeOptions = {}, pg = pgClients.client, params = {},
|
|
10
|
-
}, reply) {
|
|
11
|
-
if (!params?.id) {
|
|
12
|
-
return reply.status(400).send('not enough params: id');
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (!pg.pk?.['site.media']) {
|
|
16
|
-
return reply.status(404).send('table not found');
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const data = await pg.query(
|
|
20
|
-
'select * from site.media where media_id = $1 and url is not null',
|
|
21
|
-
[params.id],
|
|
22
|
-
).then(el => el.rows?.[0]);
|
|
23
|
-
|
|
24
|
-
if (!data) {
|
|
25
|
-
return reply.status(404).send('media not found: ' + params.id);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const filepath = path.join(rootDir, data.url);
|
|
29
|
-
|
|
30
|
-
Object.assign(data, {
|
|
31
|
-
url: `${routeOptions.url.replace(':id', params.id)}/file`,
|
|
32
|
-
preview: `${routeOptions.url.replace(':id', params.id)}/preview`,
|
|
33
|
-
filepath: data.url,
|
|
34
|
-
exists: existsSync(filepath),
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
return reply.status(200).send(data);
|
|
38
|
-
}
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
|
|
4
|
+
import { config, getFolder, pgClients } from "@opengis/fastify-table/utils.js";
|
|
5
|
+
|
|
6
|
+
const rootDir = getFolder(config, 'local');
|
|
7
|
+
|
|
8
|
+
export default async function metadataMedia({
|
|
9
|
+
routeOptions = {}, pg = pgClients.client, params = {},
|
|
10
|
+
}, reply) {
|
|
11
|
+
if (!params?.id) {
|
|
12
|
+
return reply.status(400).send('not enough params: id');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (!pg.pk?.['site.media']) {
|
|
16
|
+
return reply.status(404).send('table not found');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const data = await pg.query(
|
|
20
|
+
'select * from site.media where media_id = $1 and url is not null',
|
|
21
|
+
[params.id],
|
|
22
|
+
).then(el => el.rows?.[0]);
|
|
23
|
+
|
|
24
|
+
if (!data) {
|
|
25
|
+
return reply.status(404).send('media not found: ' + params.id);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const filepath = path.join(rootDir, data.url);
|
|
29
|
+
|
|
30
|
+
Object.assign(data, {
|
|
31
|
+
url: `${routeOptions.url.replace(':id', params.id)}/file`,
|
|
32
|
+
preview: `${routeOptions.url.replace(':id', params.id)}/preview`,
|
|
33
|
+
filepath: data.url,
|
|
34
|
+
exists: existsSync(filepath),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return reply.status(200).send(data);
|
|
38
|
+
}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
/* eslint-disable camelcase */
|
|
2
|
-
import { pgClients } from '@opengis/fastify-table/utils.js';
|
|
3
|
-
|
|
4
|
-
export default async function getAppSettings(
|
|
5
|
-
{
|
|
6
|
-
pg = pgClients.client,
|
|
7
|
-
query,
|
|
8
|
-
params,
|
|
9
|
-
user = {},
|
|
10
|
-
},
|
|
11
|
-
reply
|
|
12
|
-
) {
|
|
13
|
-
const t1 = Date.now();
|
|
14
|
-
|
|
15
|
-
if (!pg) {
|
|
16
|
-
return reply.status(500).send("empty pg");
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (!pg.pk?.["admin.properties"]) {
|
|
20
|
-
return reply.status(404).send("properties table not found");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (params?.entity === "user" && !user.uid) {
|
|
24
|
-
return reply.status(401).send("unauthorized");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const { uid } = user || {};
|
|
28
|
-
|
|
29
|
-
const args =
|
|
30
|
-
params?.entity === "user" ? [user.uid] : [params?.entity || "app"];
|
|
31
|
-
|
|
32
|
-
const { rows = [] } = await pg.query(
|
|
33
|
-
"select property_key as key, property_text, property_json from admin.properties where property_entity=$1",
|
|
34
|
-
args
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
const settings = rows
|
|
38
|
-
.filter((row) =>
|
|
39
|
-
typeof query?.keys === "string" ? query.keys.includes(row.key) : true
|
|
40
|
-
)
|
|
41
|
-
.reduce(
|
|
42
|
-
(
|
|
43
|
-
acc,
|
|
44
|
-
{ key, property_text, property_json }
|
|
45
|
-
) => ({
|
|
46
|
-
...acc,
|
|
47
|
-
[key]: property_text || property_json,
|
|
48
|
-
}),
|
|
49
|
-
{}
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
return reply.status(200).send({ time: Date.now() - t1, uid, settings });
|
|
53
|
-
}
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { pgClients } from '@opengis/fastify-table/utils.js';
|
|
3
|
+
|
|
4
|
+
export default async function getAppSettings(
|
|
5
|
+
{
|
|
6
|
+
pg = pgClients.client,
|
|
7
|
+
query,
|
|
8
|
+
params,
|
|
9
|
+
user = {},
|
|
10
|
+
},
|
|
11
|
+
reply
|
|
12
|
+
) {
|
|
13
|
+
const t1 = Date.now();
|
|
14
|
+
|
|
15
|
+
if (!pg) {
|
|
16
|
+
return reply.status(500).send("empty pg");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (!pg.pk?.["admin.properties"]) {
|
|
20
|
+
return reply.status(404).send("properties table not found");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (params?.entity === "user" && !user.uid) {
|
|
24
|
+
return reply.status(401).send("unauthorized");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const { uid } = user || {};
|
|
28
|
+
|
|
29
|
+
const args =
|
|
30
|
+
params?.entity === "user" ? [user.uid] : [params?.entity || "app"];
|
|
31
|
+
|
|
32
|
+
const { rows = [] } = await pg.query(
|
|
33
|
+
"select property_key as key, property_text, property_json from admin.properties where property_entity=$1",
|
|
34
|
+
args
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const settings = rows
|
|
38
|
+
.filter((row) =>
|
|
39
|
+
typeof query?.keys === "string" ? query.keys.includes(row.key) : true
|
|
40
|
+
)
|
|
41
|
+
.reduce(
|
|
42
|
+
(
|
|
43
|
+
acc,
|
|
44
|
+
{ key, property_text, property_json }
|
|
45
|
+
) => ({
|
|
46
|
+
...acc,
|
|
47
|
+
[key]: property_text || property_json,
|
|
48
|
+
}),
|
|
49
|
+
{}
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
return reply.status(200).send({ time: Date.now() - t1, uid, settings });
|
|
53
|
+
}
|
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
import { config, logger, dataInsert, pgClients } from '@opengis/fastify-table/utils.js';
|
|
2
|
-
|
|
3
|
-
function checkValueType(val) {
|
|
4
|
-
if (val && typeof val === "object") {
|
|
5
|
-
return "property_json";
|
|
6
|
-
}
|
|
7
|
-
if (
|
|
8
|
-
val &&
|
|
9
|
-
typeof val === "number" &&
|
|
10
|
-
!/\D/.test(val.toString()) &&
|
|
11
|
-
val.toString().length < 10
|
|
12
|
-
) {
|
|
13
|
-
return "property_int";
|
|
14
|
-
}
|
|
15
|
-
return "property_text";
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default async function postAppSettings(
|
|
19
|
-
{
|
|
20
|
-
pg = pgClients.client,
|
|
21
|
-
body,
|
|
22
|
-
user,
|
|
23
|
-
params,
|
|
24
|
-
},
|
|
25
|
-
reply
|
|
26
|
-
) {
|
|
27
|
-
const { uid } = user || {};
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
(!params?.entity || params.entity === "app") &&
|
|
31
|
-
!user?.user_type?.includes?.("admin") &&
|
|
32
|
-
!config.local
|
|
33
|
-
) {
|
|
34
|
-
return reply.status(403).send("access restricted");
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (!pg) {
|
|
38
|
-
return reply.status(500).send("empty pg");
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!pg?.pk?.["admin.properties"]) {
|
|
42
|
-
return reply.status(404).send("table not found");
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const { key, val } = body;
|
|
46
|
-
|
|
47
|
-
if ((!key || !val) && !Object.keys(body).length) {
|
|
48
|
-
return reply.status(400).send("not enough body params");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const keys = Object.keys(body);
|
|
52
|
-
|
|
53
|
-
const entity = params?.entity === "user" ? user.uid : params?.entity || "app";
|
|
54
|
-
|
|
55
|
-
const client = await pg.connect();
|
|
56
|
-
|
|
57
|
-
try {
|
|
58
|
-
await client.query("begin;");
|
|
59
|
-
|
|
60
|
-
await client.query(
|
|
61
|
-
"delete from admin.properties where property_entity=$1 and property_key=any($2)",
|
|
62
|
-
[entity, keys]
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
await Promise.all(
|
|
66
|
-
keys
|
|
67
|
-
.filter((el) => body[el])
|
|
68
|
-
.map(async (el) => {
|
|
69
|
-
const columnType = checkValueType(body[el]);
|
|
70
|
-
|
|
71
|
-
await dataInsert({
|
|
72
|
-
pg: client,
|
|
73
|
-
table: "admin.properties",
|
|
74
|
-
data: {
|
|
75
|
-
property_key: el,
|
|
76
|
-
[columnType]: body[el],
|
|
77
|
-
property_entity: entity,
|
|
78
|
-
},
|
|
79
|
-
uid,
|
|
80
|
-
});
|
|
81
|
-
})
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
await client.query("commit;");
|
|
85
|
-
|
|
86
|
-
return reply.status(200).send("ok");
|
|
87
|
-
} catch (err) {
|
|
88
|
-
logger.file("properties/error", {
|
|
89
|
-
error: err.toString(),
|
|
90
|
-
stack: err.stack,
|
|
91
|
-
body,
|
|
92
|
-
user,
|
|
93
|
-
entity,
|
|
94
|
-
});
|
|
95
|
-
return reply.status(500).send(err.toString());
|
|
96
|
-
} finally {
|
|
97
|
-
client.release();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
1
|
+
import { config, logger, dataInsert, pgClients } from '@opengis/fastify-table/utils.js';
|
|
2
|
+
|
|
3
|
+
function checkValueType(val) {
|
|
4
|
+
if (val && typeof val === "object") {
|
|
5
|
+
return "property_json";
|
|
6
|
+
}
|
|
7
|
+
if (
|
|
8
|
+
val &&
|
|
9
|
+
typeof val === "number" &&
|
|
10
|
+
!/\D/.test(val.toString()) &&
|
|
11
|
+
val.toString().length < 10
|
|
12
|
+
) {
|
|
13
|
+
return "property_int";
|
|
14
|
+
}
|
|
15
|
+
return "property_text";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default async function postAppSettings(
|
|
19
|
+
{
|
|
20
|
+
pg = pgClients.client,
|
|
21
|
+
body,
|
|
22
|
+
user,
|
|
23
|
+
params,
|
|
24
|
+
},
|
|
25
|
+
reply
|
|
26
|
+
) {
|
|
27
|
+
const { uid } = user || {};
|
|
28
|
+
|
|
29
|
+
if (
|
|
30
|
+
(!params?.entity || params.entity === "app") &&
|
|
31
|
+
!user?.user_type?.includes?.("admin") &&
|
|
32
|
+
!config.local
|
|
33
|
+
) {
|
|
34
|
+
return reply.status(403).send("access restricted");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (!pg) {
|
|
38
|
+
return reply.status(500).send("empty pg");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!pg?.pk?.["admin.properties"]) {
|
|
42
|
+
return reply.status(404).send("table not found");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const { key, val } = body;
|
|
46
|
+
|
|
47
|
+
if ((!key || !val) && !Object.keys(body).length) {
|
|
48
|
+
return reply.status(400).send("not enough body params");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const keys = Object.keys(body);
|
|
52
|
+
|
|
53
|
+
const entity = params?.entity === "user" ? user.uid : params?.entity || "app";
|
|
54
|
+
|
|
55
|
+
const client = await pg.connect();
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
await client.query("begin;");
|
|
59
|
+
|
|
60
|
+
await client.query(
|
|
61
|
+
"delete from admin.properties where property_entity=$1 and property_key=any($2)",
|
|
62
|
+
[entity, keys]
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
await Promise.all(
|
|
66
|
+
keys
|
|
67
|
+
.filter((el) => body[el])
|
|
68
|
+
.map(async (el) => {
|
|
69
|
+
const columnType = checkValueType(body[el]);
|
|
70
|
+
|
|
71
|
+
await dataInsert({
|
|
72
|
+
pg: client,
|
|
73
|
+
table: "admin.properties",
|
|
74
|
+
data: {
|
|
75
|
+
property_key: el,
|
|
76
|
+
[columnType]: body[el],
|
|
77
|
+
property_entity: entity,
|
|
78
|
+
},
|
|
79
|
+
uid,
|
|
80
|
+
});
|
|
81
|
+
})
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
await client.query("commit;");
|
|
85
|
+
|
|
86
|
+
return reply.status(200).send("ok");
|
|
87
|
+
} catch (err) {
|
|
88
|
+
logger.file("properties/error", {
|
|
89
|
+
error: err.toString(),
|
|
90
|
+
stack: err.stack,
|
|
91
|
+
body,
|
|
92
|
+
user,
|
|
93
|
+
entity,
|
|
94
|
+
});
|
|
95
|
+
return reply.status(500).send(err.toString());
|
|
96
|
+
} finally {
|
|
97
|
+
client.release();
|
|
98
|
+
}
|
|
99
|
+
}
|