lesli 5.0.4 → 5.0.5

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/lesli/brand/app-logo2.svg +52 -0
  3. data/app/assets/javascripts/lesli/users/passwords.js +3 -3
  4. data/app/assets/javascripts/lesli/users/registrations.js +3 -3
  5. data/app/assets/javascripts/lesli/users/sessions.js +3 -3
  6. data/app/controllers/lesli/application_controller.rb +3 -3
  7. data/app/controllers/lesli/application_lesli_controller.rb +2 -2
  8. data/app/controllers/lesli/interfaces/application/authorization.rb +1 -1
  9. data/app/controllers/lesli/interfaces/application/requester.rb +1 -1
  10. data/app/controllers/lesli/shared/dashboards_controller.rb +308 -0
  11. data/app/controllers/users/confirmations_controller.rb +1 -1
  12. data/app/controllers/users/passwords_controller.rb +7 -10
  13. data/app/helpers/lesli/general_helper.rb +1 -1
  14. data/app/helpers/lesli/navigation_helper.rb +17 -16
  15. data/app/lib/lesli/system.rb +2 -1
  16. data/app/mailers/lesli/devise_mailer.rb +1 -1
  17. data/app/models/concerns/account_initializer.rb +9 -0
  18. data/app/models/lesli/account.rb +1 -0
  19. data/app/models/lesli/application_lesli_record.rb +1 -1
  20. data/app/models/lesli/shared/dashboard.rb +162 -0
  21. data/app/models/lesli/system_controller.rb +1 -0
  22. data/app/operators/lesli/controller_operator.rb +148 -0
  23. data/app/views/devise/passwords/new.html.erb +1 -1
  24. data/app/views/lesli/partials/_application-lesli-engines.html.erb +1 -1
  25. data/app/views/lesli/partials/_application-lesli-icons.html.erb +1 -1
  26. data/config/locales/translations.en.yml +17 -0
  27. data/config/locales/translations.es.yml +17 -0
  28. data/config/routes.rb +4 -2
  29. data/db/seed/development/users.rb +0 -1
  30. data/db/seeds.rb +16 -29
  31. data/lib/lesli/version.rb +1 -1
  32. data/lib/mailer_previews/devise_mailer_preview.rb +7 -0
  33. data/lib/sass/lesli/layouts/application-navbar.scss +1 -1
  34. data/lib/tasks/lesli/controllers.rake +1 -91
  35. data/lib/tasks/lesli/db.rake +36 -6
  36. data/lib/tasks/lesli/dev.rake +66 -0
  37. data/lib/tasks/lesli/engine.rake +59 -0
  38. data/lib/tasks/lesli/{role.rake → privileges.rake} +3 -3
  39. data/lib/tasks/lesli_tasks.rake +5 -0
  40. data/lib/vue/application.js +2 -1
  41. data/lib/vue/devise/passwords.js +8 -8
  42. data/lib/vue/devise/registrations.js +2 -2
  43. data/lib/vue/devise/sessions.js +11 -6
  44. data/lib/vue/layouts/application-header.vue +6 -1
  45. data/lib/vue/shared/dashboards/apps/edit.vue +215 -0
  46. data/lib/vue/{apps → shared}/dashboards/apps/index.vue +3 -5
  47. data/lib/vue/{apps → shared}/dashboards/apps/show.vue +26 -16
  48. data/lib/vue/{apps → shared}/dashboards/components/form.vue +31 -43
  49. data/lib/vue/shared/stores/dashboard.js +251 -0
  50. data/lib/vue/stores/translations.json +24 -72
  51. data/lib/vue/stores/{user.js → users.js} +1 -1
  52. data/lib/webpack/base.js +3 -2
  53. data/readme.md +1 -1
  54. metadata +46 -52
  55. data/lib/vue/apps/dashboards/apps/edit.vue +0 -105
  56. data/lib/vue/apps/dashboards/components/preview.vue +0 -172
  57. /data/app/assets/icons/lesli/{cloud-vault.svg → cloud-guard.svg} +0 -0
  58. /data/lib/vue/{apps → shared}/cloudobjects/action.vue +0 -0
  59. /data/lib/vue/{apps → shared}/cloudobjects/discussion/content.vue +0 -0
  60. /data/lib/vue/{apps → shared}/cloudobjects/discussion/element.vue +0 -0
  61. /data/lib/vue/{apps → shared}/cloudobjects/discussion/filters.vue +0 -0
  62. /data/lib/vue/{apps → shared}/cloudobjects/discussion/new.vue +0 -0
  63. /data/lib/vue/{apps → shared}/cloudobjects/discussion.vue +0 -0
  64. /data/lib/vue/{apps → shared}/cloudobjects/file/grid.vue +0 -0
  65. /data/lib/vue/{apps → shared}/cloudobjects/file/list.vue +0 -0
  66. /data/lib/vue/{apps → shared}/cloudobjects/file.vue +0 -0
  67. /data/lib/vue/{apps → shared}/dashboards/apps/new.vue +0 -0
  68. /data/lib/vue/{apps → shared}/workflows2/apps/actions/form.vue +0 -0
  69. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/chatroom-form.vue +0 -0
  70. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -0
  71. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -0
  72. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/email-form.vue +0 -0
  73. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/notification-form.vue +0 -0
  74. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -0
  75. /data/lib/vue/{apps → shared}/workflows2/apps/actions/forms/task-form.vue +0 -0
  76. /data/lib/vue/{apps → shared}/workflows2/apps/actions/index.vue +0 -0
  77. /data/lib/vue/{apps → shared}/workflows2/apps/checks/form.vue +0 -0
  78. /data/lib/vue/{apps → shared}/workflows2/apps/checks/index.vue +0 -0
  79. /data/lib/vue/{apps → shared}/workflows2/apps/index.vue +0 -0
  80. /data/lib/vue/{apps → shared}/workflows2/apps/new.vue +0 -0
  81. /data/lib/vue/{apps → shared}/workflows2/apps/show.vue +0 -0
  82. /data/lib/vue/{apps → shared}/workflows2/components/associations.vue +0 -0
  83. /data/lib/vue/{apps → shared}/workflows2/components/chart.vue +0 -0
  84. /data/lib/vue/{apps → shared}/workflows2/components/workflow-form.vue +0 -0
  85. /data/lib/vue/{apps → shared}/workflows2/components/workflow-status-dropdown.vue +0 -0
