lesli 5.0.13 → 5.0.14

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 (469) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/lesli_manifest.js +3 -6
  3. data/app/assets/images/lesli/brand/app-icon.svg +45 -39
  4. data/app/assets/javascripts/lesli/application.js +1 -0
  5. data/app/controllers/lesli/abouts_controller.rb +16 -14
  6. data/app/controllers/lesli/application_controller.rb +13 -0
  7. data/app/controllers/lesli/application_devise_controller.rb +10 -12
  8. data/app/controllers/lesli/application_lesli_controller.rb +12 -11
  9. data/app/controllers/lesli/apps_controller.rb +6 -0
  10. data/app/controllers/lesli/roles_controller.rb +2 -2
  11. data/app/helpers/lesli/general_helper.rb +18 -5
  12. data/app/helpers/lesli/html_helper.rb +8 -0
  13. data/app/helpers/lesli/navigation_helper.rb +30 -11
  14. data/app/helpers/lesli/system_helper.rb +2 -2
  15. data/app/helpers/lesli/turbo_helper.rb +58 -0
  16. data/app/interfaces/lesli/customization_interface.rb +42 -0
  17. data/app/interfaces/lesli/requester_interface.rb +103 -0
  18. data/app/interfaces/lesli/responder_interface.rb +127 -0
  19. data/app/lib/date2.rb +1 -199
  20. data/app/lib/lesli/courier.rb +54 -0
  21. data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
  22. data/app/mailers/lesli/devise_mailer.rb +16 -8
  23. data/app/models/concerns/account_initializer.rb +27 -68
  24. data/app/models/concerns/lesli/has_activities.rb +29 -0
  25. data/app/models/concerns/user_extensions.rb +34 -19
  26. data/app/models/concerns/user_security.rb +4 -4
  27. data/app/models/lesli/account.rb +13 -20
  28. data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
  29. data/app/models/lesli/role/{power.rb → action.rb} +6 -4
  30. data/app/models/lesli/role.rb +7 -15
  31. data/app/models/lesli/shared/catalog.rb +20 -0
  32. data/app/models/lesli/shared/dashboard.rb +1 -1
  33. data/app/models/lesli/user/activity.rb +5 -0
  34. data/app/models/lesli/user/detail.rb +5 -5
  35. data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
  36. data/app/models/lesli/user/{power.rb → role.rb} +2 -3
  37. data/app/models/lesli/user/session.rb +3 -4
  38. data/app/models/lesli/user.rb +50 -46
  39. data/app/operators/lesli/controller_operator.rb +3 -1
  40. data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
  41. data/app/operators/lesli/user_registration_operator.rb +3 -2
  42. data/app/services/lesli/application_lesli_service.rb +8 -4
  43. data/app/services/lesli/role/action_service.rb +58 -0
  44. data/app/services/lesli/role_service.rb +232 -0
  45. data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
  46. data/app/services/lesli/user_service.rb +85 -1
  47. data/app/views/lesli/apps/show.html.erb +52 -0
  48. data/app/views/lesli/layouts/application-devise.html.erb +5 -7
  49. data/app/views/lesli/layouts/application-lesli.html.erb +18 -24
  50. data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
  51. data/app/views/lesli/partials/_application-data.html.erb +3 -77
  52. data/app/views/lesli/partials/_application-head.html.erb +7 -4
  53. data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
  54. data/app/views/lesli/partials/_application-lesli-header.html.erb +73 -49
  55. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -16
  56. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +12 -9
  57. data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
  58. data/app/views/lesli/partials/_application-lesli-scss.html.erb +1 -1
  59. data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
  60. data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
  61. data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
  62. data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
  63. data/config/importmap.rb +14 -0
  64. data/config/initializers/lesli.rb +20 -12
  65. data/config/initializers/lesli_migration_helpers.rb +61 -0
  66. data/config/locales/translations.en.yml +1 -26
  67. data/config/locales/translations.es.yml +1 -26
  68. data/config/locales/translations.fr.yml +1 -26
  69. data/config/locales/translations.it.yml +1 -26
  70. data/config/locales/translations.pt.yml +1 -26
  71. data/config/routes.rb +3 -1
  72. data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
  73. data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
  74. data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
  75. data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
  76. data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
  77. data/{lib/scss/layouts/application-content.scss → db/migrate/v1/0000110310_create_lesli_account_settings.rb} +8 -6
  78. data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
  79. data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
  80. data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
  81. data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
  82. data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
  83. data/db/{seed/production.rb → migrate/v1/0000130410_create_lesli_user_activities.rb} +7 -4
  84. data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
  85. data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
  86. data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
  87. data/db/seed/{production/users.rb → users.rb} +4 -10
  88. data/db/seed/{tools.rb → xyz.rb} +2 -7
  89. data/db/seeds.rb +3 -2
  90. data/db/structure/00000020_catalogs.json +0 -0
  91. data/lib/generators/{application_lesli_generator.rb → application_lesli_generator_base.rb} +4 -4
  92. data/lib/generators/lesli/spec/spec_generator.rb +2 -2
  93. data/lib/generators/lesli/view/USAGE +8 -0
  94. data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
  95. data/lib/generators/lesli/view/templates/spec-model.template +70 -0
  96. data/lib/generators/lesli/view/view_generator.rb +25 -0
  97. data/lib/lesli/configuration.rb +7 -10
  98. data/lib/lesli/engine.rb +22 -3
  99. data/lib/lesli/r_spec.rb +5 -2
  100. data/lib/lesli/routing.rb +42 -9
  101. data/lib/lesli/version.rb +2 -2
  102. data/lib/lesli.rb +11 -0
  103. data/lib/migrate/common.rb +94 -0
  104. data/lib/migrate/items/action_structure.rb +51 -0
  105. data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
  106. data/lib/migrate/items/attachment_structure.rb +62 -0
  107. data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
  108. data/lib/migrate/items/subscriber_structure.rb +49 -0
  109. data/lib/migrate/items/version_structure.rb +53 -0
  110. data/lib/migrate/shared/account_structure.rb +21 -0
  111. data/lib/migrate/shared/catalog_structure.rb +30 -0
  112. data/lib/migrate/shared/dashboard_structure.rb +54 -0
  113. data/lib/migrate/shared/setting_structure.rb +20 -0
  114. data/lib/rspec/config/spec_coverage.rb +95 -0
  115. data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
  116. data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
  117. data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
  118. data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
  119. data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
  120. data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
  121. data/lib/rspec/helpers/rails_helper.rb +134 -0
  122. data/lib/rspec/helpers/response_request_helper.rb +214 -0
  123. data/lib/rspec/helpers/response_service_helper.rb +66 -0
  124. data/lib/rspec/helpers/spec_helper.rb +99 -0
  125. data/lib/rspec/lesli_api_tester.rb +133 -0
  126. data/lib/rspec/lesli_service_tester.rb +46 -0
  127. data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
  128. data/lib/rspec/testers/model.rb +36 -0
  129. data/lib/rspec/testers/request.rb +84 -0
  130. data/lib/tasks/lesli/db.rake +5 -3
  131. data/lib/tasks/lesli/git.rake +28 -32
  132. data/lib/tasks/lesli/github.rake +89 -0
  133. data/lib/tasks/lesli_tasks.rake +3 -3
  134. data/readme.md +28 -17
  135. metadata +134 -394
  136. data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
  137. data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
  138. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  139. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  140. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  141. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  142. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
  143. data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
  144. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
  145. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  146. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  147. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  148. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
  149. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  150. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  151. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  152. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  153. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  154. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  155. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  156. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  157. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  158. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  159. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  160. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  161. data/app/assets/icons/lesli/engine-admin.svg +0 -1
  162. data/app/assets/icons/lesli/engine-audit.svg +0 -1
  163. data/app/assets/icons/lesli/engine-babel.svg +0 -1
  164. data/app/assets/icons/lesli/engine-bell.svg +0 -1
  165. data/app/assets/icons/lesli/engine-books.svg +0 -1
  166. data/app/assets/icons/lesli/engine-calendar.svg +0 -1
  167. data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
  168. data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
  169. data/app/assets/icons/lesli/engine-focus.svg +0 -1
  170. data/app/assets/icons/lesli/engine-kb.svg +0 -1
  171. data/app/assets/icons/lesli/engine-leaf.svg +0 -1
  172. data/app/assets/icons/lesli/engine-lesli.svg +0 -1
  173. data/app/assets/icons/lesli/engine-letter.svg +0 -1
  174. data/app/assets/icons/lesli/engine-mailer.svg +0 -1
  175. data/app/assets/icons/lesli/engine-one.svg +0 -1
  176. data/app/assets/icons/lesli/engine-profile.svg +0 -1
  177. data/app/assets/icons/lesli/engine-proposal.svg +0 -1
  178. data/app/assets/icons/lesli/engine-scraper.svg +0 -1
  179. data/app/assets/icons/lesli/engine-security.svg +0 -1
  180. data/app/assets/icons/lesli/engine-shared.svg +0 -1
  181. data/app/assets/icons/lesli/engine-shield.svg +0 -1
  182. data/app/assets/icons/lesli/engine-storage.svg +0 -1
  183. data/app/assets/icons/lesli/engine-support.svg +0 -1
  184. data/app/assets/icons/lesli/engine-talk.svg +0 -1
  185. data/app/assets/icons/lesli/engine-team.svg +0 -1
  186. data/app/assets/icons/lesli/engine-time.svg +0 -1
  187. data/app/assets/icons/lesli/locale-en.svg +0 -1
  188. data/app/assets/icons/lesli/locale-es.svg +0 -1
  189. data/app/assets/icons/lesli/locale-fr.svg +0 -1
  190. data/app/assets/icons/lesli/locale-it.svg +0 -1
  191. data/app/assets/icons/lesli/locale-pt.svg +0 -1
  192. data/app/assets/icons/readme.md +0 -10
  193. data/app/assets/javascripts/lesli/templates/application.js +0 -14
  194. data/app/assets/javascripts/lesli/templates/public.js +0 -14
  195. data/app/assets/stylesheets/lesli/templates/application.css +0 -2918
  196. data/app/assets/stylesheets/lesli/templates/public.css +0 -1
  197. data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
  198. data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
  199. data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
  200. data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
  201. data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
  202. data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
  203. data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
  204. data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
  205. data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
  206. data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
  207. data/app/lib/lesli/system.rb +0 -110
  208. data/app/models/lesli/cloud_object/action.rb +0 -70
  209. data/app/models/lesli/cloud_object/activity.rb +0 -311
  210. data/app/models/lesli/cloud_object/custom_field.rb +0 -158
  211. data/app/models/lesli/cloud_object/discussion.rb +0 -219
  212. data/app/models/lesli/cloud_object/subscriber.rb +0 -186
  213. data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
  214. data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
  215. data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
  216. data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
  217. data/config/initializers/devise.rb +0 -336
  218. data/db/seed/development/users.rb +0 -52
  219. data/db/seed/production/accounts.rb +0 -50
  220. data/db/structure/00000000_people.json +0 -34
  221. data/db/structure/00000003_actions.json +0 -14
  222. data/db/structure/00000004_activities.json +0 -20
  223. data/db/structure/00000005_discussions.json +0 -8
  224. data/db/structure/00000006_files.json +0 -32
  225. data/db/structure/00000007_subscribers.json +0 -11
  226. data/db/structure/00000501_dashboards.json +0 -14
  227. data/db/structure/00000502_dashboard_components.json +0 -23
  228. data/db/tables/0010003410_create_user_activities.rb +0 -51
  229. data/db/tables/0010003710_create_user_codes.rb +0 -43
  230. data/db/tables/0010004110_create_user_tokens.rb +0 -45
  231. data/db/tables/0010005610_create_role_activities.rb +0 -50
  232. data/db/tables/0010009010_create_feedbacks.rb +0 -56
  233. data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
  234. data/lib/scss/cloud-objects/discussion.scss +0 -80
  235. data/lib/scss/cloud-objects/file.scss +0 -138
  236. data/lib/scss/components/keypad.scss +0 -109
  237. data/lib/scss/elements/autocomplete.scss +0 -72
  238. data/lib/scss/elements/card.scss +0 -37
  239. data/lib/scss/elements/empty.scss +0 -43
  240. data/lib/scss/elements/file-uploader.scss +0 -74
  241. data/lib/scss/elements/gallery.scss +0 -98
  242. data/lib/scss/elements/input-tag.scss +0 -73
  243. data/lib/scss/elements/loading.scss +0 -63
  244. data/lib/scss/elements/map.scss +0 -107
  245. data/lib/scss/elements/navbar.scss +0 -115
  246. data/lib/scss/elements/table.scss +0 -118
  247. data/lib/scss/elements/toolbar.scss +0 -66
  248. data/lib/scss/fonts/families.scss +0 -47
  249. data/lib/scss/fonts/mdicons.scss +0 -82
  250. data/lib/scss/fonts/remixicons.scss +0 -2602
  251. data/lib/scss/helpers/display.scss +0 -44
  252. data/lib/scss/helpers/tooltip.scss +0 -91
  253. data/lib/scss/layouts/application-announcements.scss +0 -40
  254. data/lib/scss/layouts/application-component.scss +0 -39
  255. data/lib/scss/layouts/application-engines.scss +0 -125
  256. data/lib/scss/layouts/application-footer.scss +0 -102
  257. data/lib/scss/layouts/application-header.scss +0 -91
  258. data/lib/scss/layouts/application-navigation.scss +0 -79
  259. data/lib/scss/layouts/application-search.scss +0 -71
  260. data/lib/scss/layouts/application-sidebar.scss +0 -219
  261. data/lib/scss/overrides/notification.scss +0 -75
  262. data/lib/scss/overrides/sweetalert.scss +0 -106
  263. data/lib/scss/pages/devise-simple.scss +0 -89
  264. data/lib/scss/pages/devise.scss +0 -179
  265. data/lib/scss/pages/invites.scss +0 -81
  266. data/lib/scss/panels/panel-announcements.scss +0 -56
  267. data/lib/scss/panels/panel-notification.scss +0 -67
  268. data/lib/scss/panels/panel-profile.scss +0 -62
  269. data/lib/scss/panels/panel-support-ticket.scss +0 -56
  270. data/lib/scss/panels/panel-tasks.scss +0 -41
  271. data/lib/scss/settings/variables.scss +0 -148
  272. data/lib/scss/shared/workflow-status-progress.scss +0 -135
  273. data/lib/scss/templates/application.scss +0 -127
  274. data/lib/scss/templates/component.scss +0 -39
  275. data/lib/scss/templates/dashboards.scss +0 -53
  276. data/lib/scss/templates/empty.scss +0 -42
  277. data/lib/scss/templates/pdf.scss +0 -45
  278. data/lib/scss/templates/public.scss +0 -72
  279. data/lib/vue/application.js +0 -285
  280. data/lib/vue/cloudobjects/discussion/content.vue +0 -62
  281. data/lib/vue/cloudobjects/discussion/element.vue +0 -170
  282. data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
  283. data/lib/vue/cloudobjects/discussion/new.vue +0 -134
  284. data/lib/vue/cloudobjects/discussion.vue +0 -99
  285. data/lib/vue/cloudobjects/stores/discussion.js +0 -212
  286. data/lib/vue/layouts/application-announcements.vue +0 -78
  287. data/lib/vue/layouts/application-component.vue +0 -38
  288. data/lib/vue/layouts/application-container.vue +0 -48
  289. data/lib/vue/layouts/application-engines.vue +0 -66
  290. data/lib/vue/layouts/application-footer.vue +0 -123
  291. data/lib/vue/layouts/application-header.vue +0 -252
  292. data/lib/vue/layouts/application-navbar.vue +0 -110
  293. data/lib/vue/layouts/application-search.vue +0 -86
  294. data/lib/vue/layouts/application-sidebar.vue +0 -63
  295. data/lib/vue/pages/errors/app.js +0 -32
  296. data/lib/vue/pages/invites/app.js +0 -76
  297. data/lib/vue/pages/mfas/application.js +0 -77
  298. data/lib/vue/pages/onboarding/application.js +0 -45
  299. data/lib/vue/pages/onboarding/components/address.vue +0 -120
  300. data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
  301. data/lib/vue/pages/onboarding/components/contact.vue +0 -148
  302. data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
  303. data/lib/vue/pages/onboarding/components/finish.vue +0 -62
  304. data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
  305. data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
  306. data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
  307. data/lib/vue/pages/onboarding/show.vue +0 -67
  308. data/lib/vue/pages/onboarding/store.js +0 -165
  309. data/lib/vue/pages/otps/application.js +0 -90
  310. data/lib/vue/pages/passes/application.js +0 -80
  311. data/lib/vue/pages/websites/application.js +0 -34
  312. data/lib/vue/panels/panel-announcements.vue +0 -248
  313. data/lib/vue/panels/panel-bell-notifications.vue +0 -102
  314. data/lib/vue/panels/panel-files.vue +0 -281
  315. data/lib/vue/panels/panel-profile.vue +0 -76
  316. data/lib/vue/panels/panel-support-tickets.vue +0 -163
  317. data/lib/vue/panels/panel-tasks.vue +0 -124
  318. data/lib/vue/panels/stores/bell-notifications.js +0 -46
  319. data/lib/vue/panels/stores/support-tickets.js +0 -103
  320. data/lib/vue/public.js +0 -83
  321. data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
  322. data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
  323. data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
  324. data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
  325. data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
  326. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
  327. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
  328. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
  329. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
  330. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
  331. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
  332. data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
  333. data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
  334. data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
  335. data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
  336. data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
  337. data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
  338. data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
  339. data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
  340. data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
  341. data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
  342. data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
  343. data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
  344. data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
  345. data/lib/vue/refactor/stores/entities/announcements.js +0 -75
  346. data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
  347. data/lib/vue/refactor/stores/entities/workflow.js +0 -185
  348. data/lib/vue/refactor/stores/panels/announcements.js +0 -153
  349. data/lib/vue/refactor/stores/panels/notification.js +0 -114
  350. data/lib/vue/refactor/stores/panels/task.js +0 -66
  351. data/lib/vue/refactor/stores/panels/tickets.js +0 -129
  352. data/lib/vue/refactor/stores/role.js +0 -243
  353. data/lib/vue/refactor/stores/translations.json +0 -60
  354. data/lib/vue/refactor/stores/users.js +0 -98
  355. data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
  356. data/lib/vue/shared/dashboards/apps/index.vue +0 -112
  357. data/lib/vue/shared/dashboards/apps/new.vue +0 -89
  358. data/lib/vue/shared/dashboards/apps/show.vue +0 -88
  359. data/lib/vue/shared/dashboards/components/form.vue +0 -246
  360. data/lib/vue/shared/services/firebase.js +0 -163
  361. data/lib/vue/shared/services/translator.js +0 -87
  362. data/lib/vue/shared/stores/command.js +0 -154
  363. data/lib/vue/shared/stores/dashboard.js +0 -253
  364. data/lib/vue/shared/stores/layout.js +0 -61
  365. data/lib/vue/shared/stores/systemController.js +0 -67
  366. data/lib/vue/shared/stores/users.js +0 -57
  367. data/lib/vue/stores/translations.json +0 -177
  368. data/lib/vue/translation.js +0 -45
  369. data/lib/webpack/base.js +0 -191
  370. data/lib/webpack/core.js +0 -93
  371. data/lib/webpack/engines.js +0 -167
  372. data/lib/webpack/root.js +0 -105
  373. data/lib/webpack/version.js +0 -78
  374. data/vendor/bulma/LICENSE +0 -21
  375. data/vendor/bulma/bulma.sass +0 -10
  376. data/vendor/bulma/css/bulma-rtl.css +0 -11851
  377. data/vendor/bulma/css/bulma-rtl.min.css +0 -1
  378. data/vendor/bulma/css/bulma.css +0 -11851
  379. data/vendor/bulma/css/bulma.min.css +0 -1
  380. data/vendor/bulma/sass/base/_all.sass +0 -6
  381. data/vendor/bulma/sass/base/animations.sass +0 -5
  382. data/vendor/bulma/sass/base/generic.sass +0 -145
  383. data/vendor/bulma/sass/base/helpers.sass +0 -1
  384. data/vendor/bulma/sass/base/minireset.sass +0 -79
  385. data/vendor/bulma/sass/components/_all.sass +0 -15
  386. data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
  387. data/vendor/bulma/sass/components/card.sass +0 -103
  388. data/vendor/bulma/sass/components/dropdown.sass +0 -83
  389. data/vendor/bulma/sass/components/level.sass +0 -79
  390. data/vendor/bulma/sass/components/media.sass +0 -59
  391. data/vendor/bulma/sass/components/menu.sass +0 -59
  392. data/vendor/bulma/sass/components/message.sass +0 -101
  393. data/vendor/bulma/sass/components/modal.sass +0 -117
  394. data/vendor/bulma/sass/components/navbar.sass +0 -446
  395. data/vendor/bulma/sass/components/pagination.sass +0 -167
  396. data/vendor/bulma/sass/components/panel.sass +0 -121
  397. data/vendor/bulma/sass/components/tabs.sass +0 -176
  398. data/vendor/bulma/sass/elements/_all.sass +0 -16
  399. data/vendor/bulma/sass/elements/box.sass +0 -26
  400. data/vendor/bulma/sass/elements/button.sass +0 -357
  401. data/vendor/bulma/sass/elements/container.sass +0 -29
  402. data/vendor/bulma/sass/elements/content.sass +0 -162
  403. data/vendor/bulma/sass/elements/form.sass +0 -1
  404. data/vendor/bulma/sass/elements/icon.sass +0 -46
  405. data/vendor/bulma/sass/elements/image.sass +0 -73
  406. data/vendor/bulma/sass/elements/notification.sass +0 -52
  407. data/vendor/bulma/sass/elements/other.sass +0 -31
  408. data/vendor/bulma/sass/elements/progress.sass +0 -73
  409. data/vendor/bulma/sass/elements/table.sass +0 -134
  410. data/vendor/bulma/sass/elements/tag.sass +0 -140
  411. data/vendor/bulma/sass/elements/title.sass +0 -70
  412. data/vendor/bulma/sass/form/_all.sass +0 -9
  413. data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
  414. data/vendor/bulma/sass/form/file.sass +0 -184
  415. data/vendor/bulma/sass/form/input-textarea.sass +0 -66
  416. data/vendor/bulma/sass/form/select.sass +0 -88
  417. data/vendor/bulma/sass/form/shared.sass +0 -60
  418. data/vendor/bulma/sass/form/tools.sass +0 -215
  419. data/vendor/bulma/sass/grid/_all.sass +0 -5
  420. data/vendor/bulma/sass/grid/columns.sass +0 -513
  421. data/vendor/bulma/sass/grid/tiles.sass +0 -36
  422. data/vendor/bulma/sass/helpers/_all.sass +0 -12
  423. data/vendor/bulma/sass/helpers/color.sass +0 -39
  424. data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
  425. data/vendor/bulma/sass/helpers/float.sass +0 -10
  426. data/vendor/bulma/sass/helpers/other.sass +0 -14
  427. data/vendor/bulma/sass/helpers/overflow.sass +0 -2
  428. data/vendor/bulma/sass/helpers/position.sass +0 -7
  429. data/vendor/bulma/sass/helpers/spacing.sass +0 -31
  430. data/vendor/bulma/sass/helpers/typography.sass +0 -103
  431. data/vendor/bulma/sass/helpers/visibility.sass +0 -122
  432. data/vendor/bulma/sass/layout/_all.sass +0 -6
  433. data/vendor/bulma/sass/layout/footer.sass +0 -11
  434. data/vendor/bulma/sass/layout/hero.sass +0 -153
  435. data/vendor/bulma/sass/layout/section.sass +0 -17
  436. data/vendor/bulma/sass/utilities/_all.sass +0 -9
  437. data/vendor/bulma/sass/utilities/animations.sass +0 -1
  438. data/vendor/bulma/sass/utilities/controls.sass +0 -49
  439. data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
  440. data/vendor/bulma/sass/utilities/extends.sass +0 -25
  441. data/vendor/bulma/sass/utilities/functions.sass +0 -135
  442. data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
  443. data/vendor/bulma/sass/utilities/mixins.sass +0 -303
  444. data/vendor/lesli-css/_index.scss +0 -34
  445. data/vendor/lesli-css/lesli.scss +0 -51
  446. data/vendor/lesli-css/license +0 -28
  447. data/vendor/lesli-css/src/base/fonts.scss +0 -50
  448. data/vendor/lesli-css/src/base/normalize.scss +0 -118
  449. data/vendor/lesli-css/src/components/blockquote.scss +0 -61
  450. data/vendor/lesli-css/src/components/columns.scss +0 -92
  451. data/vendor/lesli-css/src/components/container.scss +0 -47
  452. data/vendor/lesli-css/src/components/navigation.scss +0 -59
  453. data/vendor/lesli-css/src/functions/colors.scss +0 -184
  454. data/vendor/lesli-css/src/helpers/units.scss +0 -44
  455. data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
  456. data/vendor/lesli-css/src/mixins/flex.scss +0 -80
  457. data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
  458. data/vendor/lesli-css/src/settings/variables.scss +0 -26
  459. data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
  460. data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
  461. data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
  462. data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
  463. data/vendor/lesli-css/vendor/normalize.scss +0 -351
  464. data/vendor/remixicon/License +0 -201
  465. data/vendor/remixicon/fonts/remixicon.css +0 -2583
  466. /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
  467. /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
  468. /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
  469. /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e09c65f2654f5b1bf015bea9a64aa911d8037503c10af1972bb91ca9511db8e1
