lesli 5.0.0

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 (398) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +3 -0
  3. data/app/assets/config/lesli_manifest.js +53 -0
  4. data/app/assets/fonts/lesli/Domine/Domine-Bold.ttf +0 -0
  5. data/app/assets/fonts/lesli/Domine/Domine-Regular.ttf +0 -0
  6. data/app/assets/fonts/lesli/Domine/OFL.txt +95 -0
  7. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  8. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  9. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  10. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  11. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +1 -0
  12. data/app/assets/fonts/lesli/Remix/remixicon.svg +7633 -0
  13. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +11 -0
  14. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  15. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  16. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  17. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +202 -0
  18. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  19. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  20. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  21. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  22. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  23. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  24. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  25. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  26. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  27. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  28. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  29. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  30. data/app/assets/icons/lesli/cloud-admin.svg +1 -0
  31. data/app/assets/icons/lesli/cloud-audit.svg +1 -0
  32. data/app/assets/icons/lesli/cloud-babel.svg +1 -0
  33. data/app/assets/icons/lesli/cloud-bell.svg +1 -0
  34. data/app/assets/icons/lesli/cloud-books.svg +1 -0
  35. data/app/assets/icons/lesli/cloud-development.svg +1 -0
  36. data/app/assets/icons/lesli/cloud-dispatcher.svg +1 -0
  37. data/app/assets/icons/lesli/cloud-driver.svg +1 -0
  38. data/app/assets/icons/lesli/cloud-focus.svg +1 -0
  39. data/app/assets/icons/lesli/cloud-help.svg +1 -0
  40. data/app/assets/icons/lesli/cloud-kb.svg +1 -0
  41. data/app/assets/icons/lesli/cloud-leaf.svg +1 -0
  42. data/app/assets/icons/lesli/cloud-lesli.svg +1 -0
  43. data/app/assets/icons/lesli/cloud-mailer.svg +1 -0
  44. data/app/assets/icons/lesli/cloud-one.svg +1 -0
  45. data/app/assets/icons/lesli/cloud-profile.svg +1 -0
  46. data/app/assets/icons/lesli/cloud-proposal.svg +1 -0
  47. data/app/assets/icons/lesli/cloud-scraper.svg +1 -0
  48. data/app/assets/icons/lesli/cloud-shared.svg +1 -0
  49. data/app/assets/icons/lesli/cloud-storage.svg +1 -0
  50. data/app/assets/icons/lesli/cloud-talk.svg +1 -0
  51. data/app/assets/icons/lesli/cloud-team.svg +1 -0
  52. data/app/assets/icons/lesli/cloud-time.svg +1 -0
  53. data/app/assets/icons/lesli/cloud-vault.svg +1 -0
  54. data/app/assets/icons/lesli/cloud-word.svg +1 -0
  55. data/app/assets/icons/lesli/icon-module.svg +1 -0
  56. data/app/assets/icons/lesli/logo-android.svg +1 -0
  57. data/app/assets/icons/lesli/logo-bulma.svg +1 -0
  58. data/app/assets/icons/lesli/logo-ios.svg +1 -0
  59. data/app/assets/icons/lesli/logo-linux.svg +1 -0
  60. data/app/assets/icons/lesli/logo-mac.svg +1 -0
  61. data/app/assets/icons/lesli/logo-module.svg +1 -0
  62. data/app/assets/icons/lesli/logo-postgresql.svg +1 -0
  63. data/app/assets/icons/lesli/logo-rails.svg +1 -0
  64. data/app/assets/icons/lesli/logo-ruby.svg +1 -0
  65. data/app/assets/icons/lesli/logo-sass.svg +1 -0
  66. data/app/assets/icons/lesli/logo-vue.svg +1 -0
  67. data/app/assets/icons/lesli/logo-web.svg +1 -0
  68. data/app/assets/icons/lesli/logo-windows.svg +1 -0
  69. data/app/assets/icons/readme.md +10 -0
  70. data/app/assets/images/lesli/brand/app-auth.svg +9 -0
  71. data/app/assets/images/lesli/brand/app-icon.svg +42 -0
  72. data/app/assets/images/lesli/brand/app-logo.svg +4 -0
  73. data/app/assets/images/lesli/brand/favicon.png +0 -0
  74. data/app/assets/images/lesli/brand/favicon.svg +61 -0
  75. data/app/assets/images/lesli/brand/login-background.jpg +0 -0
  76. data/app/assets/javascripts/lesli/users/sessions.js +786 -0
  77. data/app/assets/stylesheets/lesli/users/confirmations.scss +34 -0
  78. data/app/assets/stylesheets/lesli/users/devise.scss +32 -0
  79. data/app/assets/stylesheets/lesli/users/oauth.scss +34 -0
  80. data/app/assets/stylesheets/lesli/users/passwords.scss +34 -0
  81. data/app/assets/stylesheets/lesli/users/registrations.scss +34 -0
  82. data/app/assets/stylesheets/lesli/users/sessions.scss +38 -0
  83. data/app/controllers/lesli/application_controller.rb +108 -0
  84. data/app/controllers/lesli/application_devise_controller.rb +54 -0
  85. data/app/controllers/lesli/application_lesli_controller.rb +61 -0
  86. data/app/controllers/lesli/interfaces/application/authorization.rb +107 -0
  87. data/app/controllers/lesli/interfaces/application/customization.rb +46 -0
  88. data/app/controllers/lesli/interfaces/application/logger.rb +133 -0
  89. data/app/controllers/lesli/interfaces/application/requester.rb +84 -0
  90. data/app/controllers/lesli/interfaces/application/responder.rb +132 -0
  91. data/app/controllers/lesli/profiles_controller.rb +60 -0
  92. data/app/controllers/users/confirmations_controller.rb +30 -0
  93. data/app/controllers/users/omniauth_callbacks_controller.rb +30 -0
  94. data/app/controllers/users/passwords_controller.rb +34 -0
  95. data/app/controllers/users/registrations_controller.rb +62 -0
  96. data/app/controllers/users/sessions_controller.rb +142 -0
  97. data/app/controllers/users/unlocks_controller.rb +30 -0
  98. data/app/helpers/lesli/assets_helper.rb +92 -0
  99. data/app/helpers/lesli/customization_helper.rb +84 -0
  100. data/app/helpers/lesli/general_helper.rb +83 -0
  101. data/app/helpers/lesli/navigation_helper.rb +349 -0
  102. data/app/helpers/lesli/profiles_helper.rb +4 -0
  103. data/app/helpers/lesli/system_helper.rb +57 -0
  104. data/app/lib/date2.rb +192 -0
  105. data/app/lib/lesli/system.rb +80 -0
  106. data/app/models/concerns/account_engines.rb +249 -0
  107. data/app/models/concerns/user_activities.rb +163 -0
  108. data/app/models/concerns/user_extensions.rb +129 -0
  109. data/app/models/concerns/user_guard.rb +278 -0
  110. data/app/models/concerns/user_polyfill.rb +134 -0
  111. data/app/models/lesli/account/log.rb +57 -0
  112. data/app/models/lesli/account.rb +76 -0
  113. data/app/models/lesli/application_lesli_record.rb +37 -0
  114. data/app/models/lesli/profile.rb +4 -0
  115. data/app/models/lesli/system_controller/action.rb +37 -0
  116. data/app/models/lesli/system_controller.rb +37 -0
  117. data/app/models/lesli/user/agent.rb +37 -0
  118. data/app/models/lesli/user/log.rb +38 -0
  119. data/app/models/lesli/user/request.rb +37 -0
  120. data/app/models/lesli/user/session.rb +105 -0
  121. data/app/models/lesli/user.rb +162 -0
  122. data/app/services/lesli/application_lesli_service.rb +168 -0
  123. data/app/services/lesli/user/session_service.rb +62 -0
  124. data/app/validators/lesli/application_lesli_validator.rb +67 -0
  125. data/app/validators/lesli/users_validator.rb +217 -0
  126. data/app/views/devise/confirmations/new.html.erb +16 -0
  127. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  128. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  129. data/app/views/devise/mailer/password_change.html.erb +3 -0
  130. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  131. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  132. data/app/views/devise/passwords/edit.html.erb +25 -0
  133. data/app/views/devise/passwords/new.html.erb +16 -0
  134. data/app/views/devise/registrations/edit.html.erb +43 -0
  135. data/app/views/devise/registrations/new.html.erb +29 -0
  136. data/app/views/devise/sessions/new.html.erb +178 -0
  137. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  138. data/app/views/devise/shared/_links.html.erb +25 -0
  139. data/app/views/devise/unlocks/new.html.erb +16 -0
  140. data/app/views/lesli/devise/sessions/_form.html.erb +17 -0
  141. data/app/views/lesli/devise/sessions/_session.html.erb +2 -0
  142. data/app/views/lesli/devise/sessions/edit.html.erb +10 -0
  143. data/app/views/lesli/devise/sessions/index.html.erb +14 -0
  144. data/app/views/lesli/devise/sessions/new.html.erb +9 -0
  145. data/app/views/lesli/devise/sessions/show.html.erb +10 -0
  146. data/app/views/lesli/layouts/application-devise.html.erb +58 -0
  147. data/app/views/lesli/layouts/application-lesli.html.erb +57 -0
  148. data/app/views/lesli/layouts/application-public.html.erb +59 -0
  149. data/app/views/lesli/partials/_application-analytics.html.erb +71 -0
  150. data/app/views/lesli/partials/_application-data.html.erb +102 -0
  151. data/app/views/lesli/partials/_application-head.html.erb +56 -0
  152. data/app/views/lesli/partials/_application-lesli-chatbox.html.erb +35 -0
  153. data/app/views/lesli/partials/_application-lesli-content.html.erb +35 -0
  154. data/app/views/lesli/partials/_application-lesli-engines.html.erb +83 -0
  155. data/app/views/lesli/partials/_application-lesli-footer.html.erb +82 -0
  156. data/app/views/lesli/partials/_application-lesli-header.html.erb +79 -0
  157. data/app/views/lesli/partials/_application-lesli-icons.html.erb +1 -0
  158. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +57 -0
  159. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +52 -0
  160. data/app/views/lesli/partials/_application-lesli-notices.html.erb +43 -0
  161. data/app/views/lesli/partials/_application-lesli-panels.html.erb +58 -0
  162. data/app/views/lesli/partials/_application-lesli-scss.html.erb +60 -0
  163. data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +50 -0
  164. data/app/views/lesli/partials/_application-public-footer.html.erb +51 -0
  165. data/app/views/lesli/partials/_application-public-javascript.html.erb +51 -0
  166. data/app/views/lesli/partials/_application-public-scss.html.erb +35 -0
  167. data/app/views/lesli/profiles/_form.html.erb +17 -0
  168. data/app/views/lesli/profiles/_profile.html.erb +2 -0
  169. data/app/views/lesli/profiles/edit.html.erb +10 -0
  170. data/app/views/lesli/profiles/index.html.erb +14 -0
  171. data/app/views/lesli/profiles/new.html.erb +9 -0
  172. data/app/views/lesli/profiles/show.html.erb +10 -0
  173. data/app/views/lesli/wrappers/_application-auth.html.erb +65 -0
  174. data/config/initializers/devise.rb +334 -0
  175. data/config/initializers/lesli_defaults.rb +100 -0
  176. data/config/locales/devise.en.yml +65 -0
  177. data/config/routes.rb +52 -0
  178. data/db/migrate/v1.0/0010000110_create_lesli_accounts.rb +70 -0
  179. data/db/migrate/v1.0/0010000210_create_lesli_roles.rb +59 -0
  180. data/db/migrate/v1.0/0010000310_create_lesli_users.rb +97 -0
  181. data/db/migrate/v1.0/0010000610_create_lesli_system_controllers.rb +44 -0
  182. data/db/migrate/v1.0/0010000710_create_lesli_system_controller_actions.rb +43 -0
  183. data/db/migrate/v1.0/0010001210_create_lesli_account_activities.rb +50 -0
  184. data/db/migrate/v1.0/0010001310_create_lesli_account_logs.rb +45 -0
  185. data/db/migrate/v1.0/0010003210_create_lesli_user_sessions.rb +51 -0
  186. data/db/migrate/v1.0/0010003310_create_lesli_user_requests.rb +48 -0
  187. data/db/migrate/v1.0/0010003610_create_lesli_user_logs.rb +45 -0
  188. data/db/migrate/v1.0/0010004010_create_lesli_user_agents.rb +46 -0
  189. data/db/seed/development/accounts.rb +47 -0
  190. data/db/seed/development/users.rb +53 -0
  191. data/db/seed/development.rb +35 -0
  192. data/db/seed/production.rb +35 -0
  193. data/db/seed/test.rb +35 -0
  194. data/db/seed/tools.rb +60 -0
  195. data/db/seeds.rb +64 -0
  196. data/db/structure/00000000_locations.json +32 -0
  197. data/db/structure/00000000_people.json +34 -0
  198. data/db/structure/00000003_actions.json +14 -0
  199. data/db/structure/00000004_activities.json +20 -0
  200. data/db/structure/00000005_discussions.json +8 -0
  201. data/db/structure/00000006_files.json +32 -0
  202. data/db/structure/00000007_subscribers.json +11 -0
  203. data/db/structure/00000008_custom_fields.json +8 -0
  204. data/db/structure/00000201_workflows.json +17 -0
  205. data/db/structure/00000202_workflow_statuses.json +24 -0
  206. data/db/structure/00000203_workflow_associations.json +14 -0
  207. data/db/structure/00000204_workflow_actions.json +39 -0
  208. data/db/structure/00000205_workflow_checks.json +27 -0
  209. data/db/structure/00000301_custom_fields.json +38 -0
  210. data/db/structure/00000401_custom_validations.json +14 -0
  211. data/db/structure/00000402_custom_validation_rules.json +23 -0
  212. data/db/structure/00000403_custom_validation_fields.json +14 -0
  213. data/db/structure/00000501_dashboards.json +14 -0
  214. data/db/structure/00000502_dashboard_components.json +23 -0
  215. data/db/tables/0010001010_create_account_settings.rb +42 -0
  216. data/db/tables/0010001110_create_account_locations.rb +64 -0
  217. data/db/tables/0010001410_create_account_files.rb +52 -0
  218. data/db/tables/0010001510_create_account_currencies.rb +48 -0
  219. data/db/tables/0010001610_create_account_currency_exchange_rates.rb +54 -0
  220. data/db/tables/0010003010_create_user_details.rb +49 -0
  221. data/db/tables/0010003110_create_user_settings.rb +44 -0
  222. data/db/tables/0010003410_create_user_activities.rb +51 -0
  223. data/db/tables/0010003510_create_user_roles.rb +43 -0
  224. data/db/tables/0010003710_create_user_codes.rb +43 -0
  225. data/db/tables/0010003810_create_user_shortcuts.rb +46 -0
  226. data/db/tables/0010004110_create_user_tokens.rb +45 -0
  227. data/db/tables/0010005010_create_descriptors.rb +45 -0
  228. data/db/tables/0010005110_create_descriptor_privileges.rb +44 -0
  229. data/db/tables/0010005210_create_descriptor_activities.rb +51 -0
  230. data/db/tables/0010005510_create_role_descriptors.rb +44 -0
  231. data/db/tables/0010005610_create_role_activities.rb +50 -0
  232. data/db/tables/0010005710_create_role_privileges.rb +45 -0
  233. data/db/tables/0010009010_create_feedbacks.rb +56 -0
  234. data/lib/assets/javascripts/lesli/i18n.js +1095 -0
  235. data/lib/assets/javascripts/lesli/translations.js +15 -0
  236. data/lib/lesli/configuration.rb +45 -0
  237. data/lib/lesli/engine.rb +62 -0
  238. data/lib/lesli/version.rb +34 -0
  239. data/lib/lesli.rb +6 -0
  240. data/lib/sass/lesli/bulma/loader.scss +84 -0
  241. data/lib/sass/lesli/cloud-objects/discussion.scss +77 -0
  242. data/lib/sass/lesli/cloud-objects/file.scss +138 -0
  243. data/lib/sass/lesli/components/editor-richtext.scss +78 -0
  244. data/lib/sass/lesli/components/keypad.scss +109 -0
  245. data/lib/sass/lesli/devise/confirmations.scss.erb +75 -0
  246. data/lib/sass/lesli/devise/passwords.scss.erb +86 -0
  247. data/lib/sass/lesli/devise/registrations.scss.erb +50 -0
  248. data/lib/sass/lesli/devise/sessions.scss +36 -0
  249. data/lib/sass/lesli/elements/autocomplete.scss +72 -0
  250. data/lib/sass/lesli/elements/avatar.scss +48 -0
  251. data/lib/sass/lesli/elements/calendar.scss +47 -0
  252. data/lib/sass/lesli/elements/card.scss +37 -0
  253. data/lib/sass/lesli/elements/content.scss +37 -0
  254. data/lib/sass/lesli/elements/empty.scss +43 -0
  255. data/lib/sass/lesli/elements/file-uploader.scss +74 -0
  256. data/lib/sass/lesli/elements/form.scss +43 -0
  257. data/lib/sass/lesli/elements/gallery.scss +98 -0
  258. data/lib/sass/lesli/elements/header.scss +44 -0
  259. data/lib/sass/lesli/elements/input-tag.scss +73 -0
  260. data/lib/sass/lesli/elements/loading.scss +63 -0
  261. data/lib/sass/lesli/elements/map.scss +107 -0
  262. data/lib/sass/lesli/elements/msg.scss +77 -0
  263. data/lib/sass/lesli/elements/navbar.scss +115 -0
  264. data/lib/sass/lesli/elements/panel.scss +65 -0
  265. data/lib/sass/lesli/elements/tab.scss +48 -0
  266. data/lib/sass/lesli/elements/table.scss +118 -0
  267. data/lib/sass/lesli/elements/toggle.scss +102 -0
  268. data/lib/sass/lesli/elements/toolbar.scss +66 -0
  269. data/lib/sass/lesli/fonts/families.scss +47 -0
  270. data/lib/sass/lesli/fonts/mdicons.scss +84 -0
  271. data/lib/sass/lesli/fonts/remixicons.scss +2602 -0
  272. data/lib/sass/lesli/helpers/display.scss +44 -0
  273. data/lib/sass/lesli/helpers/tooltip.scss +91 -0
  274. data/lib/sass/lesli/layouts/application-announcements.scss +40 -0
  275. data/lib/sass/lesli/layouts/application-component.scss +50 -0
  276. data/lib/sass/lesli/layouts/application-engines.scss +155 -0
  277. data/lib/sass/lesli/layouts/application-footer.scss +102 -0
  278. data/lib/sass/lesli/layouts/application-header.scss +152 -0
  279. data/lib/sass/lesli/layouts/application-navbar.scss +61 -0
  280. data/lib/sass/lesli/layouts/application-search.scss +71 -0
  281. data/lib/sass/lesli/layouts/application-sidebar.scss +219 -0
  282. data/lib/sass/lesli/overrides/sweetalert.scss +106 -0
  283. data/lib/sass/lesli/pages/dashboards.scss +57 -0
  284. data/lib/sass/lesli/pages/invites.scss +81 -0
  285. data/lib/sass/lesli/pages/mfas.scss +36 -0
  286. data/lib/sass/lesli/pages/otps.scss +36 -0
  287. data/lib/sass/lesli/pages/passes.scss +35 -0
  288. data/lib/sass/lesli/panels/panel-announcements.scss +56 -0
  289. data/lib/sass/lesli/panels/panel-notification.scss +67 -0
  290. data/lib/sass/lesli/panels/panel-profile.scss +62 -0
  291. data/lib/sass/lesli/panels/panel-tasks.scss +41 -0
  292. data/lib/sass/lesli/panels/panel-ticket.scss +57 -0
  293. data/lib/sass/lesli/settings/variables.scss +148 -0
  294. data/lib/sass/lesli/shared/workflow-status-progress.scss +135 -0
  295. data/lib/sass/lesli/templates/application.scss +141 -0
  296. data/lib/sass/lesli/templates/dashboards.scss +32 -0
  297. data/lib/sass/lesli/templates/devise.scss +185 -0
  298. data/lib/sass/lesli/templates/empty.scss +42 -0
  299. data/lib/sass/lesli/templates/pdf.scss +45 -0
  300. data/lib/sass/lesli/templates/public.scss +71 -0
  301. data/lib/tasks/db.rb +75 -0
  302. data/lib/tasks/lesli/controllers.rake +103 -0
  303. data/lib/tasks/lesli_tasks.rake +23 -0
  304. data/lib/vue/application.js +269 -0
  305. data/lib/vue/apps/cloudobjects/action.vue +193 -0
  306. data/lib/vue/apps/cloudobjects/discussion/content.vue +60 -0
  307. data/lib/vue/apps/cloudobjects/discussion/element.vue +132 -0
  308. data/lib/vue/apps/cloudobjects/discussion/filters.vue +108 -0
  309. data/lib/vue/apps/cloudobjects/discussion/new.vue +130 -0
  310. data/lib/vue/apps/cloudobjects/discussion.vue +98 -0
  311. data/lib/vue/apps/cloudobjects/file/grid.vue +215 -0
  312. data/lib/vue/apps/cloudobjects/file/list.vue +106 -0
  313. data/lib/vue/apps/cloudobjects/file.vue +145 -0
  314. data/lib/vue/apps/dashboards/apps/edit.vue +105 -0
  315. data/lib/vue/apps/dashboards/apps/index.vue +114 -0
  316. data/lib/vue/apps/dashboards/apps/new.vue +89 -0
  317. data/lib/vue/apps/dashboards/apps/show.vue +76 -0
  318. data/lib/vue/apps/dashboards/components/form.vue +267 -0
  319. data/lib/vue/apps/dashboards/components/preview.vue +172 -0
  320. data/lib/vue/apps/workflows2/apps/actions/form.vue +232 -0
  321. data/lib/vue/apps/workflows2/apps/actions/forms/chatroom-form.vue +103 -0
  322. data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-clone-form.vue +125 -0
  323. data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-file-form.vue +102 -0
  324. data/lib/vue/apps/workflows2/apps/actions/forms/email-form.vue +190 -0
  325. data/lib/vue/apps/workflows2/apps/actions/forms/notification-form.vue +124 -0
  326. data/lib/vue/apps/workflows2/apps/actions/forms/send-cloud-object-file.vue +170 -0
  327. data/lib/vue/apps/workflows2/apps/actions/forms/task-form.vue +258 -0
  328. data/lib/vue/apps/workflows2/apps/actions/index.vue +146 -0
  329. data/lib/vue/apps/workflows2/apps/checks/form.vue +200 -0
  330. data/lib/vue/apps/workflows2/apps/checks/index.vue +160 -0
  331. data/lib/vue/apps/workflows2/apps/index.vue +177 -0
  332. data/lib/vue/apps/workflows2/apps/new.vue +97 -0
  333. data/lib/vue/apps/workflows2/apps/show.vue +146 -0
  334. data/lib/vue/apps/workflows2/components/associations.vue +215 -0
  335. data/lib/vue/apps/workflows2/components/chart.vue +91 -0
  336. data/lib/vue/apps/workflows2/components/workflow-form.vue +466 -0
  337. data/lib/vue/apps/workflows2/components/workflow-status-dropdown.vue +129 -0
  338. data/lib/vue/devise/confirmations.js +33 -0
  339. data/lib/vue/devise/passwords.js +137 -0
  340. data/lib/vue/devise/registrations.js +162 -0
  341. data/lib/vue/devise/sessions.js +143 -0
  342. data/lib/vue/layouts/application-announcements.vue +78 -0
  343. data/lib/vue/layouts/application-engines.vue +66 -0
  344. data/lib/vue/layouts/application-footer.vue +123 -0
  345. data/lib/vue/layouts/application-header.vue +213 -0
  346. data/lib/vue/layouts/application-navbar.vue +110 -0
  347. data/lib/vue/layouts/application-search.vue +86 -0
  348. data/lib/vue/layouts/application-sidebar.vue +63 -0
  349. data/lib/vue/layouts/dashboard-component.vue +62 -0
  350. data/lib/vue/pages/errors/app.js +32 -0
  351. data/lib/vue/pages/invites/app.js +76 -0
  352. data/lib/vue/pages/mfas/application.js +77 -0
  353. data/lib/vue/pages/onboarding/application.js +45 -0
  354. data/lib/vue/pages/onboarding/components/address.vue +120 -0
  355. data/lib/vue/pages/onboarding/components/buttons.vue +67 -0
  356. data/lib/vue/pages/onboarding/components/contact.vue +148 -0
  357. data/lib/vue/pages/onboarding/components/date-time.vue +265 -0
  358. data/lib/vue/pages/onboarding/components/finish.vue +62 -0
  359. data/lib/vue/pages/onboarding/components/general-info.vue +93 -0
  360. data/lib/vue/pages/onboarding/components/indicators.vue +78 -0
  361. data/lib/vue/pages/onboarding/components/welcome.vue +66 -0
  362. data/lib/vue/pages/onboarding/show.vue +67 -0
  363. data/lib/vue/pages/onboarding/store.js +165 -0
  364. data/lib/vue/pages/otps/application.js +90 -0
  365. data/lib/vue/pages/passes/application.js +80 -0
  366. data/lib/vue/pages/websites/application.js +34 -0
  367. data/lib/vue/panels/panel-announcements.vue +248 -0
  368. data/lib/vue/panels/panel-files.vue +281 -0
  369. data/lib/vue/panels/panel-notifications.vue +106 -0
  370. data/lib/vue/panels/panel-profile.vue +76 -0
  371. data/lib/vue/panels/panel-tasks.vue +124 -0
  372. data/lib/vue/panels/panel-tickets.vue +181 -0
  373. data/lib/vue/public.js +85 -0
  374. data/lib/vue/stores/announcements.js +75 -0
  375. data/lib/vue/stores/cloud-bell/notification.js +114 -0
  376. data/lib/vue/stores/cloudobjects/action.js +181 -0
  377. data/lib/vue/stores/cloudobjects/discussion.js +221 -0
  378. data/lib/vue/stores/cloudobjects/file.js +205 -0
  379. data/lib/vue/stores/dashboard.js +251 -0
  380. data/lib/vue/stores/firebase.js +163 -0
  381. data/lib/vue/stores/layout.js +60 -0
  382. data/lib/vue/stores/panels/announcements.js +153 -0
  383. data/lib/vue/stores/panels/task.js +66 -0
  384. data/lib/vue/stores/panels/tickets.js +129 -0
  385. data/lib/vue/stores/profile.js +90 -0
  386. data/lib/vue/stores/search.js +154 -0
  387. data/lib/vue/stores/services/translator.js +87 -0
  388. data/lib/vue/stores/workflow.js +185 -0
  389. data/lib/vue/stores/workflow2.js +345 -0
  390. data/lib/vue/stores/workflows/actions.js +327 -0
  391. data/lib/vue/stores/workflows/associations.js +130 -0
  392. data/lib/vue/stores/workflows/checks.js +210 -0
  393. data/lib/webpack/base.js +182 -0
  394. data/lib/webpack/core.js +80 -0
  395. data/lib/webpack/engines.js +162 -0
  396. data/license +674 -0
  397. data/readme.md +120 -0
  398. metadata +554 -0