@@ -0,0 +1,251 @@
1
+ /*
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Your Smart Business Assistant.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+
32
+ */
33
+
34
+
35
+ // ·
36
+ import { defineStore } from "pinia"
37
+
38
+
39
+ // ·
40
+ export const useDashboard = defineStore("shared.dashboard", {
41
+ state: () => {
42
+ return {
43
+
44
+ engine: null,
45
+ loading: false,
46
+
47
+ dashboards: [],
48
+
49
+ dashboard: {
50
+ components: []
51
+ },
52
+
53
+ options: {
54
+ component_ids: []
55
+ },
56
+
57
+ selected_dashboard_component: {},
58
+ deleted_components: [],
59
+ default_component_configuration:{
60
+ index: 1,
61
+ layout: 4
62
+ },
63
+ new_component_id: ""
64
+ }
65
+ },
66
+ actions: {
67
+
68
+ setEngine(engine) {
69
+ this.engine = engine.replace("lesli_", "")
70
+ },
71
+
72
+ getDashboard(id="default") {
73
+ this.http.get(this.url[this.engine]("dashboards/:id", id)).then(result => {
74
+ let components = result.components
75
+ this.dashboard = result
76
+ this.dashboard.components = []
77
+
78
+ // Parse components so they can be rendered
79
+ components.forEach((component) => {
80
+ component.component_id = component.component_id.replaceAll('_','-')
81
+ this.dashboard.components.push(component)
82
+ })
83
+ })
84
+ },
85
+
86
+ getDashboardOptions(){
87
+
88
+ const url = this.url[this.engine]('dashboards/options')
89
+
90
+ this.http.get(url).then(result => {
91
+ result["component_ids"].forEach((component)=>{
92
+ this.options["component_ids"].push({
93
+ label: component.text.replaceAll('_','-'),
94
+ value: component.value
95
+ })
96
+ })
97
+ }).catch(error => {
98
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
99
+ })
100
+ },
101
+
102
+
103
+
104
+
105
+
106
+
107
+ /**
108
+ * @description This action is used to fetch the list of dashboards
109
+ */
110
+ fetchDashboards(url) {
111
+ this.loading = true
112
+
113
+ if (!url) url = this.url[this.engine]('dashboards')
114
+
115
+ this.http.get(url).then(result => {
116
+ this.loading = false
117
+ this.dashboards = result.dashboards.map(dashboard => {
118
+ dashboard.created_at = this.date2(dashboard.created_at).dateTime().toString()
119
+ dashboard.updated_at = this.date2(dashboard.updated_at).dateTime().toString()
120
+ return dashboard
121
+ })
122
+ }).catch(error => {
123
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
124
+ })
125
+ },
126
+ /**
127
+ * @param {string} search_string String to search for
128
+ * @description This action is used to search for a string in the dashboards
129
+ */
130
+ searchDashboards(search_string){
131
+ const url = this.url[this.engine]('dashboards').search(search_string)
132
+ this.fetchDashboards(url)
133
+ },
134
+ /**
135
+ * @description This action is used to reset the dashboard
136
+ */
137
+ resetDashboard(){
138
+ this.dashboard = {
139
+ components: []
140
+ }
141
+ this.deleted_components = []
142
+ this.selected_dashboard_component = {}
143
+ this.new_component_id = ""
144
+ },
145
+ /**
146
+ * @description This action is used to update a dashboard
147
+ */
148
+ updateDashboard(){
149
+ this.loading = true
150
+ let data = {
151
+ dashboard: {
152
+ name: this.dashboard.name,
153
+ default: this.dashboard.default,
154
+ roles_id: this.dashboard.roles_id,
155
+ components_attributes: this.dashboard.components.map((component)=>{
156
+ let parsed_component = {...component}
157
+ // We check if the id is a valid integer or a placeholder. If it is a placeholder, we set it to null
158
+ if(isNaN(parsed_component.id)){
159
+ parsed_component.id = null
160
+ }
161
+
162
+ return parsed_component
163
+ })
164
+ }
165
+ }
166
+
167
+ data.dashboard.components_attributes = data.dashboard.components_attributes.concat(this.deleted_components)
168
+
169
+ const url = this.url[this.engine](`dashboards/${this.dashboard.id}`)
170
+
171
+ return this.http.put(url, data).then(result => {
172
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
173
+ this.loading = false
174
+ }).catch(error => {
175
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
176
+ })
177
+ },
178
+ /**
179
+ * @description This action is used to post a dashboard
180
+ */
181
+ async postDashboard(){
182
+ this.loading = true
183
+ let data = {
184
+ dashboard: {
185
+ name: this.dashboard.name,
186
+ default: this.dashboard.default,
187
+ roles_id: this.dashboard.roles_id,
188
+ components_attributes: this.dashboard.components.map((component)=>{
189
+ let parsed_component = {...component}
190
+ parsed_component.id = null
191
+
192
+ return parsed_component
193
+ })
194
+ }
195
+ }
196
+
197
+ const url = this.url[this.engine]('dashboards')
198
+
199
+ return this.http.post(url, data).then(result => {
200
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
201
+ this.loading = false
202
+ }).catch(error => {
203
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
204
+ })
205
+ },
206
+ /**
207
+ * @description This action is used to get dashboard options
208
+ */
209
+
210
+ /**
211
+ * @description This action is used to get the information for a dashboard
212
+ */
213
+ fetchDashboard(dashboard_id){
214
+
215
+ this.loading = true
216
+
217
+ const url = this.url[this.engine]('dashboards/:dashboardId', { dashboardId: dashboard_id })
218
+
219
+ return this.http.get(url).then(result => {
220
+
221
+ let components = result.components
222
+ this.dashboard = result
223
+ this.dashboard.components = []
224
+
225
+ // Parse components so they can be rendered
226
+ components.forEach((component) => {
227
+ component.component_id = component.component_id.replaceAll('_','-')
228
+ this.dashboard.components.push(component)
229
+ })
230
+
231
+ this.loading = false
232
+ }).catch(error => {
233
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
234
+ })
235
+ },
236
+ /**
237
+ * @description This action is used to delete a dashboard
238
+ */
239
+ async deleteDashboard(){
240
+ this.loading = true
241
+ const url = this.url[this.engine]('dashboards/:dashboardId', { dashboardId: this.dashboard.id })
242
+
243
+ return this.http.delete(url).then(result => {
244
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
245
+ this.loading = false
246
+ }).catch(error => {
247
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
248
+ })
249
+ }
250
+ }
251
+ })
@@ -2,84 +2,36 @@
2
2
  "en": {
3
3
  "lesli": {
4
4
  "shared": {
5
- "title_lesli": ":lesli.shared.title_lesli:"
6
- },
7
- "users": {
8
- "title_users": "Users"
9
- }
10
- },
11
- "lesli_admin": {
12
- "shared": {
13
- "title_lesli": ":lesli.shared.title_lesli:"
14
- },
15
- "users": {
16
- "title_users": "Users"
17
- }
18
- },
19
- "lesli_audit": {
20
- "shared": {
21
- "title_lesli": ":lesli.shared.title_lesli:"
22
- },
23
- "users": {
24
- "title_users": "Users"
25
- }
26
- },
27
- "lesli_babel": {
28
- "shared": {
29
- "title_lesli": ":lesli.shared.title_lesli:"
30
- },
31
- "users": {
32
- "title_users": "Users"
33
- }
34
- },
35
- "lesli_driver": {
36
- "shared": {
37
- "title_lesli": ":lesli.shared.title_lesli:"
38
- },
39
- "users": {
40
- "title_users": "Users"
5
+ "button_add_new": "Add new",
6
+ "button_delete": "Delete",
7
+ "button_edit": "Edit",
8
+ "button_list": "List",
9
+ "button_reload": "Reload",
10
+ "button_save": "Save",
11
+ "view_discussions": "Discussions",
12
+ "view_files": "Files",
13
+ "view_quick_actions": "Quick actions"
14
+ },
15
+ "users/sessions": {
16
+ "view_username": "Username"
41
17
  }
42
18
  }
43
19
  },
