@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.
Files changed (126) hide show
  1. package/README.md +131 -131
  2. package/dist/{ArticlesPage-CFjE_cw_.js → ArticlesPage-BjYzvTWM.js} +3 -3
  3. package/dist/{CollectionsBreadcrumb-BCxeRikP.js → CollectionsBreadcrumb-HePNJb-d.js} +1 -1
  4. package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-BJh-tjam.js +53 -0
  5. package/dist/{Dashboard-C1eGscNd.js → Dashboard-CXkg_pk8.js} +132 -132
  6. package/dist/{EditCollectionPage-DIr1tdtn.js → EditCollectionPage-CqYHpEON.js} +2 -2
  7. package/dist/{MenuAddPage-D-p3gFgm.js → MenuAddPage-QTnwCoGh.js} +1 -1
  8. package/dist/{MenuBody-rN5j4YBu.js → MenuBody-Bi0ONVZf.js} +2 -2
  9. package/dist/{MenuItemPage-BoJw885D.js → MenuItemPage-B7Y9KFyb.js} +3 -3
  10. package/dist/{MenuList-DFEBS0NB.js → MenuList-BLIpeqSd.js} +53 -53
  11. package/dist/{MenuPage-BCZB_S8j.js → MenuPage-3W6jZ15H.js} +1 -1
  12. package/dist/{MenuWrapper-AZ_8s-zd.js → MenuWrapper-OrOv6sOb.js} +1 -1
  13. package/dist/{MonacoEditor-Db-3Jc3E.js → MonacoEditor-ByPT8pnv.js} +1 -1
  14. package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-C8cip9Ci.js +84 -0
  15. package/dist/{UniversalTable-CzqPG-tY.js → UniversalTable-GBd_pStq.js} +80 -80
  16. package/dist/{UniversalTablePagination-4gL47A7I.js → UniversalTablePagination-Dw2hc0nc.js} +46 -46
  17. package/dist/{contentForm-CtMhQTG0.js → contentForm-Buku-lel.js} +1 -1
  18. package/dist/index.html +29 -29
  19. package/dist/index.js +5 -5
  20. package/dist/{vs-builder-monaco-B3Jj0V31.js → vs-builder-monaco-Cw-f19gc.js} +1 -1
  21. package/input-types.json +9 -9
  22. package/locales/en.json +815 -815
  23. package/locales/uk.json +813 -813
  24. package/module/cms/cls/content.status.json +17 -17
  25. package/module/cms/cls/user_type.json +9 -9
  26. package/module/cms/form/admin.users.form.json +77 -77
  27. package/module/cms/select/cms.page_type.sql +1 -1
  28. package/module/cms/select/news_tag_id.sql +11 -11
  29. package/module/cms/table/admin.users.table.json +53 -53
  30. package/module/cms/table/collection.default.table.json +96 -96
  31. package/module/cms/table/single.default.table.json +116 -116
  32. package/package.json +2 -1
  33. package/plugin.js +43 -43
  34. package/server/app.js +35 -35
  35. package/server/config.js +4 -4
  36. package/server/functions/getContent.js +45 -45
  37. package/server/functions/getDraftKey.js +22 -22
  38. package/server/functions/getSearchData.js +31 -31
  39. package/server/functions/getTags.js +30 -30
  40. package/server/functions/getUser.js +27 -27
  41. package/server/functions/utils/mock.reply.js +55 -55
  42. package/server/index.js +22 -22
  43. package/server/migrations/fixes.sql +129 -129
  44. package/server/migrations/site.sql +595 -595
  45. package/server/plugins/adminHook.js +78 -78
  46. package/server/plugins/hook.js +59 -59
  47. package/server/plugins/vite.js +75 -75
  48. package/server/routes/category/controllers/cms.category.delete.js +21 -21
  49. package/server/routes/category/controllers/cms.category.get.js +17 -17
  50. package/server/routes/category/controllers/cms.category.list.js +16 -16
  51. package/server/routes/category/controllers/cms.category.post.js +21 -21
  52. package/server/routes/category/controllers/cms.category.put.js +23 -23
  53. package/server/routes/category/index.mjs +22 -22
  54. package/server/routes/cms/controllers/cmsStat.js +55 -55
  55. package/server/routes/cms/controllers/cmsSuggest.js +57 -57
  56. package/server/routes/cms/controllers/deleteContent.js +113 -113
  57. package/server/routes/cms/controllers/deleteMedia.js +76 -76
  58. package/server/routes/cms/controllers/downloadMedia.js +84 -84
  59. package/server/routes/cms/controllers/getContent.js +113 -113
  60. package/server/routes/cms/controllers/getContentBySlug.js +93 -93
  61. package/server/routes/cms/controllers/getPermissions.js +15 -15
  62. package/server/routes/cms/controllers/insertContent.js +217 -217
  63. package/server/routes/cms/controllers/listMedia.js +155 -155
  64. package/server/routes/cms/controllers/metadataMedia.js +39 -39
  65. package/server/routes/cms/controllers/properties.get.js +18 -18
  66. package/server/routes/cms/controllers/properties.post.js +99 -99
  67. package/server/routes/cms/controllers/searchContent.js +214 -214
  68. package/server/routes/cms/controllers/setPermissions.js +49 -49
  69. package/server/routes/cms/controllers/translate.js +89 -89
  70. package/server/routes/cms/controllers/updateContent.js +266 -266
  71. package/server/routes/cms/controllers/uploadMedia.js +79 -79
  72. package/server/routes/cms/functions/getSettings.js +48 -48
  73. package/server/routes/cms/index.mjs +112 -112
  74. package/server/routes/cms/utils/additionalData.js +35 -35
  75. package/server/routes/cms/utils/getCollection.js +89 -89
  76. package/server/routes/cms/utils/getSingle.js +188 -188
  77. package/server/routes/cms/utils/inputTypes.js +5 -5
  78. package/server/routes/cms/utils/insertContentLocalization.js +104 -104
  79. package/server/routes/cms/utils/requestTranslation.js +85 -85
  80. package/server/routes/cms/utils/updateLocalization.js +47 -47
  81. package/server/routes/cmsSpace/controllers/deleteSpace.js +25 -25
  82. package/server/routes/cmsSpace/controllers/getSpaces.js +27 -27
  83. package/server/routes/cmsSpace/controllers/insertSpace.js +21 -21
  84. package/server/routes/cmsSpace/controllers/updateSpace.js +23 -23
  85. package/server/routes/cmsSpace/index.mjs +20 -20
  86. package/server/routes/contentType/controllers/addContentType.js +160 -160
  87. package/server/routes/contentType/controllers/contentTypeList.js +54 -54
  88. package/server/routes/contentType/controllers/delContentType.js +75 -75
  89. package/server/routes/contentType/controllers/editContentType.js +88 -88
  90. package/server/routes/contentType/controllers/getContentType.js +65 -65
  91. package/server/routes/contentType/index.mjs +35 -35
  92. package/server/routes/contentType/utils/updateContents.js +44 -44
  93. package/server/routes/contentType/utils/updateCustomContentTable.js +53 -53
  94. package/server/routes/feedback/controllers/email.list.js +24 -24
  95. package/server/routes/feedback/controllers/feedback.js +48 -48
  96. package/server/routes/feedback/controllers/feedback.list.js +37 -37
  97. package/server/routes/feedback/controllers/news.subscriptions.js +44 -44
  98. package/server/routes/feedback/index.mjs +71 -71
  99. package/server/routes/logs/controllers/export.user.logs.js +77 -77
  100. package/server/routes/logs/controllers/user.logs.js +44 -44
  101. package/server/routes/logs/index.mjs +9 -9
  102. package/server/routes/menu/controllers/addMenu.js +37 -37
  103. package/server/routes/menu/controllers/delMenu.js +31 -31
  104. package/server/routes/menu/controllers/editMenu.js +41 -41
  105. package/server/routes/menu/controllers/getMenu.js +24 -24
  106. package/server/routes/menu/functions/getMenu.js +50 -50
  107. package/server/routes/menu/index.mjs +13 -13
  108. package/server/routes/migration/controllers/collectionToCustom.js +137 -137
  109. package/server/routes/migration/index.mjs +8 -8
  110. package/server/routes/root.mjs +8 -8
  111. package/server/routes/tags/controllers/add.tags.js +24 -24
  112. package/server/routes/tags/controllers/del.tags.js +19 -19
  113. package/server/routes/tags/controllers/edit.tags.js +25 -25
  114. package/server/routes/tags/controllers/get.tags.js +15 -15
  115. package/server/routes/tags/index.mjs +14 -14
  116. package/server/templates/cls/cms.category_type.json +9 -9
  117. package/server/templates/cls/cms.content_review_status.json +9 -9
  118. package/server/templates/cls/cms.content_status.json +9 -9
  119. package/server/templates/cls/cms.content_type.json +9 -9
  120. package/server/templates/cls/cms.lang.json +9 -9
  121. package/server/templates/page/login.html +126 -126
  122. package/server/templates/select/core.user_mentioned.sql +1 -1
  123. package/utils.d.ts +52 -52
  124. package/utils.js +8 -8
  125. package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-umRzB5mY.js +0 -53
  126. 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;