@opengis/admin 0.2.44 → 0.2.45

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 (164) hide show
  1. package/README.md +97 -97
  2. package/config.js +4 -4
  3. package/dist/{add-page-CWDoV9kc.js → add-page-CyQgzB5b.js} +38 -36
  4. package/dist/{admin-interface-KnUgFCOB.js → admin-interface-PGZ-BhNF.js} +3 -3
  5. package/dist/{admin-view-DJz2GCsB.js → admin-view-Kx7vbJ3K.js} +2 -2
  6. package/dist/admin.js +1 -1
  7. package/dist/admin.umd.cjs +48 -48
  8. package/dist/assets/logo.svg +41 -41
  9. package/dist/{card-view-CCxJ3jfb.js → card-view-EZQWnsDz.js} +1 -1
  10. package/dist/edit-page-CFbMYyL0.js +125 -0
  11. package/dist/{import-file-CjSMt4zv.js → import-file-D5TQl-P7.js} +3132 -3132
  12. package/dist/style.css +1 -1
  13. package/module/settings/card/admin.accounts.table/index.yml +7 -7
  14. package/module/settings/card/admin.accounts.table/rules.hbs +18 -18
  15. package/module/settings/card/admin.accounts.table/users.hbs +13 -13
  16. package/module/settings/card/admin.roles.table/access.hbs +3 -3
  17. package/module/settings/card/admin.roles.table/general_info.hbs +1 -1
  18. package/module/settings/card/admin.roles.table/index.yml +21 -21
  19. package/module/settings/card/admin.roles.table/users.hbs +6 -6
  20. package/module/settings/card/admin.routes.table/general_info.hbs +13 -13
  21. package/module/settings/card/admin.routes.table/groups.hbs +11 -11
  22. package/module/settings/card/admin.routes.table/index.yml +11 -11
  23. package/module/settings/card/admin.routes.table/users.hbs +16 -16
  24. package/module/settings/card/admin.users.table/context.hbs +14 -14
  25. package/module/settings/card/admin.users.table/general_info.hbs +12 -12
  26. package/module/settings/card/admin.users.table/index.yml +22 -22
  27. package/module/settings/card/admin.users.table/last_login.hbs +9 -9
  28. package/module/settings/card/admin.users.table/logs.hbs +10 -10
  29. package/module/settings/card/admin.users.table/routes.hbs +7 -7
  30. package/module/settings/card/admin.users.table/user_roles.hbs +12 -12
  31. package/module/settings/cls/core.actions.json +17 -17
  32. package/module/settings/cls/core.scope.json +13 -13
  33. package/module/settings/cls/properties.site_status.json +13 -13
  34. package/module/settings/cls/properties.widget_status.json +13 -13
  35. package/module/settings/cls/users.user_type.json +13 -13
  36. package/module/settings/cls/yes_no.json +11 -11
  37. package/module/settings/form/admin.accounts.form.json +13 -13
  38. package/module/settings/form/admin.custom_column.form.json +71 -71
  39. package/module/settings/form/admin.properties.form.json +15 -15
  40. package/module/settings/form/admin.roles.form.json +21 -21
  41. package/module/settings/form/admin.routes.form.json +25 -25
  42. package/module/settings/form/admin.rules.form.json +30 -30
  43. package/module/settings/form/admin.user_properties.form.json +15 -15
  44. package/module/settings/form/admin.user_roles.form.json +13 -13
  45. package/module/settings/form/admin.user_roles_card.form.json +13 -13
  46. package/module/settings/form/admin.users.form.json +153 -153
  47. package/module/settings/form/context.account_grants.form.json +23 -23
  48. package/module/settings/form/context.account_users.form.json +12 -12
  49. package/module/settings/form/user.user_roles.form.json +13 -13
  50. package/module/settings/interface/admin.properties.json +4 -4
  51. package/module/settings/interface/admin.roles.json +4 -4
  52. package/module/settings/interface/admin.routes.json +4 -4
  53. package/module/settings/interface/admin.users.json +4 -4
  54. package/module/settings/menu.json +84 -84
  55. package/module/settings/select/core.routes.sql +1 -1
  56. package/module/settings/select/core.user_mentioned.sql +1 -1
  57. package/module/settings/select/core.user_uid.sql +1 -1
  58. package/module/settings/table/admin.accounts.table.json +42 -42
  59. package/module/settings/table/admin.custom_column.table.json +99 -99
  60. package/module/settings/table/admin.properties.table.json +39 -39
  61. package/module/settings/table/admin.roles.table.json +64 -64
  62. package/module/settings/table/admin.routes.table.json +73 -73
  63. package/module/settings/table/admin.rules.table.json +76 -76
  64. package/module/settings/table/admin.user_properties.table.json +34 -34
  65. package/module/settings/table/admin.user_roles.table.json +72 -72
  66. package/module/settings/table/admin.users.table.json +132 -132
  67. package/module/settings/table/context.account_grants.table.json +67 -67
  68. package/module/settings/table/context.account_users.table.json +37 -37
  69. package/package.json +2 -2
  70. package/plugin.js +29 -29
  71. package/server/helpers/core/badge.js +16 -16
  72. package/server/helpers/core/buttonHelper.js +21 -21
  73. package/server/helpers/core/select.js +48 -48
  74. package/server/helpers/core/token.js +18 -18
  75. package/server/helpers/index.js +29 -29
  76. package/server/helpers/list/buttonHelper.js +21 -21
  77. package/server/helpers/list/tableList.js +81 -81
  78. package/server/helpers/list/utils/button.js +5 -5
  79. package/server/helpers/temp/contentList.js +58 -58
  80. package/server/helpers/temp/ifCond.js +101 -101
  81. package/server/helpers/utils/button.js +5 -5
  82. package/server/helpers/utils/buttonAdd.js +5 -5
  83. package/server/helpers/utils/buttonDel.js +5 -5
  84. package/server/helpers/utils/buttonEdit.js +5 -5
  85. package/server/plugins/access/funcs/getAdminAccess.js +12 -12
  86. package/server/plugins/access/index.mjs +6 -6
  87. package/server/plugins/adminHook.js +81 -81
  88. package/server/plugins/cron.js +10 -10
  89. package/server/plugins/docs.js +28 -28
  90. package/server/plugins/hook.js +236 -236
  91. package/server/plugins/vite.js +71 -71
  92. package/server/routes/access/controllers/access.group.js +29 -29
  93. package/server/routes/access/controllers/access.group.post.js +49 -49
  94. package/server/routes/access/index.mjs +8 -8
  95. package/server/routes/access/schema.mjs +57 -57
  96. package/server/routes/calendar/controllers/calendar.data.js +87 -87
  97. package/server/routes/calendar/index.mjs +7 -7
  98. package/server/routes/calendar/schema.js +21 -21
  99. package/server/routes/data/controllers/cardData.js +106 -106
  100. package/server/routes/data/controllers/cardTabData.js +49 -49
  101. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  102. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  103. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  104. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  105. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  106. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  107. package/server/routes/data/controllers/tableData.js +29 -29
  108. package/server/routes/data/controllers/tableDataId.js +27 -27
  109. package/server/routes/data/controllers/tableFilter.js +68 -68
  110. package/server/routes/data/controllers/tokenInfo.js +9 -9
  111. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  112. package/server/routes/data/controllers/utils/conditions.js +20 -20
  113. package/server/routes/data/controllers/utils/getColumns.js +8 -8
  114. package/server/routes/data/index.mjs +19 -19
  115. package/server/routes/data/schema.js +54 -54
  116. package/server/routes/menu/controllers/getMenu.js +58 -58
  117. package/server/routes/menu/index.mjs +5 -5
  118. package/server/routes/notifications/controllers/readNotifications.js +27 -27
  119. package/server/routes/notifications/controllers/testEmail.js +35 -35
  120. package/server/routes/notifications/controllers/userNotifications.js +53 -53
  121. package/server/routes/notifications/funcs/addNotification.js +21 -21
  122. package/server/routes/notifications/funcs/sendNotification.js +92 -92
  123. package/server/routes/notifications/hook/onWidgetSet.js +57 -57
  124. package/server/routes/notifications/index.mjs +27 -27
  125. package/server/routes/notifications/schema.js +16 -16
  126. package/server/routes/properties/controllers/admin.properties.get.js +29 -29
  127. package/server/routes/properties/controllers/user.properties.get.js +30 -30
  128. package/server/routes/properties/controllers/user.properties.post.js +30 -30
  129. package/server/routes/properties/funcs/getSettings.js +56 -56
  130. package/server/routes/properties/funcs/setSettings.js +44 -44
  131. package/server/routes/properties/funcs/utils/dataInsert.js +26 -26
  132. package/server/routes/properties/index.mjs +14 -14
  133. package/server/routes/properties/schema.js +10 -10
  134. package/server/routes/root.mjs +3 -3
  135. package/server/routes/templates/controllers/getTemplate.js +49 -49
  136. package/server/routes/templates/index.mjs +16 -16
  137. package/server/routes/templates/schema.js +8 -8
  138. package/server/routes/user/controllers/user.cls.id.js +14 -14
  139. package/server/routes/user/controllers/user.cls.js +71 -71
  140. package/server/routes/user/controllers/user.cls.post.js +52 -52
  141. package/server/routes/user/controllers/user.info.js +17 -17
  142. package/server/routes/user/schema.js +14 -14
  143. package/server/routes/widget/controllers/utils/historyFormat.js +75 -75
  144. package/server/routes/widget/controllers/utils/obj2db.js +13 -13
  145. package/server/routes/widget/controllers/widget.del.js +41 -41
  146. package/server/routes/widget/controllers/widget.get.js +96 -96
  147. package/server/routes/widget/controllers/widget.set.js +76 -76
  148. package/server/routes/widget/index.mjs +11 -11
  149. package/server/routes/widget/schema.js +12 -12
  150. package/server/templates/cls/itree.recrzone_category.json +73 -73
  151. package/server/templates/cls/test.json +9 -9
  152. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  153. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  154. package/server/templates/form/cp_building.form.json +32 -32
  155. package/server/templates/form/form-user-pass.json +10 -10
  156. package/server/templates/form/form-user_group.json +39 -39
  157. package/server/templates/form/form-users.json +156 -156
  158. package/server/templates/form/user_group_access.form.json +22 -22
  159. package/server/templates/select/account_id.json +2 -2
  160. package/server/templates/table/gis.dataset.table.json +43 -43
  161. package/server/templates/table/management.user_group.table.json +112 -112
  162. package/server/templates/table/management.users.table.json +126 -126
  163. package/utils.js +29 -29
  164. package/dist/edit-page-CSEzk0Pj.js +0 -121