44
20
  "es": {
45
21
  "lesli": {
46
22
  "shared": {
47
- "title_lesli": "Lesli en español "
48
- },
49
- "users": {
50
- "title_users": "Usuarios"
51
- }
52
- },
53
- "lesli_admin": {
54
- "shared": {
55
- "title_lesli": "Lesli en español "
56
- },
57
- "users": {
58
- "title_users": "Usuarios"
59
- }
60
- },
61
- "lesli_audit": {
62
- "shared": {
63
- "title_lesli": "Lesli en español "
64
- },
65
- "users": {
66
- "title_users": "Usuarios"
67
- }
68
- },
69
- "lesli_babel": {
70
- "shared": {
71
- "title_lesli": "Lesli en español "
72
- },
73
- "users": {
74
- "title_users": "Usuarios"
75
- }
76
- },
77
- "lesli_driver": {
78
- "shared": {
79
- "title_lesli": "Lesli en español "
80
- },
81
- "users": {
82
- "title_users": "Usuarios"
23
+ "button_add_new": "Agregar nuevo",
24
+ "button_delete": "Eliminar",
25
+ "button_edit": "Editar",
26
+ "button_list": "Lista",
27
+ "button_reload": "Recargar",
28
+ "button_save": "Guardar",
29
+ "view_discussions": "Discusiones",
30
+ "view_files": "Archivos",
31
+ "view_quick_actions": "Acciones rapidas"
32
+ },
33
+ "users/sessions": {
34
+ "view_username": "Usuario"
83
35
  }
84
36
  }
85
37
  }