4
- data.tar.gz: 508e55c468892569ee3825e65a9d4da6116b986f1ce0d70ab30715b2f0b63861
3
+ metadata.gz: e263589d96d2eba1edcd75463c595ec8862626c6ca044f418bba462fe681e17f
4
+ data.tar.gz: 255ea3108a0a2c8102f89808aa9fd560becd962e85cdbcd3e938e8e9df50fd84
5
5
  SHA512:
6
- metadata.gz: 8cf347004a6045dd488511449336e4bac0ce379136892ef2a6865adccee50e3bf8d1223ee281eb06fc7af1ec6e451c86c9333f81dd23b18d61ee643108b44449
7
- data.tar.gz: ac613f038fb2957e10d1858baf0e0f7304905b34267ce5d18ca2d46428def63025f10de797a0ea096708e989f8488709db8912184a8c35c6b518f092d9a8c4b2
6
+ metadata.gz: 0f63e07db9f952946a3c78833125b4c432d920ea0c6e5d0800ea93f2104463f31b843c052d47b7b8ae707e93348df7605d43cd4900b5ed0073cda37ed7575e2e
7
+ data.tar.gz: 802ab7f0cccd22808fd648c2f9468b9980db314ada31b4e2972047ea475be6257d63d67c521f0e3cb1533d1b9c73383a23e61bdd3ae515624abd95ef804c5559
@@ -36,10 +36,7 @@ Building a better future, one line of code at a time.
36
36
  //= link_tree ../images/lesli .jpg
