@opengis/admin 0.2.130 → 0.2.131

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. package/README.md +97 -97
  2. package/config.js +4 -4
  3. package/dist/{add-page-B9j1X71R.js → add-page-B5Yx_gil.js} +1 -1
  4. package/dist/{admin-interface-DZ_JAuHP.js → admin-interface-CFR2WRun.js} +2 -2
  5. package/dist/{admin-view-CHq_9aht.js → admin-view-CE-4P8V-.js} +2 -2
  6. package/dist/admin.js +1 -1
  7. package/dist/admin.umd.cjs +50 -50
  8. package/dist/assets/logo.svg +41 -41
  9. package/dist/{card-view-DHcY64lQ.js → card-view-BbBU9cWN.js} +1 -1
  10. package/dist/{edit-page-DPeBqCDl.js → edit-page-D3q9Dp_D.js} +1 -1
  11. package/dist/{import-file-BWQ2bV93.js → import-file-C1vBdCEv.js} +2338 -2326
  12. package/dist/{profile-page-vqy75jEB.js → profile-page-CVV-ZW1M.js} +1 -1
  13. package/dist/style.css +1 -1
  14. package/module/settings/card/admin.accounts.table/index.yml +7 -7
  15. package/module/settings/card/admin.accounts.table/rules.hbs +18 -18
  16. package/module/settings/card/admin.accounts.table/users.hbs +13 -13
  17. package/module/settings/card/admin.routes.table/groups.hbs +11 -11
  18. package/module/settings/card/admin.routes.table/users.hbs +16 -16
  19. package/module/settings/cls/core.actions.json +17 -17
  20. package/module/settings/cls/core.scope.json +13 -13
  21. package/module/settings/cls/properties.site_status.json +13 -13
  22. package/module/settings/cls/properties.widget_status.json +13 -13
  23. package/module/settings/cls/users.user_type.json +13 -13
  24. package/module/settings/cls/yes_no.json +11 -11
  25. package/module/settings/form/admin.accounts.form.json +13 -13
  26. package/module/settings/form/admin.properties.form.json +15 -15
  27. package/module/settings/form/admin.roles.form.json +21 -21
  28. package/module/settings/form/admin.user_properties.form.json +15 -15
  29. package/module/settings/form/admin.user_roles_card.form.json +13 -13
  30. package/module/settings/interface/admin.properties.json +4 -4
  31. package/module/settings/interface/admin.roles.json +4 -4
  32. package/module/settings/interface/admin.routes.json +4 -4
  33. package/module/settings/interface/admin.users.json +4 -4
  34. package/module/settings/select/core.routes.sql +1 -1
  35. package/module/settings/select/core.user_mentioned.sql +1 -1
  36. package/module/settings/select/core.user_uid.sql +1 -1
  37. package/module/settings/table/admin.properties.table.json +39 -39
  38. package/module/settings/table/admin.user_properties.table.json +34 -34
  39. package/package.json +1 -1
  40. package/plugin.js +29 -29
  41. package/server/helpers/core/badge.js +16 -16
  42. package/server/helpers/core/buttonHelper.js +21 -21
  43. package/server/helpers/core/coalesce.js +7 -7
  44. package/server/helpers/core/select.js +48 -48
  45. package/server/helpers/core/token.js +18 -18
  46. package/server/helpers/index.js +36 -35
  47. package/server/helpers/list/buttonHelper.js +21 -21
  48. package/server/helpers/list/utils/button.js +5 -5
  49. package/server/helpers/temp/contentList.js +58 -58
  50. package/server/helpers/temp/ifCond.js +101 -101
  51. package/server/helpers/utils/button.js +5 -5
  52. package/server/helpers/utils/mdToHTML.js +17 -17
  53. package/server/plugins/access/index.mjs +6 -6
  54. package/server/plugins/adminHook.js +81 -81
  55. package/server/plugins/cron.js +10 -10
  56. package/server/plugins/docs.js +28 -28
  57. package/server/routes/access/controllers/access.group.js +29 -29
  58. package/server/routes/access/controllers/access.group.post.js +54 -54
  59. package/server/routes/access/index.mjs +11 -11
  60. package/server/routes/access/schema.mjs +67 -67
  61. package/server/routes/calendar/controllers/calendar.data.js +125 -125
  62. package/server/routes/calendar/index.mjs +7 -7
  63. package/server/routes/calendar/schema.js +21 -21
  64. package/server/routes/data/controllers/cardTabData.js +49 -49
  65. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  66. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  67. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  68. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  69. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  70. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  71. package/server/routes/data/controllers/tableData.js +31 -31
  72. package/server/routes/data/controllers/tableDataId.js +27 -27
  73. package/server/routes/data/controllers/tableFilter.js +108 -108
  74. package/server/routes/data/controllers/tokenInfo.js +9 -9
  75. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  76. package/server/routes/data/controllers/utils/conditions.js +20 -20
  77. package/server/routes/data/controllers/utils/getColumns.js +8 -8
  78. package/server/routes/data/index.mjs +20 -20
  79. package/server/routes/data/schema.js +54 -54
  80. package/server/routes/menu/index.mjs +5 -5
  81. package/server/routes/notifications/controllers/readNotifications.js +27 -27
  82. package/server/routes/notifications/controllers/testEmail.js +35 -35
  83. package/server/routes/notifications/controllers/userNotifications.js +53 -53
  84. package/server/routes/notifications/funcs/addNotification.js +21 -21
  85. package/server/routes/notifications/funcs/sendNotification.js +92 -92
  86. package/server/routes/notifications/hook/onWidgetSet.js +56 -56
  87. package/server/routes/notifications/index.mjs +26 -26
  88. package/server/routes/notifications/schema.js +16 -16
  89. package/server/routes/print/controllers/cardPrint.js +134 -134
  90. package/server/routes/properties/funcs/getSettings.js +56 -56
  91. package/server/routes/properties/schema.js +10 -10
  92. package/server/routes/report/controllers/data.js +76 -76
  93. package/server/routes/report/controllers/list.js +18 -18
  94. package/server/routes/report/index.mjs +7 -7
  95. package/server/routes/report/utils/formatValue.js +179 -179
  96. package/server/routes/root.mjs +3 -3
  97. package/server/routes/templates/controllers/getTemplate.js +49 -49
  98. package/server/routes/templates/index.mjs +16 -16
  99. package/server/routes/templates/schema.js +8 -8
  100. package/server/routes/user/controllers/user.cls.id.js +14 -14
  101. package/server/routes/user/controllers/user.cls.js +71 -71
  102. package/server/routes/user/controllers/user.info.js +17 -17
  103. package/server/routes/user/schema.js +14 -14
  104. package/server/routes/widget/controllers/widget.del.js +47 -47
  105. package/server/routes/widget/controllers/widget.set.js +84 -84
  106. package/server/routes/widget/hook/onWidgetSet.js +12 -12
  107. package/server/routes/widget/index.mjs +16 -16
  108. package/server/routes/widget/schema.js +12 -12
  109. package/server/templates/cls/itree.recrzone_category.json +73 -73
  110. package/server/templates/cls/test.json +9 -9
  111. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  112. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  113. package/server/templates/form/form-user-pass.json +10 -10
  114. package/server/templates/form/form-user_group.json +39 -39
  115. package/server/templates/form/form-users.json +156 -156
  116. package/server/templates/form/user_group_access.form.json +22 -22
  117. package/server/templates/select/account_id.json +2 -2
  118. package/server/templates/table/gis.dataset.table.json +43 -43
  119. package/server/templates/table/management.user_group.table.json +112 -112
  120. package/server/templates/table/management.users.table.json +126 -126
  121. package/utils.js +29 -29
