@opengis/cms 0.0.58 → 0.0.59
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 +131 -131
- package/dist/{ArticlesPage-CFjE_cw_.js → ArticlesPage-BjYzvTWM.js} +3 -3
- package/dist/{CollectionsBreadcrumb-BCxeRikP.js → CollectionsBreadcrumb-HePNJb-d.js} +1 -1
- package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-BJh-tjam.js +53 -0
- package/dist/{Dashboard-C1eGscNd.js → Dashboard-CXkg_pk8.js} +132 -132
- package/dist/{EditCollectionPage-DIr1tdtn.js → EditCollectionPage-CqYHpEON.js} +2 -2
- package/dist/{MenuAddPage-D-p3gFgm.js → MenuAddPage-QTnwCoGh.js} +1 -1
- package/dist/{MenuBody-rN5j4YBu.js → MenuBody-Bi0ONVZf.js} +2 -2
- package/dist/{MenuItemPage-BoJw885D.js → MenuItemPage-B7Y9KFyb.js} +3 -3
- package/dist/{MenuList-DFEBS0NB.js → MenuList-BLIpeqSd.js} +53 -53
- package/dist/{MenuPage-BCZB_S8j.js → MenuPage-3W6jZ15H.js} +1 -1
- package/dist/{MenuWrapper-AZ_8s-zd.js → MenuWrapper-OrOv6sOb.js} +1 -1
- package/dist/{MonacoEditor-Db-3Jc3E.js → MonacoEditor-ByPT8pnv.js} +1 -1
- package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-C8cip9Ci.js +84 -0
- package/dist/{UniversalTable-CzqPG-tY.js → UniversalTable-GBd_pStq.js} +80 -80
- package/dist/{UniversalTablePagination-4gL47A7I.js → UniversalTablePagination-Dw2hc0nc.js} +46 -46
- package/dist/{contentForm-CtMhQTG0.js → contentForm-Buku-lel.js} +1 -1
- package/dist/index.html +29 -29
- package/dist/index.js +5 -5
- package/dist/{vs-builder-monaco-B3Jj0V31.js → vs-builder-monaco-Cw-f19gc.js} +1 -1
- package/input-types.json +9 -9
- package/locales/en.json +815 -815
- package/locales/uk.json +813 -813
- package/module/cms/cls/content.status.json +17 -17
- package/module/cms/cls/user_type.json +9 -9
- package/module/cms/form/admin.users.form.json +77 -77
- package/module/cms/select/cms.page_type.sql +1 -1
- package/module/cms/select/news_tag_id.sql +11 -11
- package/module/cms/table/admin.users.table.json +53 -53
- package/module/cms/table/collection.default.table.json +96 -96
- package/module/cms/table/single.default.table.json +116 -116
- package/package.json +2 -1
- package/plugin.js +43 -43
- package/server/app.js +35 -35
- package/server/config.js +4 -4
- package/server/functions/getContent.js +45 -45
- package/server/functions/getDraftKey.js +22 -22
- package/server/functions/getSearchData.js +31 -31
- package/server/functions/getTags.js +30 -30
- package/server/functions/getUser.js +27 -27
- package/server/functions/utils/mock.reply.js +55 -55
- package/server/index.js +22 -22
- package/server/migrations/fixes.sql +129 -129
- package/server/migrations/site.sql +595 -595
- package/server/plugins/adminHook.js +78 -78
- package/server/plugins/hook.js +59 -59
- package/server/plugins/vite.js +75 -75
- 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 +113 -113
- package/server/routes/cms/controllers/deleteMedia.js +76 -76
- package/server/routes/cms/controllers/downloadMedia.js +84 -84
- package/server/routes/cms/controllers/getContent.js +113 -113
- package/server/routes/cms/controllers/getContentBySlug.js +93 -93
- package/server/routes/cms/controllers/getPermissions.js +15 -15
- package/server/routes/cms/controllers/insertContent.js +217 -217
- package/server/routes/cms/controllers/listMedia.js +155 -155
- package/server/routes/cms/controllers/metadataMedia.js +39 -39
- package/server/routes/cms/controllers/properties.get.js +18 -18
- package/server/routes/cms/controllers/properties.post.js +99 -99
- package/server/routes/cms/controllers/searchContent.js +214 -214
- 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 +266 -266
- package/server/routes/cms/controllers/uploadMedia.js +79 -79
- package/server/routes/cms/functions/getSettings.js +48 -48
- package/server/routes/cms/index.mjs +112 -112
- package/server/routes/cms/utils/additionalData.js +35 -35
- package/server/routes/cms/utils/getCollection.js +89 -89
- package/server/routes/cms/utils/getSingle.js +188 -188
- package/server/routes/cms/utils/inputTypes.js +5 -5
- package/server/routes/cms/utils/insertContentLocalization.js +104 -104
- 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 +160 -160
- 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 +88 -88
- package/server/routes/contentType/controllers/getContentType.js +65 -65
- package/server/routes/contentType/index.mjs +35 -35
- package/server/routes/contentType/utils/updateContents.js +44 -44
- package/server/routes/contentType/utils/updateCustomContentTable.js +53 -53
- 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 +24 -24
- package/server/routes/menu/functions/getMenu.js +50 -50
- 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/utils.d.ts +52 -52
- package/utils.js +8 -8
- package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-umRzB5mY.js +0 -53
- package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-B1DrxmQX.js +0 -84
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import { pgClients, eventStream } from "@opengis/fastify-table/utils.js";
|
|
2
|
-
|
|
3
|
-
import insertContentLocalization from "../utils/insertContentLocalization.js";
|
|
4
|
-
|
|
5
|
-
const getCollectionId = async (id, pg) => pg.query(`select content_type_id as id, table_name as table, columns FROM site.content_types
|
|
6
|
-
where $1 in (content_type_id, name)`, [id]).then(el => el.rows?.[0] || {});
|
|
7
|
-
|
|
8
|
-
function sequence(arr, data, fn) {
|
|
9
|
-
return arr.reduce((promise, id) => promise.then(() => fn({
|
|
10
|
-
...data, id,
|
|
11
|
-
})), Promise.resolve());
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export async function translateContent({
|
|
15
|
-
pg = pgClients.client, query, user,
|
|
16
|
-
}, reply) {
|
|
17
|
-
if (!query.id) {
|
|
18
|
-
return reply.status(400).send({ error: 'not enough query params: id', code: 400 });
|
|
19
|
-
}
|
|
20
|
-
if (!query.to) {
|
|
21
|
-
return reply.status(400).send({ error: 'not enough query params: to', code: 400 });
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const { id, collection = 'pages', from = 'uk', to, nocache, skip } = query;
|
|
25
|
-
const { id: collectionId, table, columns = [] } = await getCollectionId(collection, pg);
|
|
26
|
-
|
|
27
|
-
if (!collectionId) {
|
|
28
|
-
return reply.status(404).send({ error: 'collection not found', code: 404 });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const schemaKeys = columns.filter(el => el.name && el.localization).map(el => el.name);
|
|
32
|
-
|
|
33
|
-
if (!schemaKeys.length) {
|
|
34
|
-
return reply.status(400).send({ error: 'collection does not contain any fields with localization enabled', code: 400 });
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const result = await insertContentLocalization({ table, id, from, to, nocache, skip, schemaKeys, user }, pg);
|
|
38
|
-
|
|
39
|
-
if (result?.error) {
|
|
40
|
-
return reply.status(result.code).send(result);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return result;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export async function translateCollection({
|
|
47
|
-
pg = pgClients.client, params, query, user,
|
|
48
|
-
}, reply) {
|
|
49
|
-
if (!query.to) {
|
|
50
|
-
return reply.status(400).send({ error: 'not enough query params: to', code: 400 });
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const { id: collectionId, table, columns = [] } = await getCollectionId(params.id, pg);
|
|
54
|
-
|
|
55
|
-
if (!collectionId) {
|
|
56
|
-
return reply.status(404).send({ error: 'collection not found', code: 404 });
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const schemaKeys = columns.filter(el => el.name && el.localization).map(el => el.name);
|
|
60
|
-
|
|
61
|
-
if (!schemaKeys.length) {
|
|
62
|
-
return reply.status(400).send({ error: 'collection does not contain any fields with localization enabled', code: 400 });
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const { from = 'uk', to, nocache, debug } = query;
|
|
66
|
-
|
|
67
|
-
const send = eventStream(reply);
|
|
68
|
-
|
|
69
|
-
send(`target localization: ${to}`);
|
|
70
|
-
send(`skip existing: ${!nocache}`);
|
|
71
|
-
send('localization enabled for schema keys: ' + schemaKeys.join(','));
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
const ids = !table
|
|
75
|
-
? await pg.query(`select array_agg(content_id) from site.contents where content_type_id=$1`, [collectionId]).then(el => el.rows?.[0]?.array_agg || [])
|
|
76
|
-
: await pg.query(`select array_agg(id) from data."${table}"`).then(el => el.rows?.[0]?.array_agg || []);
|
|
77
|
-
|
|
78
|
-
const skip = await pg.query('select array_agg(object_id) from site.localization where object_id=any($1::text[]) and split_part(field_key,\':\',2)=$2', [ids, to]).then(el => el.rows?.[0]?.array_agg || []);
|
|
79
|
-
const filteredIds = nocache ? ids : ids.filter(id => !skip.includes(id));
|
|
80
|
-
|
|
81
|
-
send(`target localization already exists for ${ids.length - filteredIds.length}/${ids.length} rows`);
|
|
82
|
-
|
|
83
|
-
await sequence(debug ? filteredIds.slice(0, 1) : filteredIds, { send, pg, from, to, table, nocache: true, skip, schemaKeys, user }, insertContentLocalization);
|
|
84
|
-
return send('translation complete', true);
|
|
85
|
-
} catch (err) {
|
|
86
|
-
return send(err.toString(), true);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
1
|
+
import { pgClients, eventStream } from "@opengis/fastify-table/utils.js";
|
|
2
|
+
|
|
3
|
+
import insertContentLocalization from "../utils/insertContentLocalization.js";
|
|
4
|
+
|
|
5
|
+
const getCollectionId = async (id, pg) => pg.query(`select content_type_id as id, table_name as table, columns FROM site.content_types
|
|
6
|
+
where $1 in (content_type_id, name)`, [id]).then(el => el.rows?.[0] || {});
|
|
7
|
+
|
|
8
|
+
function sequence(arr, data, fn) {
|
|
9
|
+
return arr.reduce((promise, id) => promise.then(() => fn({
|
|
10
|
+
...data, id,
|
|
11
|
+
})), Promise.resolve());
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function translateContent({
|
|
15
|
+
pg = pgClients.client, query, user,
|
|
16
|
+
}, reply) {
|
|
17
|
+
if (!query.id) {
|
|
18
|
+
return reply.status(400).send({ error: 'not enough query params: id', code: 400 });
|
|
19
|
+
}
|
|
20
|
+
if (!query.to) {
|
|
21
|
+
return reply.status(400).send({ error: 'not enough query params: to', code: 400 });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const { id, collection = 'pages', from = 'uk', to, nocache, skip } = query;
|
|
25
|
+
const { id: collectionId, table, columns = [] } = await getCollectionId(collection, pg);
|
|
26
|
+
|
|
27
|
+
if (!collectionId) {
|
|
28
|
+
return reply.status(404).send({ error: 'collection not found', code: 404 });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const schemaKeys = columns.filter(el => el.name && el.localization).map(el => el.name);
|
|
32
|
+
|
|
33
|
+
if (!schemaKeys.length) {
|
|
34
|
+
return reply.status(400).send({ error: 'collection does not contain any fields with localization enabled', code: 400 });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const result = await insertContentLocalization({ table, id, from, to, nocache, skip, schemaKeys, user }, pg);
|
|
38
|
+
|
|
39
|
+
if (result?.error) {
|
|
40
|
+
return reply.status(result.code).send(result);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function translateCollection({
|
|
47
|
+
pg = pgClients.client, params, query, user,
|
|
48
|
+
}, reply) {
|
|
49
|
+
if (!query.to) {
|
|
50
|
+
return reply.status(400).send({ error: 'not enough query params: to', code: 400 });
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const { id: collectionId, table, columns = [] } = await getCollectionId(params.id, pg);
|
|
54
|
+
|
|
55
|
+
if (!collectionId) {
|
|
56
|
+
return reply.status(404).send({ error: 'collection not found', code: 404 });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const schemaKeys = columns.filter(el => el.name && el.localization).map(el => el.name);
|
|
60
|
+
|
|
61
|
+
if (!schemaKeys.length) {
|
|
62
|
+
return reply.status(400).send({ error: 'collection does not contain any fields with localization enabled', code: 400 });
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const { from = 'uk', to, nocache, debug } = query;
|
|
66
|
+
|
|
67
|
+
const send = eventStream(reply);
|
|
68
|
+
|
|
69
|
+
send(`target localization: ${to}`);
|
|
70
|
+
send(`skip existing: ${!nocache}`);
|
|
71
|
+
send('localization enabled for schema keys: ' + schemaKeys.join(','));
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
const ids = !table
|
|
75
|
+
? await pg.query(`select array_agg(content_id) from site.contents where content_type_id=$1`, [collectionId]).then(el => el.rows?.[0]?.array_agg || [])
|
|
76
|
+
: await pg.query(`select array_agg(id) from data."${table}"`).then(el => el.rows?.[0]?.array_agg || []);
|
|
77
|
+
|
|
78
|
+
const skip = await pg.query('select array_agg(object_id) from site.localization where object_id=any($1::text[]) and split_part(field_key,\':\',2)=$2', [ids, to]).then(el => el.rows?.[0]?.array_agg || []);
|
|
79
|
+
const filteredIds = nocache ? ids : ids.filter(id => !skip.includes(id));
|
|
80
|
+
|
|
81
|
+
send(`target localization already exists for ${ids.length - filteredIds.length}/${ids.length} rows`);
|
|
82
|
+
|
|
83
|
+
await sequence(debug ? filteredIds.slice(0, 1) : filteredIds, { send, pg, from, to, table, nocache: true, skip, schemaKeys, user }, insertContentLocalization);
|
|
84
|
+
return send('translation complete', true);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
return send(err.toString(), true);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
90
|
export default null;
|