@@ -1,82 +1,82 @@
1
- import { handlebarsSync, setToken, handlebars } from '@opengis/fastify-table/utils.js'
2
-
3
- import button from '../utils/button.js';
4
- import buttonDel from '../utils/buttonDel.js';
5
-
6
- function format(d, key, data, hash) {
7
- if (!key?.includes) return '';
8
- if (d === true) return 'Так';
9
- if (d === false) return 'Ні';
10
- if (key === 'actions') {
11
- return (hash.form ? button(d, 'редагувати') : '') + buttonDel(d)
12
- }
13
- if (key.includes('{{')) {
14
- return handlebarsSync.compile(key)(data);
15
- }
16
- if (!d) return '-';
17
- return d;
18
- }
19
- export default async function tableList(data, opt) {
20
- const { hash } = opt;
21
- // no data
22
-
23
- if (hash.nodata && !data?.length) {
24
- const noDataText = typeof hash.nodata == 'string' ? hash.nodata : '<div class="bg-gray-200 text-center p-6 rounded-xl"><h3 class="text-lg font-semibold">Інформація відсутня</h3></div>';
25
- return noDataText
26
- }
27
- if (!hash.columns) return 'columns empty'
28
- const keys = hash.columns.split(hash.divider || ',').map(el => hash.comma ? el.trim().replace(new RegExp(hash.comma, 'g'), ',') : el.trim()).concat(hash.uid && hash.table && hash.id && !hash.noactions ? ['Дії', 'actions'] : []);
29
-
30
- const result = [];
31
- result.push('<thead> <tr>');
32
-
33
- // thead
34
- const skip = {}
35
- for (let i = 0; i < keys.length; i += 2) {
36
- const name = keys[i];
37
-
38
- // check hbs
39
- if (name.includes('{{')) {
40
- console.log(hash)
41
- }
42
- const nameHBS = name.includes('{{') ? handlebarsSync.compile(name)({ ...data, hash }) : false;
43
- // console.log(name, data, nameHBS)
44
- skip[name] = name.includes('{{') && !nameHBS;
45
- if (skip[name]) continue;
46
-
47
- result.push(`<th scope="col">
48
- <div class="px-[20px] py-[12px] text-start text-nowrap font-medium text-[14px] text-[#6B7280] ">
49
- ${nameHBS || name}
50
- </div>
51
- </th>`)
52
- }
53
- result.push('</tr></thead>');
54
-
55
- // body
56
- for (let k = 0; k < data.length; k += 1) {
57
- const row = data[k];
58
- result.push('<tbody><tr class="border-t border-gray-200">');
59
- const obj = { form: hash.form, table: hash.table, id: row[hash.id] }
60
- const token = hash.table ? setToken({ ids: [JSON.stringify(obj)], uid: hash.uid, array: 1 })[0] : null;
61
- for (let i = 0; i < keys.length; i += 2) {
62
-
63
- const name = keys[i];
64
- const key = keys[i + 1];
65
- if (!key) continue;
66
- if (skip[name]) continue;
67
-
68
- const tokenData = key == 'actions' ? token : null;
69
- const d1 = ['{{format', '{{select', '{{badge', '{{#ifCond'].filter(el => key.includes(el)).length ? await handlebars.compile(key)({ ...row, token, hash }) || '-' : null
70
- result.push(`<td >
71
- <div class="px-[20px] py-[12px] text-start font-medium text-[14px] text-black">${d1 || format(tokenData || row[key], key, row, hash)}</div>
72
- </td>`);
73
-
74
- }
75
- // action token
76
-
77
- result.push('</tr></tbody>');
78
- }
79
-
80
-
81
- return '<table class="min-w-full divide-y divide-gray-200"> ' + result.join('') + '</table>';
1
+ import { handlebarsSync, setToken, handlebars } from '@opengis/fastify-table/utils.js'
2
+
3
+ import button from '../utils/button.js';
4
+ import buttonDel from '../utils/buttonDel.js';
5
+
6
+ function format(d, key, data, hash) {
7
+ if (!key?.includes) return '';
8
+ if (d === true) return 'Так';
9
+ if (d === false) return 'Ні';
10
+ if (key === 'actions') {
11
+ return (hash.form ? button(d, 'редагувати') : '') + buttonDel(d)
12
+ }
13
+ if (key.includes('{{')) {
14
+ return handlebarsSync.compile(key)(data);
15
+ }
16
+ if (!d) return '-';
17
+ return d;
18
+ }
19
+ export default async function tableList(data, opt) {
20
+ const { hash } = opt;
21
+ // no data
22
+
23
+ if (hash.nodata && !data?.length) {
24
+ const noDataText = typeof hash.nodata == 'string' ? hash.nodata : '<div class="bg-gray-200 text-center p-6 rounded-xl"><h3 class="text-lg font-semibold">Інформація відсутня</h3></div>';
25
+ return noDataText
26
+ }
27
+ if (!hash.columns) return 'columns empty'
28
+ const keys = hash.columns.split(hash.divider || ',').map(el => hash.comma ? el.trim().replace(new RegExp(hash.comma, 'g'), ',') : el.trim()).concat(hash.uid && hash.table && hash.id && !hash.noactions ? ['Дії', 'actions'] : []);
29
+
30
+ const result = [];
31
+ result.push('<thead> <tr>');
32
+
33
+ // thead
34
+ const skip = {}
35
+ for (let i = 0; i < keys.length; i += 2) {
36
+ const name = keys[i];
37
+
38
+ // check hbs
39
+ if (name.includes('{{')) {
40
+ console.log(hash)
41
+ }
42
+ const nameHBS = name.includes('{{') ? handlebarsSync.compile(name)({ ...data, hash }) : false;
43
+ // console.log(name, data, nameHBS)
44
+ skip[name] = name.includes('{{') && !nameHBS;
45
+ if (skip[name]) continue;
46
+
47
+ result.push(`<th scope="col">
48
+ <div class="px-[20px] py-[12px] text-start text-nowrap font-medium text-[14px] text-[#6B7280] ">
49
+ ${nameHBS || name}
50
+ </div>
51
+ </th>`)
52
+ }
53
+ result.push('</tr></thead>');
54
+
55
+ // body
56
+ for (let k = 0; k < data.length; k += 1) {
57
+ const row = data[k];
58
+ result.push('<tbody><tr class="border-t border-gray-200">');
59
+ const obj = { form: hash.form, table: hash.table, id: row[hash.id] }
60
+ const token = hash.table ? setToken({ ids: [JSON.stringify(obj)], uid: hash.uid, array: 1 })[0] : null;
61
+ for (let i = 0; i < keys.length; i += 2) {
62
+
63
+ const name = keys[i];
64
+ const key = keys[i + 1];
65
+ if (!key) continue;
66
+ if (skip[name]) continue;
67
+
68
+ const tokenData = key == 'actions' ? token : null;
69
+ const d1 = ['{{format', '{{select', '{{badge', '{{#ifCond'].filter(el => key.includes(el)).length ? await handlebars.compile(key)({ ...row, token, hash }) || '-' : null
70
+ result.push(`<td >
71
+ <div class="px-[20px] py-[12px] text-start font-medium text-[14px] text-black">${d1 || format(tokenData || row[key], key, row, hash)}</div>
72
+ </td>`);
73
+
74
+ }
75
+ // action token
76
+
77
+ result.push('</tr></tbody>');
78
+ }
79
+
80
+
81
+ return '<table class="min-w-full divide-y divide-gray-200"> ' + result.join('') + '</table>';
82
82
  }
@@ -1,6 +1,6 @@
1
-
2
-
3
- export default function button(token, title) {
4
- return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
- class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Додати'}</button>`;
1
+
2
+
3
+ export default function button(token, title) {
4
+ return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
+ class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Додати'}</button>`;
6
6
  }
@@ -1,58 +1,58 @@
1
-
2
-
3
- import { getPG, handlebars } from '@opengis/fastify-table/utils.js';
4
-
5
- const maxLimit = 100;
6
-
7
- /**
8
- * Відображення даних з таблиці або запиту до БД на сторінці. За запитом отримуємо масив json із рядків бази даних.
9
- * Є можливість застосування синтаксису sql у змінній query для формування запиту до БД.
10
- *
11
- * @summary Відображення контенту на сторінці. Є можливість застосування синтаксису sql у змінній query.
12
- * @priority 5
13
- * @type helper
14
- * @alias contentList
15
- * @example
16
- * {{#contentList table="help.doc_function" query="type='api'" sql1=1 limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
17
- * @example
18
- * {{#contentList table="help.doc_function" sql1=1 query="name like '%form%'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
19
- * @example
20
- * {{#contentList table="help.article" sql=1 query="module='CORE'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
21
- * @param {String} table Таблиця в базі або конфіг таблиця
22
- * @param {String} query Запит до бази
23
- * @param {Number} limit Кількість рядків на сторінці
24
- * @param {String} sql Вивід sql запиту
25
- * @returns {String} Returns HTML
26
- */
27
- export default async function contentList(options) {
28
- const { table, limit, query, order, sql, debug } = options.hash;
29
- if (!table) { return 'Table undefined'; }
30
-
31
- try {
32
- const pg = getPG();
33
-
34
- const hasBrackets = table.trim().startsWith('(') && table.trim().endsWith(')');
35
-
36
- const where = `where ${query ? query : '1=1'}`;
37
- const _limit = limit !== undefined && limit !== null ? Math.min(maxLimit, +limit) : 15;
38
- const _order = order ? `order by ${order}` : '';
39
-
40
- const SQL = `select *,${pg.pk[table] || '1'}::text from ${hasBrackets ? table + ' t' : table} ${where} ${_order} limit ${_limit}`;
41
- const compiledSQL = SQL.includes('{{') ? await handlebars.compile(SQL)({ ...options.data.root, hash: options.hash, opt: options.hash }) : SQL;
42
-
43
- if (sql) {
44
- return compiledSQL.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;')
45
- .replaceAll("'", '&#039;');
46
- }
47
- const { rows } = await pg.query(compiledSQL);
48
- const data = { rows, total: rows.length, ...options.data?.root };
49
-
50
- if (debug) {
51
- return JSON.stringify(data, null, 2);
52
- }
53
-
54
- return options.fn(data);
55
- } catch (err) {
56
- return `Сталася помилка, зверніться до відділу підтримки.<!-- err: ${err.toString()} -->`;
57
- }
58
- };
1
+
2
+
3
+ import { getPG, handlebars } from '@opengis/fastify-table/utils.js';
4
+
5
+ const maxLimit = 100;
6
+
7
+ /**
8
+ * Відображення даних з таблиці або запиту до БД на сторінці. За запитом отримуємо масив json із рядків бази даних.
9
+ * Є можливість застосування синтаксису sql у змінній query для формування запиту до БД.
10
+ *
11
+ * @summary Відображення контенту на сторінці. Є можливість застосування синтаксису sql у змінній query.
12
+ * @priority 5
13
+ * @type helper
14
+ * @alias contentList
15
+ * @example
16
+ * {{#contentList table="help.doc_function" query="type='api'" sql1=1 limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
17
+ * @example
18
+ * {{#contentList table="help.doc_function" sql1=1 query="name like '%form%'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
19
+ * @example
20
+ * {{#contentList table="help.article" sql=1 query="module='CORE'" limit=1}}{{#each rows}}{{{JSON 2 this}}}{{/each}}{{/contentList}}
21
+ * @param {String} table Таблиця в базі або конфіг таблиця
22
+ * @param {String} query Запит до бази
23
+ * @param {Number} limit Кількість рядків на сторінці
24
+ * @param {String} sql Вивід sql запиту
25
+ * @returns {String} Returns HTML
26
+ */
27
+ export default async function contentList(options) {
28
+ const { table, limit, query, order, sql, debug } = options.hash;
29
+ if (!table) { return 'Table undefined'; }
30
+
31
+ try {
32
+ const pg = getPG();
33
+
34
+ const hasBrackets = table.trim().startsWith('(') && table.trim().endsWith(')');
35
+
36
+ const where = `where ${query ? query : '1=1'}`;
37
+ const _limit = limit !== undefined && limit !== null ? Math.min(maxLimit, +limit) : 15;
38
+ const _order = order ? `order by ${order}` : '';
39
+
40
+ const SQL = `select *,${pg.pk[table] || '1'}::text from ${hasBrackets ? table + ' t' : table} ${where} ${_order} limit ${_limit}`;
41
+ const compiledSQL = SQL.includes('{{') ? await handlebars.compile(SQL)({ ...options.data.root, hash: options.hash, opt: options.hash }) : SQL;
42
+
43
+ if (sql) {
44
+ return compiledSQL.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;')
45
+ .replaceAll("'", '&#039;');
46
+ }
47
+ const { rows } = await pg.query(compiledSQL);
48
+ const data = { rows, total: rows.length, ...options.data?.root };
49
+
50
+ if (debug) {
51
+ return JSON.stringify(data, null, 2);
52
+ }
53
+
54
+ return options.fn(data);
55
+ } catch (err) {
56
+ return `Сталася помилка, зверніться до відділу підтримки.<!-- err: ${err.toString()} -->`;
57
+ }
58
+ };
@@ -1,101 +1,101 @@
1
- /**
2
- * Перетинає два масиви
3
- *
4
- * @example
5
- * // returns [1, 4, 5, 6]
6
- * intersect([1,2,3,4,5,6],[1,4,5,6,7,8,9,11])
7
- * @param {Array} a
8
- * @param {Array} b
9
- * @returns {Array} Returns new intersect array
10
- */
11
- function intersect(a, b) {
12
- let aN = a; let bN = b;
13
- if (b.length > a.length) {
14
- [aN, bN] = [bN, aN];
15
- }
16
- return aN.filter((e) => bN.includes(e));
17
- }
18
-
19
- /**
20
- * Створення шаблона або його частини внаслідок перевірки значення із веб-запиту та заздалегідь прописаного значення.
21
- * Дозволяє змінювати наповнення сторінки через ряд перевірок. Є можливість внесення додаткової умови - що робити, коли умова не виконується.
22
- *
23
- * @summary Перевірка двох значень та виконання коду при виконанні умови, а також у всіх інших випадках.
24
- * @priority 5
25
- * @alias ifCond
26
- * @type helper
27
- * @tag condition
28
- * @example
29
- * {{#ifCond @root.req.domain 'in' 'help.softpro.ua,123'}} {{select user.uid data="get_full_uid"}} {{^}} Умова не виконана {{/ifCond}}
30
- * @example
31
- * {{#ifCond "1234567890" 'in' @root.user.group_list}} 1=1 {{^}} uid='{{uid}}' {{/ifCond}}
32
- * @example
33
- * {{#ifCond 'debug' 'in' @root.setting.core.setting}}Умова виконана{{^}}Не виконана умова{{/ifCond}}
34
- * @param {Array} args Параметри для значень і умов
35
- * @param {Array} args[0]] Перше значення
36
- * @param {Array} args[1]] Оператор
37
- * @param {Array} args[2]] Друге значення
38
- * @returns {String} Returns HTML
39
- */
40
- export default function ifCond(v1, operator, v2, options) {
41
- const __obj = this;
42
-
43
- switch (operator) {
44
- case '==':
45
- return (v1 == v2) ? options.fn(__obj) : options.inverse(__obj);
46
- case '!=':
47
- return (v1 != v2) ? options.fn(__obj) : options.inverse(__obj);
48
- case '===':
49
- return (v1 === v2) ? options.fn(__obj) : options.inverse(__obj);
50
- case '!==':
51
- return (v1 !== v2) ? options.fn(__obj) : options.inverse(__obj);
52
- case '&&':
53
- return (v1 && v2) ? options.fn(__obj) : options.inverse(__obj);
54
- case '||':
55
- return (v1 || v2) ? options.fn(__obj) : options.inverse(__obj);
56
- case '<':
57
- return (v1 < v2) ? options.fn(__obj) : options.inverse(__obj);
58
- case '<=':
59
- return (v1 <= v2) ? options.fn(__obj) : options.inverse(__obj);
60
- case '>':
61
- return (v1 > v2) ? options.fn(__obj) : options.inverse(__obj);
62
- case '>=':
63
- return (v1 >= v2) ? options.fn(__obj) : options.inverse(__obj);
64
- case '&':
65
- return intersect(v1, v2).length !== 0
66
- ? options.fn(__obj)
67
- : options.inverse(__obj);
68
- case '!~':
69
- return (v1 || '').indexOf(v2) === -1
70
- ? options.fn(__obj)
71
- : options.inverse(__obj);
72
- case '~':
73
- return (v1 || '').indexOf(v2) !== -1
74
- ? options.fn(__obj)
75
- : options.inverse(__obj);
76
- case 'period':
77
- return (new Date(v1) < new Date() && new Date(v2) > new Date())
78
- ? options.fn(__obj)
79
- : options.inverse(__obj);
80
- case 'in': {
81
- if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
82
-
83
- if (Array.isArray(v1)) {
84
- return v1.some((value) => v2.includes(value.toString()))
85
- ? options.fn(__obj)
86
- : options.inverse(__obj);
87
- }
88
- return v2.includes(v1?.toString())
89
- ? options.fn(__obj)
90
- : options.inverse(__obj);
91
- }
92
- case 'not in': {
93
- if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
94
- return !v2.includes(v1?.toString())
95
- ? options.fn(__obj)
96
- : options.inverse(__obj);
97
- }
98
- default:
99
- return options.inverse(__obj);
100
- }
101
- }
1
+ /**
2
+ * Перетинає два масиви
3
+ *
4
+ * @example
5
+ * // returns [1, 4, 5, 6]
6
+ * intersect([1,2,3,4,5,6],[1,4,5,6,7,8,9,11])
7
+ * @param {Array} a
8
+ * @param {Array} b
9
+ * @returns {Array} Returns new intersect array
10
+ */
11
+ function intersect(a, b) {
12
+ let aN = a; let bN = b;
13
+ if (b.length > a.length) {
14
+ [aN, bN] = [bN, aN];
15
+ }
16
+ return aN.filter((e) => bN.includes(e));
17
+ }
18
+
19
+ /**
20
+ * Створення шаблона або його частини внаслідок перевірки значення із веб-запиту та заздалегідь прописаного значення.
21
+ * Дозволяє змінювати наповнення сторінки через ряд перевірок. Є можливість внесення додаткової умови - що робити, коли умова не виконується.
22
+ *
23
+ * @summary Перевірка двох значень та виконання коду при виконанні умови, а також у всіх інших випадках.
24
+ * @priority 5
25
+ * @alias ifCond
26
+ * @type helper
27
+ * @tag condition
28
+ * @example
29
+ * {{#ifCond @root.req.domain 'in' 'help.softpro.ua,123'}} {{select user.uid data="get_full_uid"}} {{^}} Умова не виконана {{/ifCond}}
30
+ * @example
31
+ * {{#ifCond "1234567890" 'in' @root.user.group_list}} 1=1 {{^}} uid='{{uid}}' {{/ifCond}}
32
+ * @example
33
+ * {{#ifCond 'debug' 'in' @root.setting.core.setting}}Умова виконана{{^}}Не виконана умова{{/ifCond}}
34
+ * @param {Array} args Параметри для значень і умов
35
+ * @param {Array} args[0]] Перше значення
36
+ * @param {Array} args[1]] Оператор
37
+ * @param {Array} args[2]] Друге значення
38
+ * @returns {String} Returns HTML
39
+ */
40
+ export default function ifCond(v1, operator, v2, options) {
41
+ const __obj = this;
42
+
43
+ switch (operator) {
44
+ case '==':
45
+ return (v1 == v2) ? options.fn(__obj) : options.inverse(__obj);
46
+ case '!=':
47
+ return (v1 != v2) ? options.fn(__obj) : options.inverse(__obj);
48
+ case '===':
49
+ return (v1 === v2) ? options.fn(__obj) : options.inverse(__obj);
50
+ case '!==':
51
+ return (v1 !== v2) ? options.fn(__obj) : options.inverse(__obj);
52
+ case '&&':
53
+ return (v1 && v2) ? options.fn(__obj) : options.inverse(__obj);
54
+ case '||':
55
+ return (v1 || v2) ? options.fn(__obj) : options.inverse(__obj);
56
+ case '<':
57
+ return (v1 < v2) ? options.fn(__obj) : options.inverse(__obj);
58
+ case '<=':
59
+ return (v1 <= v2) ? options.fn(__obj) : options.inverse(__obj);
60
+ case '>':
61
+ return (v1 > v2) ? options.fn(__obj) : options.inverse(__obj);
62
+ case '>=':
63
+ return (v1 >= v2) ? options.fn(__obj) : options.inverse(__obj);
64
+ case '&':
65
+ return intersect(v1, v2).length !== 0
66
+ ? options.fn(__obj)
67
+ : options.inverse(__obj);
68
+ case '!~':
69
+ return (v1 || '').indexOf(v2) === -1
70
+ ? options.fn(__obj)
71
+ : options.inverse(__obj);
72
+ case '~':
73
+ return (v1 || '').indexOf(v2) !== -1
74
+ ? options.fn(__obj)
75
+ : options.inverse(__obj);
76
+ case 'period':
77
+ return (new Date(v1) < new Date() && new Date(v2) > new Date())
78
+ ? options.fn(__obj)
79
+ : options.inverse(__obj);
80
+ case 'in': {
81
+ if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
82
+
83
+ if (Array.isArray(v1)) {
84
+ return v1.some((value) => v2.includes(value.toString()))
85
+ ? options.fn(__obj)
86
+ : options.inverse(__obj);
87
+ }
88
+ return v2.includes(v1?.toString())
89
+ ? options.fn(__obj)
90
+ : options.inverse(__obj);
91
+ }
92
+ case 'not in': {
93
+ if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
94
+ return !v2.includes(v1?.toString())
95
+ ? options.fn(__obj)
96
+ : options.inverse(__obj);
97
+ }
98
+ default:
99
+ return options.inverse(__obj);
100
+ }
101
+ }
@@ -1,6 +1,6 @@
1
-
2
-
3
- export default function button(token, title) {
4
- return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
- class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Редагувати'}</button>`;
1
+
2
+
3
+ export default function button(token, title) {
4
+ return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
+ class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Редагувати'}</button>`;
6
6
  }
@@ -1,6 +1,6 @@
1
-
2
-
3
- export default function button(token, title) {
4
- return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
- class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Додати'}</button>`;
1
+
2
+
3
+ export default function button(token, title) {
4
+ return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
+ class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Додати'}</button>`;
6
6
  }
@@ -1,6 +1,6 @@
1
-
2
-
3
- export default function button(token, title) {
4
- return `<button onclick="window.v3plugin.$api({ api: '/api/table/${token}', method:'delete',confirm: { title:'Підтвердити операцію', text: 'Ви впевнені що хочете вилучити запис?', cancel: 'Скасувати', confirm : 'Виконати'} })"
5
- class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-red-600 border border-transparent rounded-lg gap-x-2 hover:bg-red-700 hover:text-white">${title || 'Вилучити'}</button>`;
1
+
2
+
3
+ export default function button(token, title) {
4
+ return `<button onclick="window.v3plugin.$api({ api: '/api/table/${token}', method:'delete',confirm: { title:'Підтвердити операцію', text: 'Ви впевнені що хочете вилучити запис?', cancel: 'Скасувати', confirm : 'Виконати'} })"
5
+ class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-red-600 border border-transparent rounded-lg gap-x-2 hover:bg-red-700 hover:text-white">${title || 'Вилучити'}</button>`;
6
6
  }
@@ -1,6 +1,6 @@
1
-
2
-
3
- export default function button(token, title) {
4
- return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
- class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Редагувати'}</button>`;
1
+
2
+
3
+ export default function button(token, title) {
4
+ return `<button onclick="window.v3plugin.$form({ token: '${token}' })"
5
+ class="inline-flex items-center px-2 py-1 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white">${title || 'Редагувати'}</button>`;
6
6
  }
@@ -1,13 +1,13 @@
1
- import { config } from '@opengis/fastify-table/utils.js';
2
-
3
- export default async function getAdminAccess({
4
- id, user = {},
5
- }) {
6
- if (!id) {
7
- return { message: 'not enough params: id', status: 400 };
8
- }
9
-
10
- if (!config?.local && !['admin'].includes(user.user_type, user.type)) {
11
- return { message: 'access restricted: admin', status: 403 };
12
- }
1
+ import { config } from '@opengis/fastify-table/utils.js';
2
+
3
+ export default async function getAdminAccess({
4
+ id, user = {},
5
+ }) {
6
+ if (!id) {
7
+ return { message: 'not enough params: id', status: 400 };
8
+ }
9
+
10
+ if (!config?.local && !['admin'].includes(user.user_type, user.type)) {
11
+ return { message: 'access restricted: admin', status: 403 };
12
+ }
13
13
  }
@@ -1,6 +1,6 @@
1
- import getAdminAccess from './funcs/getAdminAccess.js';
2
-
3
- async function plugin(fastify) {
4
- // fastify.decorate('getAdminAccess', getAdminAccess);
5
- }
6
- export default plugin;
1
+ import getAdminAccess from './funcs/getAdminAccess.js';
2
+
3
+ async function plugin(fastify) {
4
+ // fastify.decorate('getAdminAccess', getAdminAccess);
5
+ }
6
+ export default plugin;