37
37
  //= link_tree ../images/lesli .svg
38
38
 
39
-
40
- // · Framework asssets
39
+ // ·
41
40
  // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
42
- //= link lesli/templates/public.css
43
- //= link lesli/templates/application.css
44
-
45
- //= link lesli/i18n.js
41
+ //= link lesli/application.css
42
+ //= link lesli/application.js
@@ -1,42 +1,48 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
2
  <svg
3
- xmlns:dc="http://purl.org/dc/elements/1.1/"
4
- xmlns:cc="http://creativecommons.org/ns#"
5
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
- xmlns:svg="http://www.w3.org/2000/svg"
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
- inkscape:version="1.0 (4035a4f, 2020-05-01)"
11
- height="792.88586"
12
- width="913.88531"
13
- sodipodi:docname="lesli-icon.svg"
14
- version="1.1"
15
- viewBox="0 0 913.88531 792.88586"
16
- data-name="Layer 1"
17
- id="Layer_1">
18
- <sodipodi:namedview
19
- inkscape:current-layer="Layer_1"
20
- inkscape:window-maximized="1"
21
- inkscape:window-y="23"
22
- inkscape:window-x="0"
23
- inkscape:cy="396.44301"
24
- inkscape:cx="456.948"
25
- inkscape:zoom="0.85703125"
26
- showgrid="false"
27
- id="namedview19"
28
- inkscape:window-height="940"
29
- inkscape:window-width="1680"
30
- inkscape:pageshadow="2"
31
- inkscape:pageopacity="0"
32
- guidetolerance="10"
33
- gridtolerance="10"
34
- objecttolerance="10"
35
- borderopacity="1"
36
- bordercolor="#666666"
37
- pagecolor="#ffffff" />
38
- <defs id="defs12">
39
- <style id="style10">.cls-1{fill:#214FBD;}</style>
40
- </defs>
41
- <path style="stroke-width:1.6285" id="path16" d="M 913.8853,396.44306 A 179.92038,169.79974 0 0 0 765.26202,229.31696 179.85333,169.73645 0 0 0 456.44871,63.772899 179.80304,169.68899 0 0 0 147.68569,229.44353 a 179.85333,169.73645 0 0 0 0,333.99906 179.85333,169.73645 0 0 0 308.76302,165.67063 179.80304,169.68899 0 0 0 308.81331,-165.54406 179.92038,169.79974 0 0 0 148.62328,-167.1261 z m -446.00404,135.169 v 29.47331 H 412.56241 V 448.15975 A 32.654887,30.818028 0 0 0 379.84048,417.34173 H 260.18412 V 365.1346 h 119.65636 a 32.67165,30.833847 0 0 0 32.65488,-30.83385 V 221.32768 h 55.31885 v 112.9098 a 32.688413,30.849668 0 0 0 32.72194,30.83384 h 119.6396 v 52.20713 h -119.6396 a 32.67165,30.833847 0 0 0 -32.67165,30.81803 v 83.4523 z" class="cls-1" />
3
+ inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
4
+ height="792.88586"
5
+ width="913.88531"
6
+ sodipodi:docname="app-icon.svg"
7
+ version="1.1"
8
+ viewBox="0 0 913.88531 792.88586"
9
+ data-name="Layer 1"
10
+ id="Layer_1"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ xmlns:svg="http://www.w3.org/2000/svg">
15
+ <sodipodi:namedview
16
+ inkscape:current-layer="Layer_1"
17
+ inkscape:window-maximized="0"
18
+ inkscape:window-y="25"
19
+ inkscape:window-x="0"
20
+ inkscape:cy="396.13491"
21
+ inkscape:cx="457.9763"
22
+ inkscape:zoom="0.85703125"
23
+ showgrid="false"
24
+ id="namedview19"
25
+ inkscape:window-height="996"
26
+ inkscape:window-width="1792"
27
+ inkscape:pageshadow="2"
28
+ inkscape:pageopacity="0"
29
+ guidetolerance="10"
30
+ gridtolerance="10"
31
+ objecttolerance="10"
32
+ borderopacity="1"
33
+ bordercolor="#666666"
34
+ pagecolor="#ffffff"
35
+ inkscape:showpageshadow="2"
36
+ inkscape:pagecheckerboard="0"
37
+ inkscape:deskcolor="#d1d1d1" />
38
+ <defs
39
+ id="defs12">
40
+ <style
41
+ id="style10">.cls-1{fill:#214FBD;}</style>
42
+ </defs>
43
+ <path
44
+ style="stroke-width:1.32288"
45
+ id="path16"
46
+ d="M 820.53981,396.44304 A 143.16576,140.81379 0 0 0 702.2777,257.84649 143.1124,140.76129 0 0 0 456.54962,120.56192 143.07239,140.72194 0 0 0 210.86154,257.95145 a 143.1124,140.76129 0 0 0 0,276.98318 A 143.1124,140.76129 0 0 0 456.54962,672.32416 143.07239,140.72194 0 0 0 702.2777,535.03958 143.16576,140.81379 0 0 0 820.53981,396.44304 Z M 465.64669,508.53778 v 24.44202 h -44.01816 v -93.64846 a 25.984058,25.557183 0 0 0 -26.03741,-25.55718 h -95.21263 v -43.29502 h 95.21263 a 25.997396,25.570302 0 0 0 25.98405,-25.5703 v -93.6878 h 44.01816 v 93.63533 a 26.010735,25.583422 0 0 0 26.03742,25.5703 h 95.1993 v 43.29502 h -95.1993 a 25.997396,25.570302 0 0 0 -25.9974,25.55718 v 69.20644 z"
47
+ class="cls-1" />
42
48
  </svg>
@@ -0,0 +1 @@
1
+ import "@hotwired/turbo-rails";
@@ -33,26 +33,28 @@ Building a better future, one line of code at a time.
33
33
  module Lesli
34
34
  class AboutsController < ApplicationLesliController
35
35
 
36
+ # def status
37
+ # respond_with_successful({ :Lesli => "Ruby on Rails SaaS Development Framework." })
38
+ # end
39
+
36
40
  # GET /status
37
41
  def show
38
42
  respond_to do |format|
39
43
  format.html {}
40
44
  format.json {
41
- if Rails.env.production?
42
- respond_with_successful({ :Lesli => "Ruby on Rails SaaS Development Framework." })
43
- else
44
- # get installed engines
45
- @lesli_engines = Lesli::System.engines.map { |engine, engine_info|
46
- {
47
- :name => engine_info[:name],
48
- :code => engine_info[:code],
49
- :path => engine_info[:path],
50
- :build => engine_info[:build],
51
- :version => engine_info[:version]
52
- }
45
+
46
+ # get installed engines
47
+ @lesli_engines = LesliSystem.engines.map { |engine, engine_info|
48
+ {
49
+ :name => engine_info[:name],
50
+ :code => engine_info[:code],
51
+ :path => engine_info[:path],
52
+ :build => engine_info[:build],
53
+ :version => engine_info[:version],
54
+ :description => engine_info[:description]
53
55
  }
54
- respond_with_successful(@lesli_engines)
55
- end
56
+ }
57
+ respond_with_successful(@lesli_engines)
56
58
  }
57
59
  end
58
60
  end
@@ -34,6 +34,8 @@ module Lesli
34
34
  class ApplicationController < ActionController::Base
35
35
  layout "lesli/layouts/application-public"
36
36
 
37
+ add_flash_types(:info, :danger, :success, :warning)
38
+
37
39
  attr_reader :query
38
40
  attr_reader :engine_path
39
41
 
@@ -42,6 +44,17 @@ module Lesli
42
44
  @lesli = {}
43
45
  end
44
46
 
47
+ # Meta-programming to define flash setter methods dynamically
48
+ # success("Everything worked!")
49
+ # danger("Oops, there was an error.")
50
+ # info("Just an informational message.")
51
+ # warning("This is a warning.")
52
+ [:success, :danger, :warning, :info].each do |flash_type|
53
+ define_method(flash_type) do |message|
54
+ flash[flash_type] = message
55
+ end
56
+ end
57
+
45
58
  def language
46
59
 
47
60
  # check if param locale was sent by the user
@@ -2,7 +2,7 @@
2
2
 
3
3
  Lesli
4
4
 
5
- Copyright (c) 2023, Lesli Technologies, S. A.
5
+ Copyright (c) 2025, Lesli Technologies, S. A.
6
6
 
7
7
  This program is free software: you can redistribute it and/or modify
8
8
  it under the terms of the GNU General Public License as published by
@@ -17,25 +17,24 @@ GNU General Public License for more details.
17
17
  You should have received a copy of the GNU General Public License
18
18
  along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
- Lesli · Your Smart Business Assistant.
20
+ Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
26
- @website https://lesli.tech
26
+ @website https://www.lesli.tech
27
27
  @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
28
 
29
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
- // ·
31
-
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
32
31
  =end
33
32
 
34
33
  module Lesli
35
- class ApplicationDeviseController < ActionController::Base
36
- include Interfaces::Application::Responder
37
- include Interfaces::Application::Requester
38
- include Interfaces::Application::Logger
34
+ class ApplicationDeviseController < ApplicationController
35
+ include Lesli::ResponderInterface
36
+ include Lesli::RequesterInterface
37
+ include LesliAudit::LoggerInterface if defined?(LesliAudit)
39
38
 
40
39
  layout "lesli/layouts/application-devise"
41
40
 
@@ -49,6 +48,5 @@ module Lesli
49
48
  }
50
49
  super
51
50
  end
52
-
53
51
  end
54
52
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Lesli
4
4
 
5
- Copyright (c) 2023, Lesli Technologies, S. A.
5
+ Copyright (c) 2025, Lesli Technologies, S. A.
6
6
 
7
7
  This program is free software: you can redistribute it and/or modify
8
8
  it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
@@ -31,27 +31,28 @@ Building a better future, one line of code at a time.
31
31
  =end
32
32
 
33
33
  module Lesli
34
- class ApplicationLesliController < ApplicationController
35
- include Interfaces::Application::Authorization
36
- include Interfaces::Application::Customization
37
- include Interfaces::Application::Responder
38
- include Interfaces::Application::Requester
39
- include Interfaces::Application::Logger
34
+ class ApplicationLesliController < ApplicationController
35
+
36
+ include Lesli::ResponderInterface
37
+ include Lesli::RequesterInterface
38
+ include Lesli::CustomizationInterface
39
+ include LesliAudit::LoggerInterface if defined?(LesliAudit)
40
+ include LesliShield::AuthenticationInterface if defined?(LesliShield)
41
+ include LesliShield::AuthorizationInterface if defined?(LesliShield)
40
42
 
41
43
  protect_from_forgery with: :exception
42
44
 
43
45
  before_action :set_path
44
46
  before_action :set_locale
47
+ before_action :authenticate_request if defined?(LesliShield)
45
48
  before_action :authorize_request if defined?(LesliShield)
46
- before_action :authorize_privilege if defined?(LesliSecurity)
47
49
  before_action :set_customizer
48
50
  before_action :set_requester
49
51
  after_action :log_requests if defined?(LesliAudit)
50
52
 
51
53
  layout "lesli/layouts/application-lesli"
52
54
 
53
- # Rescue from "ParameterMissing" when using required params
54
- # in controllers
55
+ # Rescue from "ParameterMissing" when using required params in controllers
55
56
  rescue_from ActionController::ParameterMissing do |_e|
56
57
  respond_with_error("Missing params")
57
58
  end
@@ -0,0 +1,6 @@
1
+ module Lesli
2
+ class AppsController < ApplicationLesliController
3
+ def show
4
+ end
5
+ end
6
+ end
@@ -32,12 +32,12 @@ Building a better future, one line of code at a time.
32
32
 
33
33
  module Lesli
34
34
  class RolesController < ApplicationLesliController
35
- before_action :set_role, only: [:show, :update, :destroy]
35
+ before_action :set_role, only: []
36
36
 
37
37
  def list
38
38
  respond_to do |format|
39
39
  format.json {
40
- respond_with_successful(Role.list(current_user, query, params))
40
+ respond_with_successful(RoleService.new(current_user, query).list(params))
41
41
  }
42
42
  end
43
43
  end
@@ -59,17 +59,22 @@ module Lesli
59
59
  # return a string with a css class to identify the body
60
60
  # example: builder engine-controller action
61
61
  def application_body_class
62
- [lesli_instance_code, controller_path.gsub("/", "-"), action_name].join(" ")
62
+ [lesli_instance_code, controller_path.sub("_","-").split("/"), action_name].join(" ")
63
63
  end
64
64
 
65
65
  # build the text for the html document title
66
66
  # this helper works only for rails pages, for vue apps the title must be handled with JS
67
67
  def website_title
68
- return @application_html_title if @application_html_title
68
+ # Use instance variable if set, otherwise construct a dynamic title
69
+ title = @application_html_title || controller_path.delete_prefix("lesli_")
69
70
 
70
- title = controller_path.gsub("cloud", "").gsub("_", "")
71
- name = @account.dig(:company, :name)
72
- "#{title} - #{name}"
71
+ # Append action name unless it's "index"
72
+ title += "/#{action_name}" unless action_name == "index"
73
+
74
+ # Append company name if present
75
+ title += " · #{Lesli.config.company.dig(:name)}"
76
+
77
+ title
73
78
  end
74
79
 
75
80
  # build description using custom data from controller or engine gem description
@@ -79,5 +84,13 @@ module Lesli
79
84
  # Gem::Specification.find_by_name(engine_name).summary
80
85
  @application_html_description || ""
81
86
  end
87
+
88
+ def dd object
89
+ content_tag(:pre) do
90
+ content_tag(:code) do
91
+ h JSON.pretty_generate(object.as_json)
92
+ end
93
+ end
94
+ end
82
95
  end
83
96
  end
@@ -0,0 +1,8 @@
1
+
2
+ module Lesli
3
+ module HtmlHelper
4
+ def turbo_link_to body, url, html_options = {}
5
+ link_to(body, url, class: "link", data: { turbo_frame: '_top' })
6
+ end
7
+ end
8
+ end
@@ -42,15 +42,30 @@ module Lesli
42
42
 
43
43
  # Prints a html link inside a list item
44
44
  def navigation_item(path, label, icon = nil, reload: false)
45
- content_tag(:li) do
45
+ content_tag(:li, { class: "navbar-item"}) do
46
46
  navigation_link(path, label, icon, reload:reload)
47
47
  end
48
48
  end
49
49
 
50
50
  def navigation_link(path, label, icon = nil, reload: false)
51
+
52
+ #content_tag(html_element, html_options) do
53
+ link_to path, data: { turbo_frame: '_top' } do
54
+ # print a simple menu item (without icon)
55
+ concat content_tag(:span, label, class: "text iconless") unless icon
56
+
57
+ # print a full menu item if icon was requested
58
+ if icon
59
+ concat content_tag(:span, nil, class: icon)
60
+ concat content_tag(:span, label, class: "text")
61
+ end
62
+ end
63
+ end
64
+
65
+ def navigation_link_vue(path, label, icon = nil, reload: false)
51
66
  # default vue router links for single page applications
52
67
  html_element = "router-link"
53
- html_options = { to: path, class: "navbar-item", 'active-class': "navigation-link-active" }
68
+ html_options = { to: path, 'active-class': "navigation-link-active" }
54
69
 
55
70
  # if reload is nedeed, we use a standard "a" tag
56
71
  if reload
@@ -94,8 +109,8 @@ module Lesli
94
109
 
95
110
  # 02.05 Mailer engine
96
111
  def navigation_engine_mailer(title: "Mailer", subtitle: "Email automation system")
97
- return unless defined? CloudMailer
98
- navigation_engine_item(title,subtitle,"mailer",cloud_mailer.root_path,controller_path.include?("cloud_mailer"))
112
+ return unless defined? LesliMailer
113
+ navigation_engine_item(title,subtitle,"mailer", lesli_mailer.root_path,controller_path.include?("lesli_mailer"))
99
114
  end
100
115
 
101
116
  # 02.08 Proposal engine
@@ -160,6 +175,12 @@ module Lesli
160
175
  navigation_engine_item(title,subtitle,"storage",cloud_storage.root_path,controller_path.include?("cloud_storage"))
161
176
  end
162
177
 
178
+ # 03.12 Papers engine
179
+ def navigation_engine_papers(title: "Papers", subtitle: "Smart Document Management")
180
+ return unless defined? LesliPapers
181
+ navigation_engine_item(title,subtitle,"papers",lesli_papers.root_path,controller_path.include?("lesli_papers"))
182
+ end
183
+
163
184
  # FINANCE
164
185
 
165
186
  # 04.01 Books engine
@@ -217,9 +238,7 @@ module Lesli
217
238
  # 07.02 Help engine
218
239
  def navigation_engine_support(title: "Support", subtitle: "Support Ticket System")
219
240
  return unless defined? LesliSupport
220
-
221
- navigation_engine_item(title, subtitle, "support", lesli_support.root_path,
222
- controller_path.include?("lesli_support"))
241
+ navigation_engine_item(title, subtitle, "support", lesli_support.root_path, controller_path.include?("lesli_support"))
223
242
  end
224
243
 
225
244
  # 07.03 Portal engine
@@ -241,13 +260,13 @@ module Lesli
241
260
  # SECURITY & PRIVACY
242
261
 
243
262
  # 08.01 Shield engine
244
- def navigation_engine_shield(title: "Shield", subtitle: "Authentication & Authorization.")
263
+ def navigation_engine_shield(title: "Shield", subtitle: "Authentication & Authorization")
245
264
  return unless defined? LesliShield
246
265
  navigation_engine_item(title, subtitle, "shield", lesli_shield.root_path, controller_path.include?("lesli_shield"))
247
266
  end
248
267
 
249
268
  # 08.02 Security engine
250
- def navigation_engine_security(title: "Security", subtitle: "Users, Privileges & Access Management.")
269
+ def navigation_engine_security(title: "Security", subtitle: "Users Authorization Management.")
251
270
  return unless defined? LesliSecurity
252
271
  navigation_engine_item(title, subtitle, "security", lesli_security.root_path, controller_path.include?("lesli_security"))
253
272
  end
@@ -256,7 +275,7 @@ module Lesli
256
275
  # INTEGRATIONS
257
276
 
258
277
  # 09.01 Babel engine
259
- def navigation_engine_babel(title: "Babel", subtitle: "Translations")
278
+ def navigation_engine_babel(title: "Babel", subtitle: "Translation Management System")
260
279
  return unless defined? LesliBabel
261
280
 
262
281
  navigation_engine_item(title, subtitle, "babel", lesli_babel.root_path,
@@ -306,7 +325,7 @@ module Lesli
306
325
  return nil if modules_hidden.include?(path)
307
326
 
308
327
  # render module navigation item :)
309
- content_tag(:a, href: path, class: is_active ? "is-active" : nil) do
328
+ content_tag(:a, id: path.gsub("/",""), href: path, class: is_active ? "is-active" : nil, data: { turbo: false }) do
310
329
  lesli_svg("engine-#{icon}") << content_tag(:div) do
311
330
  content_tag(:span, title) << content_tag(:p, subtitle)
312
331
  end
@@ -41,12 +41,12 @@ module Lesli
41
41
  # example: lesli_cloud, deutsche_leibrenten, mitwerken_cloud
42
42
  def lesli_instance_code
43
43
  return "lesli"
44
- Lesli::System.instance[:code]
44
+ #LesliSystem.instance[:code]
45
45
  end
46
46
 
47
47
  # return the information about the current engine
48
48
  def lesli_engine(property = nil)
49
- Lesli::System.engine(lesli_controller, property)
49
+ LesliSystem.engine(lesli_controller, property)
50
50
  end
51
51
 
52
52
  # return true if the controller requested belongs to the administration area
@@ -0,0 +1,58 @@
1
+ =begin
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 · Ruby on Rails SaaS Development Framework.
21
+
22
+ Made with ♥ by LesliTech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ module Lesli
34
+ module TurboHelper
35
+ def render_notifications_stream
36
+ turbo_stream.replace("application-lesli-notifications") do
37
+ render("lesli/partials/application-lesli-notifications")
38
+ end
39
+ end
40
+
41
+ def render_form_stream(partial_path, locals = {})
42
+
43
+ # Detect the current engine's namespace
44
+ engine_name = controller.class.module_parent_name.underscore
45
+
46
+ # Ensure the correct namespace is applied (only if not already present)
47
+ partial_path = "#{engine_name}/#{partial_path}"
48
+
49
+ # Convert the partial path to a valid DOM ID
50
+ partial_id = partial_path.tr("/", "-").tr("_", "-")
51
+
52
+ # Renders the stream to update the partial
53
+ turbo_stream.replace(partial_id) do
54
+ render(partial_path, locals)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ module Lesli
2
+ module CustomizationInterface
3
+
4
+ # set customization only for lesli_cloud instance
5
+ def set_customizer
6
+ =begin
7
+ # @account is only for html and pdf requests
8
+ return unless request.format.html? || request.format.pdf?
9
+
10
+ # return unless Lesli.instance[:code] == "lesli_cloud"
11
+
12
+ @lesli[:customization] = {}
13
+
14
+ logos = {}
15
+ # logo_identifiers = Account::File.file_types.keys
16
+ # custom_logos = current_user.account.files.where("file_type in (?)", logo_identifiers).order(id: :desc).all
17
+ # logo_identifiers.each do |logo_identifier|
18
+ # custom_logo = custom_logos.find { |logo| logo.file_type == logo_identifier}
19
+ # next unless custom_logo
20
+
21
+ # custom_logo_url = "/administration/account/files/#{custom_logo.id}"
22
+ # custo_logo_url = custom_logo.attachment_url if custom_logo.attachment_identifier
23
+ # custom_logo_url = custom_logo.attachment_public_url if custom_logo.attachment_public_identifier
24
+
25
+ # logos[logo_identifier.to_sym] = custom_logo_url
26
+ # end
27
+ @lesli[:customization][:logos] = logos
28
+
29
+ colors = {}
30
+ # color_identifiers = ::Account::Setting.theme_settings_keys
31
+ # custom_colors = current_user.account.settings.where("name in (?)", color_identifiers).all
32
+ # color_identifiers.each do |color_identifier|
33
+ # custom_color = custom_colors.find { |color| color.name == color_identifier}
34
+ # next unless custom_color
35
+
36
+ # colors[color_identifier.to_sym] = custom_color.value
37
+ # end
38
+ @lesli[:customization][:colors] = colors
39
+ =end
40
+ end
41
+ end
42
+ end