@@ -0,0 +1,154 @@
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
+ // ·
37
+ import { defineStore } from "pinia"
38
+ import { reactive } from "vue"
39
+
40
+
41
+ // ·
42
+ export const useSearch = defineStore("search", {
43
+ state: () => {
44
+ return {
45
+ text: "",
46
+ timer: null,
47
+ loading: false,
48
+ showResults: false,
49
+
50
+ pagination: {},
51
+ columns: [],
52
+ records: []
53
+ }
54
+ },
55
+ actions: {
56
+
57
+ doSearch() {
58
+
59
+ if (this.text == "") {
60
+ this.showResults = false
61
+ return
62
+ }
63
+
64
+ this.loading = true
65
+
66
+ clearTimeout(this.timer)
67
+
68
+ this.timer = setTimeout(() => this.fetchSearch(), 800)
69
+
70
+ },
71
+
72
+ fetchSearch() {
73
+ this.loading = true
74
+
75
+ // filter german characteres and replace for strings
76
+ // that will be replaced in the highlight method
77
+ var wordsToHighlight = this.text.toLowerCase()
78
+ .split(/(\s+)/)
79
+ .filter( e => e.trim().length > 0)
80
+ .map(e => this.filterNonEnglishLetters(e))
81
+
82
+ // TODO: this url must be dynamically, according to the engine where we are searching
83
+ let url = this.url.dl("search").search(this.text)
84
+
85
+ // searching... :)
86
+ this.http.get(url).then(result => {
87
+ this.pagination = result.pagination
88
+ this.columns = result.columns
89
+ this.records = result.records.map(record => {
90
+
91
+ // iterate over every column in the search result
92
+ for(var key in record) {
93
+
94
+ // do not highlight the id column
95
+ if (key == 'id') continue;
96
+
97
+ // highlight the text in the search result if match with the text
98
+ // we want to search
99
+ record[key] = this.doHighlightText(record[key], wordsToHighlight)
100
+ }
101
+
102
+ return record
103
+ })
104
+ }).catch(error => {
105
+ console.log(error)
106
+ }).finally(() => {
107
+ this.loading = false
108
+ })
109
+ },
110
+
111
+ doHighlightText(textToHighlight, wordsToHighlight) {
112
+
113
+ if (!textToHighlight) return ;
114
+
115
+ // return same string if search tearm is not present
116
+ if (wordsToHighlight.length === 0) {
117
+ return text_to_highlight
118
+ }
119
+
120
+ // working with german characteres
121
+ let iQuery = new RegExp(`${wordsToHighlight.join('|')}`, 'ig');
122
+
123
+ textToHighlight = textToHighlight.toString()
124
+ // replace the matched strings in the results with the text search term
125
+ // with a tag, so we can highlight the matching results
126
+ .replace(iQuery, (matchedText, _a, _b)=>{
127
+ return `<span class="tag is-primary">${matchedText}</span>`
128
+ })
129
+
130
+ return textToHighlight
131
+
132
+ },
133
+
134
+ filterNonEnglishLetters(text) {
135
+
136
+ if (text.includes("ä")){
137
+ return text.replace("ä", "(ä|ae)")
138
+ } else if (text.includes("ae")){
139
+ return text.replace("ae", "(ä|ae)")
140
+ } else if (text.includes("ü")){
141
+ return text.replace("ü", "(ü|ue)")
142
+ }else if (text.includes("ue")){
143
+ return text.replace("ue", "(ü|ue)")
144
+ }else if (text.includes("ö")){
145
+ return text.replace("ö", "(ö|oe)")
146
+ }else if (text.includes("oe")){
147
+ return text.replace("oe", "(ö|oe)")
148
+ } else {
149
+ return text
150
+ }
151
+
152
+ }
153
+ }
154
+ })
@@ -0,0 +1,87 @@
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
+ // This store is used to manage the traslations
36
+
37
+ import { defineStore } from "pinia"
38
+
39
+ import { ref } from "vue"
40
+
41
+
42
+ import axios from "axios"
43
+
44
+ export const useServiceTranslator = defineStore("services.translator", () => {
45
+
46
+ const httpClient = axios.create({ baseURL: "https://www.googleapis.com" })
47
+
48
+ const loading = ref(false)
49
+
50
+ function getTranslation(message, source, target) {
51
+
52
+ if (!(message || source)) return
53
+
54
+ var translatedMessage = {
55
+ translatedText: message,
56
+ originalLang: target
57
+ }
58
+
59
+ if (source == target) {
60
+ return translatedMessage
61
+ }
62
+
63
+ return httpClient.get("/language/translate/v2", {
64
+ params: {
65
+ q: message,
66
+ target,
67
+ source,
68
+ key: lesli.providers.google_translate.api_key
69
+ },
70
+ headers: {
71
+ 'Content-Type': 'application/json',
72
+ 'Accept': 'application/json',
73
+ }
74
+ }).then((response) => {
75
+ translatedMessage.translatedText = response.data.data.translations[0].translatedText
76
+ return translatedMessage
77
+ }).catch((error) => {
78
+ console.error(error)
79
+ })
80
+
81
+ }
82
+
83
+ return {
84
+ loading,
85
+ getTranslation,
86
+ }
87
+ })
@@ -0,0 +1,185 @@
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
+ // · This store is needed to make http requests, manage the reactivity
36
+ // · of a workflow.
37
+
38
+ import { defineStore } from "pinia"
39
+
40
+
41
+ export const useWorkflow = defineStore("core.shared.workflow", {
42
+ state: () => {
43
+ return {
44
+
45
+ tab: 0,
46
+ panelNew: false,
47
+ panelNext: false,
48
+
49
+ // store the list of available workflows
50
+ workflows: {
51
+ loading: false,
52
+ pagination: {},
53
+ records: []
54
+ },
55
+
56
+ // stores the current working workflow
57
+ workflow: {
58
+ name: ""
59
+ },
60
+
61
+ // temporary status selected to work on
62
+ selectedStatus: {},
63
+
64
+ // working with statuses, create, update, delete
65
+ status: {
66
+ next_statuses: [],
67
+ status_type: "normal",
68
+ number: 0,
69
+ name: ""
70
+ },
71
+
72
+ }
73
+ },
74
+ actions: {
75
+
76
+ // get all the available workflows
77
+ fetchWorkflows(url) {
78
+ this.workflows.loading = true
79
+
80
+ if (!url) url = this.url[this.cloudModule](this.cloudObject)
81
+
82
+ this.http.get(url).then(result => {
83
+ this.workflows.records = result.workflows.map(workflow => {
84
+ return {
85
+ id: workflow.id,
86
+ name: workflow.name,
87
+ validation: 4, //getValidation(workflow),
88
+ default: workflow.default,
89
+ connectedTo: 2 //getConnectedTo(workflow),
90
+ }
91
+ })
92
+ }).catch(error => {
93
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
94
+ }).finally(() => {
95
+ this.loading = false
96
+ })
97
+ },
98
+
99
+
100
+ // Create a workflow with the minimal information
101
+ postWorkflow() {
102
+
103
+ let url = this.url[this.cloudModule](`${this.cloudObject}`)
104
+
105
+ return this.http.post(url, {
106
+ workflow: {
107
+ name: this.workflow.name
108
+ }
109
+ }).then(result => {
110
+ this.workflow = result
111
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
112
+ // TODO: Redirect to show view
113
+ }).catch(error => {
114
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
115
+ })
116
+ },
117
+
118
+
119
+ // Get specific workflow
120
+ fetchWorkflow (worfkflow_id){
121
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId`, { workflowId: worfkflow_id })
122
+
123
+ this.http.get(url).then(result => {
124
+ this.workflow = result
125
+
126
+ this.workflow.statuses = this.workflow.statuses.map(status => {
127
+ return {
128
+ id: status.id,
129
+ name: status.name,
130
+ number: status.number,
131
+ status_type: status.status_type,
132
+ next_statuses: status?.next_statuses || []
133
+ }
134
+ })
135
+
136
+ this.loading = false
137
+ }).catch(error => {
138
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
139
+ })
140
+ },
141
+
142
+
143
+ // Full workflow update
144
+ putWorkflow() {
145
+
146
+ //let statuses_attributes = Object.values(this.workflow.statuses).concat(this.deleted_workflow_statuses)
147
+
148
+ let url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId`, { workflowId: this.workflow.id })
149
+
150
+ let statuses_attributes = Object.values(this.workflow.statuses)
151
+
152
+ this.http.put(url, {
153
+ workflow: {
154
+ name: this.workflow.name,
155
+ statuses_attributes: statuses_attributes
156
+ }
157
+ }).then(result => {
158
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
159
+ //this.deleted_workflow_statuses = []
160
+ }).catch(error => {
161
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
162
+ }).finally(()=>{
163
+ this.loading = false
164
+ })
165
+
166
+ },
167
+
168
+
169
+ // Create a new status for the current workflow
170
+ postStatus() {
171
+
172
+ let url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId/statuses`, { workflowId: this.workflow.id })
173
+
174
+ return this.http.post(url, {
175
+ workflow_status: this.status
176
+ }).then(result => {
177
+ result.next_statuses = []
178
+ this.workflow.statuses.push(result)
179
+ this.status.name = ""
180
+ }).catch(error => {
181
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
182
+ })
183
+ }
184
+ }
185
+ })