@@ -35,7 +35,7 @@ import { defineStore } from "pinia"
35
35
 
36
36
 
37
37
  // ·
38
- export const useUser = defineStore("lesli.user", {
38
+ export const useUsers = defineStore("lesli.users", {
39
39
  state: () => {
40
40
  return {
41
41
 
data/lib/webpack/base.js CHANGED
@@ -113,18 +113,19 @@ module.exports = env => {
113
113
  // Set aliases as shortcuts to import modules
114
114
  Lesli: path.resolve("lib", "vue"),
115
115
  LesliBell: path.resolve("../", "LesliBell", "lib", "vue"),
116
+ LesliHelp: path.resolve("../", "Leslihelp", "lib", "vue"),
116
117
  LesliAdmin: path.resolve("../", "LesliAdmin", "lib", "vue"),
117
118
  LesliAudit: path.resolve("../", "LesliAudit", "lib", "vue"),
118
119
  LesliBabel: path.resolve("../", "LesliBabel", "lib", "vue"),
119
- LesliVault: path.resolve("../", "LesliVault", "lib", "vue"),
120
+ LesliGuard: path.resolve("../", "LesliGuard", "lib", "vue"),
120
121
  LesliDriver: path.resolve("../", "LesliDriver", "lib", "vue"),
122
+
121
123
 
122
124
 
123
125
  CloudAdmin: path.resolve("app", "vue", "admin"),
124
126
  CloudTalk: path.resolve("engines", "cloud_talk", "lib", "vue"),
125
127
  CloudTeam: path.resolve("engines", "cloud_team", "lib", "vue"),
126
128
  CloudTime: path.resolve("engines", "cloud_time", "lib", "vue"),
127
- CloudHelp: path.resolve("engines", "cloud_help", "lib", "vue"),
128
129
  CloudWork: path.resolve("engines", "cloud_work", "lib", "vue"),
129
130
  CloudBabel: path.resolve("engines", "cloud_babel", "lib", "vue"),
130
131
  CloudFocus: path.resolve("engines", "cloud_focus", "lib", "vue"),
data/readme.md CHANGED
@@ -56,7 +56,7 @@ Lesli is officially released and will be supported as of version 5.1
56
56
  ### Demo
57
57
 
58
58
  * online demo (soon)
59
- * [docker demo](https://github.com/ldonis/lesli-docker-demo)
59
+ * [docker demo](https://github.com/LesliTech/lesli-docker-demo)
60
60
 
61
61
 
62
62
  <br />
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lesli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.4
4
+ version: 5.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Lesli Development Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-02 00:00:00.000000000 Z
11
+ date: 2023-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -114,20 +114,6 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: 1.2.2
117
- - !ruby/object:Gem::Dependency
118
- name: L2
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: 0.5.2
124
- type: :runtime
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: 0.5.2
131
117
  - !ruby/object:Gem::Dependency
132
118
  name: devise
133
119
  requirement: !ruby/object:Gem::Requirement
@@ -213,6 +199,7 @@ files:
213
199
  - app/assets/icons/lesli/cloud-dispatcher.svg
214
200
  - app/assets/icons/lesli/cloud-driver.svg
215
201
  - app/assets/icons/lesli/cloud-focus.svg
202
+ - app/assets/icons/lesli/cloud-guard.svg
216
203
  - app/assets/icons/lesli/cloud-help.svg
217
204
  - app/assets/icons/lesli/cloud-kb.svg
218
205
  - app/assets/icons/lesli/cloud-leaf.svg
@@ -227,7 +214,6 @@ files:
227
214
  - app/assets/icons/lesli/cloud-talk.svg
228
215
  - app/assets/icons/lesli/cloud-team.svg
229
216
  - app/assets/icons/lesli/cloud-time.svg
230
- - app/assets/icons/lesli/cloud-vault.svg
231
217
  - app/assets/icons/lesli/cloud-word.svg
232
218
  - app/assets/icons/lesli/icon-module.svg
233
219
  - app/assets/icons/lesli/logo-android.svg
@@ -247,6 +233,7 @@ files:
247
233
  - app/assets/images/lesli/brand/app-auth.svg
248
234
  - app/assets/images/lesli/brand/app-icon.svg
249
235
  - app/assets/images/lesli/brand/app-logo.svg
236
+ - app/assets/images/lesli/brand/app-logo2.svg
250
237
  - app/assets/images/lesli/brand/favicon.png
251
238
  - app/assets/images/lesli/brand/favicon.svg
252
239
  - app/assets/images/lesli/brand/login-background.jpg
@@ -269,6 +256,7 @@ files:
269
256
  - app/controllers/lesli/interfaces/application/requester.rb
270
257
  - app/controllers/lesli/interfaces/application/responder.rb
271
258
  - app/controllers/lesli/roles_controller.rb
259
+ - app/controllers/lesli/shared/dashboards_controller.rb
272
260
  - app/controllers/lesli/users_controller.rb
273
261
  - app/controllers/users/confirmations_controller.rb
274
262
  - app/controllers/users/omniauth_callbacks_controller.rb
@@ -299,6 +287,7 @@ files:
299
287
  - app/models/lesli/role.rb
300
288
  - app/models/lesli/role/power.rb
301
289
  - app/models/lesli/role/privilege.rb
290
+ - app/models/lesli/shared/dashboard.rb
302
291
  - app/models/lesli/system_controller.rb
303
292
  - app/models/lesli/system_controller/action.rb
304
293
  - app/models/lesli/user.rb
@@ -309,6 +298,7 @@ files:
309
298
  - app/models/lesli/user/request.rb
310
299
  - app/models/lesli/user/session.rb
311
300
  - app/models/lesli/user/setting.rb
301
+ - app/operators/lesli/controller_operator.rb
312
302
  - app/operators/lesli/descriptor_privilege_operator.rb
313
303
  - app/operators/lesli/role_power_operator.rb
314
304
  - app/operators/lesli/user_registration_operator.rb
@@ -363,6 +353,8 @@ files:
363
353
  - config/initializers/devise.rb
364
354
  - config/initializers/lesli.rb
365
355
  - config/locales/devise.en.yml
356
+ - config/locales/translations.en.yml
357
+ - config/locales/translations.es.yml
366
358
  - config/routes.rb
367
359
  - db/migrate/v1.0/0010000110_create_lesli_accounts.rb
368
360
  - db/migrate/v1.0/0010000210_create_lesli_roles.rb
@@ -482,43 +474,12 @@ files:
482
474
  - lib/sass/lesli/templates/public.scss
483
475
  - lib/tasks/lesli/controllers.rake
484
476
  - lib/tasks/lesli/db.rake
477
+ - lib/tasks/lesli/dev.rake
478
+ - lib/tasks/lesli/engine.rake
485
479
  - lib/tasks/lesli/git.rake
486
- - lib/tasks/lesli/role.rake
480
+ - lib/tasks/lesli/privileges.rake
487
481
  - lib/tasks/lesli_tasks.rake
488
482
  - lib/vue/application.js
489
- - lib/vue/apps/cloudobjects/action.vue
490
- - lib/vue/apps/cloudobjects/discussion.vue
491
- - lib/vue/apps/cloudobjects/discussion/content.vue
492
- - lib/vue/apps/cloudobjects/discussion/element.vue
493
- - lib/vue/apps/cloudobjects/discussion/filters.vue
494
- - lib/vue/apps/cloudobjects/discussion/new.vue
495
- - lib/vue/apps/cloudobjects/file.vue
496
- - lib/vue/apps/cloudobjects/file/grid.vue
497
- - lib/vue/apps/cloudobjects/file/list.vue
498
- - lib/vue/apps/dashboards/apps/edit.vue
499
- - lib/vue/apps/dashboards/apps/index.vue
500
- - lib/vue/apps/dashboards/apps/new.vue
501
- - lib/vue/apps/dashboards/apps/show.vue
502
- - lib/vue/apps/dashboards/components/form.vue
503
- - lib/vue/apps/dashboards/components/preview.vue
504
- - lib/vue/apps/workflows2/apps/actions/form.vue
505
- - lib/vue/apps/workflows2/apps/actions/forms/chatroom-form.vue
506
- - lib/vue/apps/workflows2/apps/actions/forms/cloud-object-clone-form.vue
507
- - lib/vue/apps/workflows2/apps/actions/forms/cloud-object-file-form.vue
508
- - lib/vue/apps/workflows2/apps/actions/forms/email-form.vue
509
- - lib/vue/apps/workflows2/apps/actions/forms/notification-form.vue
510
- - lib/vue/apps/workflows2/apps/actions/forms/send-cloud-object-file.vue
511
- - lib/vue/apps/workflows2/apps/actions/forms/task-form.vue
512
- - lib/vue/apps/workflows2/apps/actions/index.vue
513
- - lib/vue/apps/workflows2/apps/checks/form.vue
514
- - lib/vue/apps/workflows2/apps/checks/index.vue
515
- - lib/vue/apps/workflows2/apps/index.vue
516
- - lib/vue/apps/workflows2/apps/new.vue
517
- - lib/vue/apps/workflows2/apps/show.vue
518
- - lib/vue/apps/workflows2/components/associations.vue
519
- - lib/vue/apps/workflows2/components/chart.vue
520
- - lib/vue/apps/workflows2/components/workflow-form.vue
521
- - lib/vue/apps/workflows2/components/workflow-status-dropdown.vue
522
483
  - lib/vue/devise/confirmations.js
523
484
  - lib/vue/devise/passwords.js
524
485
  - lib/vue/devise/registrations.js
@@ -556,6 +517,39 @@ files:
556
517
  - lib/vue/panels/panel-tasks.vue
557
518
  - lib/vue/panels/panel-tickets.vue
558
519
  - lib/vue/public.js
520
+ - lib/vue/shared/cloudobjects/action.vue
521
+ - lib/vue/shared/cloudobjects/discussion.vue
522
+ - lib/vue/shared/cloudobjects/discussion/content.vue
523
+ - lib/vue/shared/cloudobjects/discussion/element.vue
524
+ - lib/vue/shared/cloudobjects/discussion/filters.vue
525
+ - lib/vue/shared/cloudobjects/discussion/new.vue
526
+ - lib/vue/shared/cloudobjects/file.vue
527
+ - lib/vue/shared/cloudobjects/file/grid.vue
528
+ - lib/vue/shared/cloudobjects/file/list.vue
529
+ - lib/vue/shared/dashboards/apps/edit.vue
530
+ - lib/vue/shared/dashboards/apps/index.vue
531
+ - lib/vue/shared/dashboards/apps/new.vue
532
+ - lib/vue/shared/dashboards/apps/show.vue
533
+ - lib/vue/shared/dashboards/components/form.vue
534
+ - lib/vue/shared/stores/dashboard.js
535
+ - lib/vue/shared/workflows2/apps/actions/form.vue
536
+ - lib/vue/shared/workflows2/apps/actions/forms/chatroom-form.vue
537
+ - lib/vue/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue
538
+ - lib/vue/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue
539
+ - lib/vue/shared/workflows2/apps/actions/forms/email-form.vue
540
+ - lib/vue/shared/workflows2/apps/actions/forms/notification-form.vue
541
+ - lib/vue/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue
542
+ - lib/vue/shared/workflows2/apps/actions/forms/task-form.vue
543
+ - lib/vue/shared/workflows2/apps/actions/index.vue
544
+ - lib/vue/shared/workflows2/apps/checks/form.vue
545
+ - lib/vue/shared/workflows2/apps/checks/index.vue
546
+ - lib/vue/shared/workflows2/apps/index.vue
547
+ - lib/vue/shared/workflows2/apps/new.vue
548
+ - lib/vue/shared/workflows2/apps/show.vue
549
+ - lib/vue/shared/workflows2/components/associations.vue
550
+ - lib/vue/shared/workflows2/components/chart.vue
551
+ - lib/vue/shared/workflows2/components/workflow-form.vue
552
+ - lib/vue/shared/workflows2/components/workflow-status-dropdown.vue
559
553
  - lib/vue/stores/account.js
560
554
  - lib/vue/stores/cloudobjects/action.js
561
555
  - lib/vue/stores/cloudobjects/discussion.js
@@ -573,7 +567,7 @@ files:
573
567
  - lib/vue/stores/services/firebase.js
574
568
  - lib/vue/stores/services/translator.js
575
569
  - lib/vue/stores/translations.json
576
- - lib/vue/stores/user.js
570
+ - lib/vue/stores/users.js
577
571
  - lib/vue/translation.js
578
572
  - lib/webpack/base.js
579
573
  - lib/webpack/core.js