@opengis/cms 0.0.60 → 0.0.62

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