@@ -1,56 +1,56 @@
1
- import { getMeta } from '@opengis/fastify-table/utils.js';
2
-
3
- const match = {
4
- property_key: 'key',
5
- property_json: 'json',
6
- property_int: 'int',
7
- property_text: 'text',
8
- };
9
-
10
- function getQuery({
11
- table, columns = [], key, uid,
12
- }) {
13
- const columnList = columns?.filter((el) => match[el?.name]).map((el) => el?.name).map((el) => `${el} as ${match[el]}`);
14
- const sql = `select ${columnList.join(',')} from ${table} where 1=1`;
15
-
16
- if (table === 'admin.user_properties') {
17
- const args = [uid, key].filter((el) => el);
18
- const q = sql + (uid ? ' and uid=$1' : '') + (key ? ` and property_key=$${args.indexOf(key) + 1}` : '');
19
- return { q, args };
20
- }
21
- const args = [key].filter((el) => el);
22
- const q = sql + (key ? ` and property_key=$${args.indexOf(key) + 1}` : '');
23
- return { q, args };
24
- }
25
-
26
- export default async function getSettings({
27
- pg, redis, json, key, table = 'admin.properties', uid,
28
- }) {
29
- const { columns = [] } = await getMeta({ table });
30
-
31
- const { q, args } = getQuery({
32
- table, columns, key, uid,
33
- });
34
-
35
- const { rows } = await pg.query(q, args);
36
- const data = rows?.reduce((acc, curr) => Object.assign(acc, { [curr.key]: curr.json || curr.int || curr.text }), {});
37
-
38
- const jsonData = Object.keys(data || {}).reduce((acc, curr) => {
39
- const [ckey, csubkey] = curr.split('.');
40
- if (!csubkey) return Object.assign(acc, { [curr]: data[curr] });
41
- if (!acc[ckey]) Object.assign(acc, { [ckey]: {} });
42
- Object.assign(acc[ckey], { [csubkey]: data[curr] });
43
- return acc;
44
- }, {});
45
-
46
- // save both
47
- if (redis) {
48
- const keyCacheJSON = `${pg.options?.database}:settings:${key || 'all'}:json:${table}`;
49
- await redis.set(keyCacheJSON, JSON.stringify(jsonData));
50
-
51
- const keyCachePlain = `${pg.options?.database}:settings:${key || 'all'}:plain:${table}`;
52
- await redis.set(keyCachePlain, JSON.stringify(data));
53
- }
54
-
55
- return json ? jsonData : data;
56
- }
1
+ import { getMeta } from '@opengis/fastify-table/utils.js';
2
+
3
+ const match = {
4
+ property_key: 'key',
5
+ property_json: 'json',
6
+ property_int: 'int',
7
+ property_text: 'text',
8
+ };
9
+
10
+ function getQuery({
11
+ table, columns = [], key, uid,
12
+ }) {
13
+ const columnList = columns?.filter((el) => match[el?.name]).map((el) => el?.name).map((el) => `${el} as ${match[el]}`);
14
+ const sql = `select ${columnList.join(',')} from ${table} where 1=1`;
15
+
16
+ if (table === 'admin.user_properties') {
17
+ const args = [uid, key].filter((el) => el);
18
+ const q = sql + (uid ? ' and uid=$1' : '') + (key ? ` and property_key=$${args.indexOf(key) + 1}` : '');
19
+ return { q, args };
20
+ }
21
+ const args = [key].filter((el) => el);
22
+ const q = sql + (key ? ` and property_key=$${args.indexOf(key) + 1}` : '');
23
+ return { q, args };
24
+ }
25
+
26
+ export default async function getSettings({
27
+ pg, redis, json, key, table = 'admin.properties', uid,
28
+ }) {
29
+ const { columns = [] } = await getMeta({ table });
30
+
31
+ const { q, args } = getQuery({
32
+ table, columns, key, uid,
33
+ });
34
+
35
+ const { rows } = await pg.query(q, args);
36
+ const data = rows?.reduce((acc, curr) => Object.assign(acc, { [curr.key]: curr.json || curr.int || curr.text }), {});
37
+
38
+ const jsonData = Object.keys(data || {}).reduce((acc, curr) => {
39
+ const [ckey, csubkey] = curr.split('.');
40
+ if (!csubkey) return Object.assign(acc, { [curr]: data[curr] });
41
+ if (!acc[ckey]) Object.assign(acc, { [ckey]: {} });
42
+ Object.assign(acc[ckey], { [csubkey]: data[curr] });
43
+ return acc;
44
+ }, {});
45
+
46
+ // save both
47
+ if (redis) {
48
+ const keyCacheJSON = `${pg.options?.database}:settings:${key || 'all'}:json:${table}`;
49
+ await redis.set(keyCacheJSON, JSON.stringify(jsonData));
50
+
51
+ const keyCachePlain = `${pg.options?.database}:settings:${key || 'all'}:plain:${table}`;
52
+ await redis.set(keyCachePlain, JSON.stringify(data));
53
+ }
54
+
55
+ return json ? jsonData : data;
56
+ }
@@ -1,11 +1,11 @@
1
- const propertiesSchema = {
2
- params: {
3
- key: { type: 'string', pattern: '^([\\d\\w._]+)$' },
4
- },
5
- querystring: {
6
- json: { type: 'string', pattern: '^([\\d\\w]+)$' },
7
- },
8
- };
9
-
10
- export default null;
1
+ const propertiesSchema = {
2
+ params: {
3
+ key: { type: 'string', pattern: '^([\\d\\w._]+)$' },
4
+ },
5
+ querystring: {
6
+ json: { type: 'string', pattern: '^([\\d\\w]+)$' },
7
+ },
8
+ };
9
+
10
+ export default null;
11
11
  export { propertiesSchema }
@@ -1,76 +1,76 @@
1
- import { handlebars, pgClients, getTemplate, metaFormat, handlebarsSync } from '@opengis/fastify-table/utils.js';
2
-
3
- import getFilterQuery from '../utils/getFilterQuery.js';
4
-
5
- const maxLimit = 100;
6
-
7
- export default async function reportData({
8
- pg = pgClients.client, params = {}, query = {}, user = {},
9
- }) {
10
- if (!params?.name) {
11
- return { message: 'not enough params: name', status: 400 };
12
- }
13
-
14
- const loadTemplate = await getTemplate('report', params.name);
15
-
16
- if (!loadTemplate?.sql) {
17
- return { message: `report not found: ${params.name}`, status: 404 };
18
- }
19
-
20
- const { uid } = user;
21
-
22
- const { kpi, sql, meta, filters } = loadTemplate;
23
- const { date, columns: metaColumns } = meta || {};
24
-
25
- const granularity = query.granularity && date && false ? `date_trunc('${query.granularity}',${date})::date::text` : null;
26
- const groupby = [meta?.groupby, granularity].filter(el => el).join(',');
27
-
28
- const period = query.period && date ? `${date}=${query.period}` : null;
29
- const filter = [query.filter, period].filter(el => el).join(';');
30
-
31
- const limit = Math.min(maxLimit, +(query.limit || 20));
32
- const offset = query.page && query.page > 0 ? (query.page - 1) * limit : 0;
33
-
34
- const kpiColumns = kpi ? kpi?.map(el => `${el.sql || 'count(*)'} as "${el.name}"`)?.join(',') : '';
35
- const columnsList = metaColumns || loadTemplate.columns?.map(el => el.name)?.join(',');
36
-
37
- const qMeta = await handlebars.compile(sql)({ user, uid });
38
- const { fields = [] } = await pg.query(`select * from (${qMeta})q limit 0`);
39
-
40
- const where = filter ? getFilterQuery({ pg, filter, fields, filterList: filters })?.map?.(el => el.query)?.join(' and ') : null;
41
-
42
- const qAgg = `select ${kpiColumns || ''} from (${qMeta})q where ${where || '1=1'}`;
43
- const q = `select ${columnsList || '*'} from (${qMeta})q where ${where || '1=1'} ${groupby ? `group by ${groupby}` : ''} limit ${limit} offset ${offset}`;
44
-
45
- if (query.sql && user?.user_type?.includes('admin')) return `${qAgg};${q}`;
46
-
47
- const kpiData = await pg.query(qAgg).then(el => el.rows?.[0] || {});
48
- kpi?.forEach(el => Object.assign(el, { count: kpiData[el.name] || '0' }));
49
-
50
- const { rows = [] } = await pg.query(q);
51
-
52
- const cls = meta?.cls || loadTemplate.columns
53
- ?.filter(el => (el.option || el.data))
54
- ?.reduce((acc, curr) => Object.assign(acc, { [curr.name]: (curr.option || curr.data) }), {});
55
-
56
- const titles = meta?.titles
57
- || loadTemplate.columns?.reduce((acc, curr) => Object.assign(acc, { [curr.name]: curr.title }), {});
58
-
59
- await metaFormat({ rows, cls, sufix: true });
60
-
61
- const columns = loadTemplate.columns
62
- || fields.map(el => ({
63
- name: el.name,
64
- title: titles?.[el.name] || el.name,
65
- type: cls?.[el.name] ? 'Autocomplete' : 'Text',
66
- format: pg.pgType?.[el.dataTypeID],
67
- data: cls?.[el.name],
68
- }));
69
-
70
- return {
71
- q: user?.user_type?.includes('admin') ? q : undefined,
72
- kpi,
73
- rows,
74
- columns,
75
- };
76
- }
1
+ import { handlebars, pgClients, getTemplate, metaFormat, handlebarsSync } from '@opengis/fastify-table/utils.js';
2
+
3
+ import getFilterQuery from '../utils/getFilterQuery.js';
4
+
5
+ const maxLimit = 100;
6
+
7
+ export default async function reportData({
8
+ pg = pgClients.client, params = {}, query = {}, user = {},
9
+ }) {
10
+ if (!params?.name) {
11
+ return { message: 'not enough params: name', status: 400 };
12
+ }
13
+
14
+ const loadTemplate = await getTemplate('report', params.name);
15
+
16
+ if (!loadTemplate?.sql) {
17
+ return { message: `report not found: ${params.name}`, status: 404 };
18
+ }
19
+
20
+ const { uid } = user;
21
+
22
+ const { kpi, sql, meta, filters } = loadTemplate;
23
+ const { date, columns: metaColumns } = meta || {};
24
+
25
+ const granularity = query.granularity && date && false ? `date_trunc('${query.granularity}',${date})::date::text` : null;
26
+ const groupby = [meta?.groupby, granularity].filter(el => el).join(',');
27
+
28
+ const period = query.period && date ? `${date}=${query.period}` : null;
29
+ const filter = [query.filter, period].filter(el => el).join(';');
30
+
31
+ const limit = Math.min(maxLimit, +(query.limit || 20));
32
+ const offset = query.page && query.page > 0 ? (query.page - 1) * limit : 0;
33
+
34
+ const kpiColumns = kpi ? kpi?.map(el => `${el.sql || 'count(*)'} as "${el.name}"`)?.join(',') : '';
35
+ const columnsList = metaColumns || loadTemplate.columns?.map(el => el.name)?.join(',');
36
+
37
+ const qMeta = await handlebars.compile(sql)({ user, uid });
38
+ const { fields = [] } = await pg.query(`select * from (${qMeta})q limit 0`);
39
+
40
+ const where = filter ? getFilterQuery({ pg, filter, fields, filterList: filters })?.map?.(el => el.query)?.join(' and ') : null;
41
+
42
+ const qAgg = `select ${kpiColumns || ''} from (${qMeta})q where ${where || '1=1'}`;
43
+ const q = `select ${columnsList || '*'} from (${qMeta})q where ${where || '1=1'} ${groupby ? `group by ${groupby}` : ''} limit ${limit} offset ${offset}`;
44
+
45
+ if (query.sql && user?.user_type?.includes('admin')) return `${qAgg};${q}`;
46
+
47
+ const kpiData = await pg.query(qAgg).then(el => el.rows?.[0] || {});
48
+ kpi?.forEach(el => Object.assign(el, { count: kpiData[el.name] || '0' }));
49
+
50
+ const { rows = [] } = await pg.query(q);
51
+
52
+ const cls = meta?.cls || loadTemplate.columns
53
+ ?.filter(el => (el.option || el.data))
54
+ ?.reduce((acc, curr) => Object.assign(acc, { [curr.name]: (curr.option || curr.data) }), {});
55
+
56
+ const titles = meta?.titles
57
+ || loadTemplate.columns?.reduce((acc, curr) => Object.assign(acc, { [curr.name]: curr.title }), {});
58
+
59
+ await metaFormat({ rows, cls, sufix: true });
60
+
61
+ const columns = loadTemplate.columns
62
+ || fields.map(el => ({
63
+ name: el.name,
64
+ title: titles?.[el.name] || el.name,
65
+ type: cls?.[el.name] ? 'Autocomplete' : 'Text',
66
+ format: pg.pgType?.[el.dataTypeID],
67
+ data: cls?.[el.name],
68
+ }));
69
+
70
+ return {
71
+ q: user?.user_type?.includes('admin') ? q : undefined,
72
+ kpi,
73
+ rows,
74
+ columns,
75
+ };
76
+ }
@@ -1,18 +1,18 @@
1
- import { getTemplatePath, getTemplate } from '@opengis/fastify-table/utils.js';
2
-
3
- export default async function reportList({
4
- user = {},
5
- }) {
6
- const arr = getTemplatePath('report').filter(el => el[2] === 'json').map(el => el[0]);
7
-
8
- const rows = await Promise.all(arr.map(async (el) => {
9
- const loadTemplate = await getTemplate('report', el);
10
- return {
11
- name: el,
12
- filters: loadTemplate?.filters || [],
13
- title: loadTemplate?.title || el,
14
- sql: user.user_type?.includes('admin') ? loadTemplate?.sql : undefined,
15
- };
16
- }));
17
- return { rows };
18
- }
1
+ import { getTemplatePath, getTemplate } from '@opengis/fastify-table/utils.js';
2
+
3
+ export default async function reportList({
4
+ user = {},
5
+ }) {
6
+ const arr = getTemplatePath('report').filter(el => el[2] === 'json').map(el => el[0]);
7
+
8
+ const rows = await Promise.all(arr.map(async (el) => {
9
+ const loadTemplate = await getTemplate('report', el);
10
+ return {
11
+ name: el,
12
+ filters: loadTemplate?.filters || [],
13
+ title: loadTemplate?.title || el,
14
+ sql: user.user_type?.includes('admin') ? loadTemplate?.sql : undefined,
15
+ };
16
+ }));
17
+ return { rows };
18
+ }
@@ -1,7 +1,7 @@
1
- import reportData from './controllers/data.js';
2
- import reportList from './controllers/list.js';
3
-
4
- export default async function route(app) {
5
- app.get('/reports', {}, reportList);
6
- app.get('/reports/:name', {}, reportData);
7
- }
1
+ import reportData from './controllers/data.js';
2
+ import reportList from './controllers/list.js';
3
+
4
+ export default async function route(app) {
5
+ app.get('/reports', {}, reportList);
6
+ app.get('/reports/:name', {}, reportData);
7
+ }