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.
- checksums.yaml +4 -4
- data/app/assets/config/lesli_manifest.js +3 -6
- data/app/assets/images/lesli/brand/app-icon.svg +45 -39
- data/app/assets/javascripts/lesli/application.js +1 -0
- data/app/controllers/lesli/abouts_controller.rb +16 -14
- data/app/controllers/lesli/application_controller.rb +13 -0
- data/app/controllers/lesli/application_devise_controller.rb +10 -12
- data/app/controllers/lesli/application_lesli_controller.rb +12 -11
- data/app/controllers/lesli/apps_controller.rb +6 -0
- data/app/controllers/lesli/roles_controller.rb +2 -2
- data/app/helpers/lesli/general_helper.rb +18 -5
- data/app/helpers/lesli/html_helper.rb +8 -0
- data/app/helpers/lesli/navigation_helper.rb +30 -11
- data/app/helpers/lesli/system_helper.rb +2 -2
- data/app/helpers/lesli/turbo_helper.rb +58 -0
- data/app/interfaces/lesli/customization_interface.rb +42 -0
- data/app/interfaces/lesli/requester_interface.rb +103 -0
- data/app/interfaces/lesli/responder_interface.rb +127 -0
- data/app/lib/date2.rb +1 -199
- data/app/lib/lesli/courier.rb +54 -0
- data/app/mailers/lesli/application_lesli_mailer.rb +32 -59
- data/app/mailers/lesli/devise_mailer.rb +16 -8
- data/app/models/concerns/account_initializer.rb +27 -68
- data/app/models/concerns/lesli/has_activities.rb +29 -0
- data/app/models/concerns/user_extensions.rb +34 -19
- data/app/models/concerns/user_security.rb +4 -4
- data/app/models/lesli/account.rb +13 -20
- data/{lib/scss/layouts/application-container.scss → app/models/lesli/item/activity.rb} +11 -8
- data/app/models/lesli/role/{power.rb → action.rb} +6 -4
- data/app/models/lesli/role.rb +7 -15
- data/app/models/lesli/shared/catalog.rb +20 -0
- data/app/models/lesli/shared/dashboard.rb +1 -1
- data/app/models/lesli/user/activity.rb +5 -0
- data/app/models/lesli/user/detail.rb +5 -5
- data/app/models/lesli/user/{log.rb → journal.rb} +3 -3
- data/app/models/lesli/user/{power.rb → role.rb} +2 -3
- data/app/models/lesli/user/session.rb +3 -4
- data/app/models/lesli/user.rb +50 -46
- data/app/operators/lesli/controller_operator.rb +3 -1
- data/app/operators/lesli/{role_descriptor_operator.rb → role_operator.rb} +51 -28
- data/app/operators/lesli/user_registration_operator.rb +3 -2
- data/app/services/lesli/application_lesli_service.rb +8 -4
- data/app/services/lesli/role/action_service.rb +58 -0
- data/app/services/lesli/role_service.rb +232 -0
- data/app/services/lesli/{user_session_service.rb → user/session_service.rb} +23 -14
- data/app/services/lesli/user_service.rb +85 -1
- data/app/views/lesli/apps/show.html.erb +52 -0
- data/app/views/lesli/layouts/application-devise.html.erb +5 -7
- data/app/views/lesli/layouts/application-lesli.html.erb +18 -24
- data/app/views/lesli/partials/_application-analytics.html.erb +2 -2
- data/app/views/lesli/partials/_application-data.html.erb +3 -77
- data/app/views/lesli/partials/_application-head.html.erb +7 -4
- data/app/views/lesli/partials/_application-lesli-annoouncements.html.erb +49 -0
- data/app/views/lesli/partials/_application-lesli-header.html.erb +73 -49
- data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -16
- data/app/views/lesli/partials/_application-lesli-navigation.html.erb +12 -9
- data/app/views/lesli/partials/{_application-lesli-notices.html.erb → _application-lesli-notifications.html.erb} +10 -8
- data/app/views/lesli/partials/_application-lesli-scss.html.erb +1 -1
- data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +1 -1
- data/app/views/lesli/partials/_application-public-javascript.html.erb +1 -4
- data/app/views/lesli/shared/dashboards/_show.html.erb +63 -0
- data/app/views/lesli/wrappers/_application-devise.html.erb +4 -6
- data/config/importmap.rb +14 -0
- data/config/initializers/lesli.rb +20 -12
- data/config/initializers/lesli_migration_helpers.rb +61 -0
- data/config/locales/translations.en.yml +1 -26
- data/config/locales/translations.es.yml +1 -26
- data/config/locales/translations.fr.yml +1 -26
- data/config/locales/translations.it.yml +1 -26
- data/config/locales/translations.pt.yml +1 -26
- data/config/routes.rb +3 -1
- data/db/migrate/v1/{0010000110_create_lesli_accounts.rb → 0000000110_create_lesli_accounts.rb} +13 -12
- data/db/migrate/v1/0000000210_create_lesli_roles.rb +65 -0
- data/db/migrate/v1/0000000310_create_lesli_users.rb +99 -0
- data/db/migrate/v1/{0010000610_create_lesli_system_controllers.rb → 0000100110_create_lesli_system_controllers.rb} +3 -3
- data/db/migrate/v1/{0010000710_create_lesli_system_controller_actions.rb → 0000100210_create_lesli_system_controller_actions.rb} +3 -4
- data/{lib/scss/layouts/application-content.scss → db/migrate/v1/0000110310_create_lesli_account_settings.rb} +8 -6
- data/{app/models/lesli/user/agent.rb → db/migrate/v1/0000110410_create_lesli_account_activities.rb} +3 -3
- data/db/migrate/v1/0000120210_create_lesli_role_actions.rb +45 -0
- data/db/migrate/v1/{0010001410_create_lesli_account_logs.rb → 0000120310_create_lesli_role_privileges.rb} +8 -8
- data/db/{tables/0010003810_create_user_shortcuts.rb → migrate/v1/0000130210_create_lesli_user_roles.rb} +9 -12
- data/db/migrate/v1/0000130310_create_lesli_user_sessions.rb +56 -0
- data/db/{seed/production.rb → migrate/v1/0000130410_create_lesli_user_activities.rb} +7 -4
- data/db/{tables/0010001110_create_account_locations.rb → migrate2/0000100510_create_lesli_account_locations.rb} +6 -6
- data/db/{tables/0010001510_create_account_currencies.rb → migrate2/0000100610_create_lesli_account_currencies.rb} +4 -4
- data/db/seed/{development/accounts.rb → accounts.rb} +6 -2
- data/db/seed/{production/users.rb → users.rb} +4 -10
- data/db/seed/{tools.rb → xyz.rb} +2 -7
- data/db/seeds.rb +3 -2
- data/db/structure/00000020_catalogs.json +0 -0
- data/lib/generators/{application_lesli_generator.rb → application_lesli_generator_base.rb} +4 -4
- data/lib/generators/lesli/spec/spec_generator.rb +2 -2
- data/lib/generators/lesli/view/USAGE +8 -0
- data/lib/generators/lesli/view/templates/spec-factory.template +17 -0
- data/lib/generators/lesli/view/templates/spec-model.template +70 -0
- data/lib/generators/lesli/view/view_generator.rb +25 -0
- data/lib/lesli/configuration.rb +7 -10
- data/lib/lesli/engine.rb +22 -3
- data/lib/lesli/r_spec.rb +5 -2
- data/lib/lesli/routing.rb +42 -9
- data/lib/lesli/version.rb +2 -2
- data/lib/lesli.rb +11 -0
- data/lib/migrate/common.rb +94 -0
- data/lib/migrate/items/action_structure.rb +51 -0
- data/{db/migrate/v1/0010001210_create_lesli_account_activities.rb → lib/migrate/items/activity_structure.rb} +18 -16
- data/lib/migrate/items/attachment_structure.rb +62 -0
- data/{app/views/lesli/partials/_application-lesli-engines.html.erb → lib/migrate/items/discussion_structure.rb} +19 -27
- data/lib/migrate/items/subscriber_structure.rb +49 -0
- data/lib/migrate/items/version_structure.rb +53 -0
- data/lib/migrate/shared/account_structure.rb +21 -0
- data/lib/migrate/shared/catalog_structure.rb +30 -0
- data/lib/migrate/shared/dashboard_structure.rb +54 -0
- data/lib/migrate/shared/setting_structure.rb +20 -0
- data/lib/rspec/config/spec_coverage.rb +95 -0
- data/{db/migrate/v1/0010001110_create_lesli_account_settings.rb → lib/rspec/factories/lesli_account.rb} +10 -7
- data/{db/seed/development.rb → lib/rspec/factories/lesli_role.rb} +30 -3
- data/{db/seed/test.rb → lib/rspec/factories/lesli_user.rb} +32 -3
- data/lib/rspec/fixtures/files/lesli-icon.png +0 -0
- data/lib/rspec/fixtures/files/test_file_1.docx +0 -0
- data/{db/tables/0010001610_create_account_currency_exchange_rates.rb → lib/rspec/helpers/lesli_helper.rb} +21 -21
- data/lib/rspec/helpers/rails_helper.rb +134 -0
- data/lib/rspec/helpers/response_request_helper.rb +214 -0
- data/lib/rspec/helpers/response_service_helper.rb +66 -0
- data/lib/rspec/helpers/spec_helper.rb +99 -0
- data/lib/rspec/lesli_api_tester.rb +133 -0
- data/lib/rspec/lesli_service_tester.rb +46 -0
- data/{db/tables/0010001410_create_account_files.rb → lib/rspec/testers/controller.rb} +31 -20
- data/lib/rspec/testers/model.rb +36 -0
- data/lib/rspec/testers/request.rb +84 -0
- data/lib/tasks/lesli/db.rake +5 -3
- data/lib/tasks/lesli/git.rake +28 -32
- data/lib/tasks/lesli/github.rake +89 -0
- data/lib/tasks/lesli_tasks.rake +3 -3
- data/readme.md +28 -17
- metadata +134 -394
- data/app/assets/fonts/lesli/Domine/Domine-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Domine/OFL.txt +0 -97
- data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
- data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +0 -1
- data/app/assets/fonts/lesli/Remix/remixicon.svg +0 -7633
- data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +0 -11
- data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
- data/app/assets/fonts/lesli/Roboto/LICENSE.txt +0 -202
- data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
- data/app/assets/icons/lesli/engine-admin.svg +0 -1
- data/app/assets/icons/lesli/engine-audit.svg +0 -1
- data/app/assets/icons/lesli/engine-babel.svg +0 -1
- data/app/assets/icons/lesli/engine-bell.svg +0 -1
- data/app/assets/icons/lesli/engine-books.svg +0 -1
- data/app/assets/icons/lesli/engine-calendar.svg +0 -1
- data/app/assets/icons/lesli/engine-dashboard.svg +0 -1
- data/app/assets/icons/lesli/engine-dispatcher.svg +0 -1
- data/app/assets/icons/lesli/engine-focus.svg +0 -1
- data/app/assets/icons/lesli/engine-kb.svg +0 -1
- data/app/assets/icons/lesli/engine-leaf.svg +0 -1
- data/app/assets/icons/lesli/engine-lesli.svg +0 -1
- data/app/assets/icons/lesli/engine-letter.svg +0 -1
- data/app/assets/icons/lesli/engine-mailer.svg +0 -1
- data/app/assets/icons/lesli/engine-one.svg +0 -1
- data/app/assets/icons/lesli/engine-profile.svg +0 -1
- data/app/assets/icons/lesli/engine-proposal.svg +0 -1
- data/app/assets/icons/lesli/engine-scraper.svg +0 -1
- data/app/assets/icons/lesli/engine-security.svg +0 -1
- data/app/assets/icons/lesli/engine-shared.svg +0 -1
- data/app/assets/icons/lesli/engine-shield.svg +0 -1
- data/app/assets/icons/lesli/engine-storage.svg +0 -1
- data/app/assets/icons/lesli/engine-support.svg +0 -1
- data/app/assets/icons/lesli/engine-talk.svg +0 -1
- data/app/assets/icons/lesli/engine-team.svg +0 -1
- data/app/assets/icons/lesli/engine-time.svg +0 -1
- data/app/assets/icons/lesli/locale-en.svg +0 -1
- data/app/assets/icons/lesli/locale-es.svg +0 -1
- data/app/assets/icons/lesli/locale-fr.svg +0 -1
- data/app/assets/icons/lesli/locale-it.svg +0 -1
- data/app/assets/icons/lesli/locale-pt.svg +0 -1
- data/app/assets/icons/readme.md +0 -10
- data/app/assets/javascripts/lesli/templates/application.js +0 -14
- data/app/assets/javascripts/lesli/templates/public.js +0 -14
- data/app/assets/stylesheets/lesli/templates/application.css +0 -2918
- data/app/assets/stylesheets/lesli/templates/public.css +0 -1
- data/app/controllers/lesli/interfaces/application/authorization.rb +0 -107
- data/app/controllers/lesli/interfaces/application/customization.rb +0 -46
- data/app/controllers/lesli/interfaces/application/logger.rb +0 -134
- data/app/controllers/lesli/interfaces/application/requester.rb +0 -84
- data/app/controllers/lesli/interfaces/application/responder.rb +0 -132
- data/app/controllers/lesli/interfaces/controllers/actions.rb +0 -250
- data/app/controllers/lesli/interfaces/controllers/activities.rb +0 -215
- data/app/controllers/lesli/interfaces/controllers/discussions.rb +0 -270
- data/app/controllers/lesli/interfaces/controllers/files.rb +0 -467
- data/app/controllers/lesli/interfaces/controllers/subscribers.rb +0 -234
- data/app/lib/lesli/system.rb +0 -110
- data/app/models/lesli/cloud_object/action.rb +0 -70
- data/app/models/lesli/cloud_object/activity.rb +0 -311
- data/app/models/lesli/cloud_object/custom_field.rb +0 -158
- data/app/models/lesli/cloud_object/discussion.rb +0 -219
- data/app/models/lesli/cloud_object/subscriber.rb +0 -186
- data/app/operators/lesli/descriptor_privilege_operator.rb +0 -75
- data/app/views/lesli/emails/devise_mailer/confirmation_instructions.html.erb +0 -23
- data/app/views/lesli/emails/devise_mailer/reset_password_instructions.html.erb +0 -23
- data/app/views/lesli/partials/_application-lesli-icons.html.erb +0 -1
- data/config/initializers/devise.rb +0 -336
- data/db/seed/development/users.rb +0 -52
- data/db/seed/production/accounts.rb +0 -50
- data/db/structure/00000000_people.json +0 -34
- data/db/structure/00000003_actions.json +0 -14
- data/db/structure/00000004_activities.json +0 -20
- data/db/structure/00000005_discussions.json +0 -8
- data/db/structure/00000006_files.json +0 -32
- data/db/structure/00000007_subscribers.json +0 -11
- data/db/structure/00000501_dashboards.json +0 -14
- data/db/structure/00000502_dashboard_components.json +0 -23
- data/db/tables/0010003410_create_user_activities.rb +0 -51
- data/db/tables/0010003710_create_user_codes.rb +0 -43
- data/db/tables/0010004110_create_user_tokens.rb +0 -45
- data/db/tables/0010005610_create_role_activities.rb +0 -50
- data/db/tables/0010009010_create_feedbacks.rb +0 -56
- data/lib/mailer_previews/devise_mailer_preview.rb +0 -49
- data/lib/scss/cloud-objects/discussion.scss +0 -80
- data/lib/scss/cloud-objects/file.scss +0 -138
- data/lib/scss/components/keypad.scss +0 -109
- data/lib/scss/elements/autocomplete.scss +0 -72
- data/lib/scss/elements/card.scss +0 -37
- data/lib/scss/elements/empty.scss +0 -43
- data/lib/scss/elements/file-uploader.scss +0 -74
- data/lib/scss/elements/gallery.scss +0 -98
- data/lib/scss/elements/input-tag.scss +0 -73
- data/lib/scss/elements/loading.scss +0 -63
- data/lib/scss/elements/map.scss +0 -107
- data/lib/scss/elements/navbar.scss +0 -115
- data/lib/scss/elements/table.scss +0 -118
- data/lib/scss/elements/toolbar.scss +0 -66
- data/lib/scss/fonts/families.scss +0 -47
- data/lib/scss/fonts/mdicons.scss +0 -82
- data/lib/scss/fonts/remixicons.scss +0 -2602
- data/lib/scss/helpers/display.scss +0 -44
- data/lib/scss/helpers/tooltip.scss +0 -91
- data/lib/scss/layouts/application-announcements.scss +0 -40
- data/lib/scss/layouts/application-component.scss +0 -39
- data/lib/scss/layouts/application-engines.scss +0 -125
- data/lib/scss/layouts/application-footer.scss +0 -102
- data/lib/scss/layouts/application-header.scss +0 -91
- data/lib/scss/layouts/application-navigation.scss +0 -79
- data/lib/scss/layouts/application-search.scss +0 -71
- data/lib/scss/layouts/application-sidebar.scss +0 -219
- data/lib/scss/overrides/notification.scss +0 -75
- data/lib/scss/overrides/sweetalert.scss +0 -106
- data/lib/scss/pages/devise-simple.scss +0 -89
- data/lib/scss/pages/devise.scss +0 -179
- data/lib/scss/pages/invites.scss +0 -81
- data/lib/scss/panels/panel-announcements.scss +0 -56
- data/lib/scss/panels/panel-notification.scss +0 -67
- data/lib/scss/panels/panel-profile.scss +0 -62
- data/lib/scss/panels/panel-support-ticket.scss +0 -56
- data/lib/scss/panels/panel-tasks.scss +0 -41
- data/lib/scss/settings/variables.scss +0 -148
- data/lib/scss/shared/workflow-status-progress.scss +0 -135
- data/lib/scss/templates/application.scss +0 -127
- data/lib/scss/templates/component.scss +0 -39
- data/lib/scss/templates/dashboards.scss +0 -53
- data/lib/scss/templates/empty.scss +0 -42
- data/lib/scss/templates/pdf.scss +0 -45
- data/lib/scss/templates/public.scss +0 -72
- data/lib/vue/application.js +0 -285
- data/lib/vue/cloudobjects/discussion/content.vue +0 -62
- data/lib/vue/cloudobjects/discussion/element.vue +0 -170
- data/lib/vue/cloudobjects/discussion/filters.vue +0 -108
- data/lib/vue/cloudobjects/discussion/new.vue +0 -134
- data/lib/vue/cloudobjects/discussion.vue +0 -99
- data/lib/vue/cloudobjects/stores/discussion.js +0 -212
- data/lib/vue/layouts/application-announcements.vue +0 -78
- data/lib/vue/layouts/application-component.vue +0 -38
- data/lib/vue/layouts/application-container.vue +0 -48
- data/lib/vue/layouts/application-engines.vue +0 -66
- data/lib/vue/layouts/application-footer.vue +0 -123
- data/lib/vue/layouts/application-header.vue +0 -252
- data/lib/vue/layouts/application-navbar.vue +0 -110
- data/lib/vue/layouts/application-search.vue +0 -86
- data/lib/vue/layouts/application-sidebar.vue +0 -63
- data/lib/vue/pages/errors/app.js +0 -32
- data/lib/vue/pages/invites/app.js +0 -76
- data/lib/vue/pages/mfas/application.js +0 -77
- data/lib/vue/pages/onboarding/application.js +0 -45
- data/lib/vue/pages/onboarding/components/address.vue +0 -120
- data/lib/vue/pages/onboarding/components/buttons.vue +0 -67
- data/lib/vue/pages/onboarding/components/contact.vue +0 -148
- data/lib/vue/pages/onboarding/components/date-time.vue +0 -265
- data/lib/vue/pages/onboarding/components/finish.vue +0 -62
- data/lib/vue/pages/onboarding/components/general-info.vue +0 -93
- data/lib/vue/pages/onboarding/components/indicators.vue +0 -78
- data/lib/vue/pages/onboarding/components/welcome.vue +0 -66
- data/lib/vue/pages/onboarding/show.vue +0 -67
- data/lib/vue/pages/onboarding/store.js +0 -165
- data/lib/vue/pages/otps/application.js +0 -90
- data/lib/vue/pages/passes/application.js +0 -80
- data/lib/vue/pages/websites/application.js +0 -34
- data/lib/vue/panels/panel-announcements.vue +0 -248
- data/lib/vue/panels/panel-bell-notifications.vue +0 -102
- data/lib/vue/panels/panel-files.vue +0 -281
- data/lib/vue/panels/panel-profile.vue +0 -76
- data/lib/vue/panels/panel-support-tickets.vue +0 -163
- data/lib/vue/panels/panel-tasks.vue +0 -124
- data/lib/vue/panels/stores/bell-notifications.js +0 -46
- data/lib/vue/panels/stores/support-tickets.js +0 -103
- data/lib/vue/public.js +0 -83
- data/lib/vue/refactor/shared/cloudobjects/action.vue +0 -193
- data/lib/vue/refactor/shared/cloudobjects/file/grid.vue +0 -215
- data/lib/vue/refactor/shared/cloudobjects/file/list.vue +0 -106
- data/lib/vue/refactor/shared/cloudobjects/file.vue +0 -145
- data/lib/vue/refactor/shared/workflows2/apps/actions/form.vue +0 -232
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/chatroom-form.vue +0 -103
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-clone-form.vue +0 -125
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/cloud-object-file-form.vue +0 -102
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/email-form.vue +0 -190
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/notification-form.vue +0 -124
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/send-cloud-object-file.vue +0 -170
- data/lib/vue/refactor/shared/workflows2/apps/actions/forms/task-form.vue +0 -258
- data/lib/vue/refactor/shared/workflows2/apps/actions/index.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/apps/checks/form.vue +0 -200
- data/lib/vue/refactor/shared/workflows2/apps/checks/index.vue +0 -160
- data/lib/vue/refactor/shared/workflows2/apps/index.vue +0 -177
- data/lib/vue/refactor/shared/workflows2/apps/new.vue +0 -97
- data/lib/vue/refactor/shared/workflows2/apps/show.vue +0 -146
- data/lib/vue/refactor/shared/workflows2/components/associations.vue +0 -215
- data/lib/vue/refactor/shared/workflows2/components/chart.vue +0 -91
- data/lib/vue/refactor/shared/workflows2/components/workflow-form.vue +0 -466
- data/lib/vue/refactor/shared/workflows2/components/workflow-status-dropdown.vue +0 -129
- data/lib/vue/refactor/stores/cloudobjects/action.js +0 -181
- data/lib/vue/refactor/stores/cloudobjects/file.js +0 -205
- data/lib/vue/refactor/stores/entities/announcements.js +0 -75
- data/lib/vue/refactor/stores/entities/dashboard.js +0 -251
- data/lib/vue/refactor/stores/entities/workflow.js +0 -185
- data/lib/vue/refactor/stores/panels/announcements.js +0 -153
- data/lib/vue/refactor/stores/panels/notification.js +0 -114
- data/lib/vue/refactor/stores/panels/task.js +0 -66
- data/lib/vue/refactor/stores/panels/tickets.js +0 -129
- data/lib/vue/refactor/stores/role.js +0 -243
- data/lib/vue/refactor/stores/translations.json +0 -60
- data/lib/vue/refactor/stores/users.js +0 -98
- data/lib/vue/shared/dashboards/apps/edit.vue +0 -215
- data/lib/vue/shared/dashboards/apps/index.vue +0 -112
- data/lib/vue/shared/dashboards/apps/new.vue +0 -89
- data/lib/vue/shared/dashboards/apps/show.vue +0 -88
- data/lib/vue/shared/dashboards/components/form.vue +0 -246
- data/lib/vue/shared/services/firebase.js +0 -163
- data/lib/vue/shared/services/translator.js +0 -87
- data/lib/vue/shared/stores/command.js +0 -154
- data/lib/vue/shared/stores/dashboard.js +0 -253
- data/lib/vue/shared/stores/layout.js +0 -61
- data/lib/vue/shared/stores/systemController.js +0 -67
- data/lib/vue/shared/stores/users.js +0 -57
- data/lib/vue/stores/translations.json +0 -177
- data/lib/vue/translation.js +0 -45
- data/lib/webpack/base.js +0 -191
- data/lib/webpack/core.js +0 -93
- data/lib/webpack/engines.js +0 -167
- data/lib/webpack/root.js +0 -105
- data/lib/webpack/version.js +0 -78
- data/vendor/bulma/LICENSE +0 -21
- data/vendor/bulma/bulma.sass +0 -10
- data/vendor/bulma/css/bulma-rtl.css +0 -11851
- data/vendor/bulma/css/bulma-rtl.min.css +0 -1
- data/vendor/bulma/css/bulma.css +0 -11851
- data/vendor/bulma/css/bulma.min.css +0 -1
- data/vendor/bulma/sass/base/_all.sass +0 -6
- data/vendor/bulma/sass/base/animations.sass +0 -5
- data/vendor/bulma/sass/base/generic.sass +0 -145
- data/vendor/bulma/sass/base/helpers.sass +0 -1
- data/vendor/bulma/sass/base/minireset.sass +0 -79
- data/vendor/bulma/sass/components/_all.sass +0 -15
- data/vendor/bulma/sass/components/breadcrumb.sass +0 -77
- data/vendor/bulma/sass/components/card.sass +0 -103
- data/vendor/bulma/sass/components/dropdown.sass +0 -83
- data/vendor/bulma/sass/components/level.sass +0 -79
- data/vendor/bulma/sass/components/media.sass +0 -59
- data/vendor/bulma/sass/components/menu.sass +0 -59
- data/vendor/bulma/sass/components/message.sass +0 -101
- data/vendor/bulma/sass/components/modal.sass +0 -117
- data/vendor/bulma/sass/components/navbar.sass +0 -446
- data/vendor/bulma/sass/components/pagination.sass +0 -167
- data/vendor/bulma/sass/components/panel.sass +0 -121
- data/vendor/bulma/sass/components/tabs.sass +0 -176
- data/vendor/bulma/sass/elements/_all.sass +0 -16
- data/vendor/bulma/sass/elements/box.sass +0 -26
- data/vendor/bulma/sass/elements/button.sass +0 -357
- data/vendor/bulma/sass/elements/container.sass +0 -29
- data/vendor/bulma/sass/elements/content.sass +0 -162
- data/vendor/bulma/sass/elements/form.sass +0 -1
- data/vendor/bulma/sass/elements/icon.sass +0 -46
- data/vendor/bulma/sass/elements/image.sass +0 -73
- data/vendor/bulma/sass/elements/notification.sass +0 -52
- data/vendor/bulma/sass/elements/other.sass +0 -31
- data/vendor/bulma/sass/elements/progress.sass +0 -73
- data/vendor/bulma/sass/elements/table.sass +0 -134
- data/vendor/bulma/sass/elements/tag.sass +0 -140
- data/vendor/bulma/sass/elements/title.sass +0 -70
- data/vendor/bulma/sass/form/_all.sass +0 -9
- data/vendor/bulma/sass/form/checkbox-radio.sass +0 -22
- data/vendor/bulma/sass/form/file.sass +0 -184
- data/vendor/bulma/sass/form/input-textarea.sass +0 -66
- data/vendor/bulma/sass/form/select.sass +0 -88
- data/vendor/bulma/sass/form/shared.sass +0 -60
- data/vendor/bulma/sass/form/tools.sass +0 -215
- data/vendor/bulma/sass/grid/_all.sass +0 -5
- data/vendor/bulma/sass/grid/columns.sass +0 -513
- data/vendor/bulma/sass/grid/tiles.sass +0 -36
- data/vendor/bulma/sass/helpers/_all.sass +0 -12
- data/vendor/bulma/sass/helpers/color.sass +0 -39
- data/vendor/bulma/sass/helpers/flexbox.sass +0 -35
- data/vendor/bulma/sass/helpers/float.sass +0 -10
- data/vendor/bulma/sass/helpers/other.sass +0 -14
- data/vendor/bulma/sass/helpers/overflow.sass +0 -2
- data/vendor/bulma/sass/helpers/position.sass +0 -7
- data/vendor/bulma/sass/helpers/spacing.sass +0 -31
- data/vendor/bulma/sass/helpers/typography.sass +0 -103
- data/vendor/bulma/sass/helpers/visibility.sass +0 -122
- data/vendor/bulma/sass/layout/_all.sass +0 -6
- data/vendor/bulma/sass/layout/footer.sass +0 -11
- data/vendor/bulma/sass/layout/hero.sass +0 -153
- data/vendor/bulma/sass/layout/section.sass +0 -17
- data/vendor/bulma/sass/utilities/_all.sass +0 -9
- data/vendor/bulma/sass/utilities/animations.sass +0 -1
- data/vendor/bulma/sass/utilities/controls.sass +0 -49
- data/vendor/bulma/sass/utilities/derived-variables.sass +0 -114
- data/vendor/bulma/sass/utilities/extends.sass +0 -25
- data/vendor/bulma/sass/utilities/functions.sass +0 -135
- data/vendor/bulma/sass/utilities/initial-variables.sass +0 -79
- data/vendor/bulma/sass/utilities/mixins.sass +0 -303
- data/vendor/lesli-css/_index.scss +0 -34
- data/vendor/lesli-css/lesli.scss +0 -51
- data/vendor/lesli-css/license +0 -28
- data/vendor/lesli-css/src/base/fonts.scss +0 -50
- data/vendor/lesli-css/src/base/normalize.scss +0 -118
- data/vendor/lesli-css/src/components/blockquote.scss +0 -61
- data/vendor/lesli-css/src/components/columns.scss +0 -92
- data/vendor/lesli-css/src/components/container.scss +0 -47
- data/vendor/lesli-css/src/components/navigation.scss +0 -59
- data/vendor/lesli-css/src/functions/colors.scss +0 -184
- data/vendor/lesli-css/src/helpers/units.scss +0 -44
- data/vendor/lesli-css/src/mixins/breakpoint.scss +0 -184
- data/vendor/lesli-css/src/mixins/flex.scss +0 -80
- data/vendor/lesli-css/src/mixins/scrollbar.scss +0 -46
- data/vendor/lesli-css/src/settings/variables.scss +0 -26
- data/vendor/lesli-css/tests/base/normalize.spec.scss +0 -125
- data/vendor/lesli-css/tests/functions/colors.spec.scss +0 -117
- data/vendor/lesli-css/tests/mixins/breakpoint.spec.scss +0 -429
- data/vendor/lesli-css/tests/mixins/scrollbar.spec.scss +0 -82
- data/vendor/lesli-css/vendor/normalize.scss +0 -351
- data/vendor/remixicon/License +0 -201
- data/vendor/remixicon/fonts/remixicon.css +0 -2583
- /data/{vendor/lesli-css/src/components/grid.scss → app/assets/stylesheets/lesli/application.css} +0 -0
- /data/db/migrate/v1/{0010001010_create_lesli_account_details.rb → 0000110210_create_lesli_account_details.rb} +0 -0
- /data/db/structure/{00000008_custom_fields.json → 00000300_custom_fields.json} +0 -0
- /data/lib/assets/javascripts/lesli/{i18n.js → i18n_js} +0 -0
@@ -1,250 +0,0 @@
|
|
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 · 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
|
-
=end
|
33
|
-
module Lesli
|
34
|
-
module Interfaces
|
35
|
-
module Controllers
|
36
|
-
module Actions
|
37
|
-
|
38
|
-
# @return [Json] Json that contains a list of all actions related to a *cloud_object*
|
39
|
-
# @description Retrieves and returns all actions associated to a *cloud_object*. The id of the
|
40
|
-
# *cloud_object* is within the *params* attribute. If the child class provides a block, the function is
|
41
|
-
# yielded sending the actions as parameters. The block given *must* return the HTTP response
|
42
|
-
# @example
|
43
|
-
# # Executing this controller's action from javascript's frontend
|
44
|
-
# let ticket_id = 1;
|
45
|
-
# this.http.get(`127.0.0.1/help/tickets/${ticket_id}/actions`);
|
46
|
-
def index
|
47
|
-
set_cloud_object()
|
48
|
-
action_model = action_model() # If there is a custom action model, it must be returned in this method
|
49
|
-
cloud_object_model = action_model.cloud_object_model
|
50
|
-
|
51
|
-
@actions = action_model.index(current_user, @cloud_object)
|
52
|
-
if block_given?
|
53
|
-
yield(@actions)
|
54
|
-
else
|
55
|
-
respond_with_successful(@actions)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# @return [JSON] The json information about the selected action
|
60
|
-
# @description Retrieves and returns the information about the action. The id of the
|
61
|
-
# *cloud_object* and the id of the *action* are within the *params* attribute. If a block
|
62
|
-
# is provided, the execution will be yielded sending the action as first parameter
|
63
|
-
# @example
|
64
|
-
# # Executing this controller's action from javascript's frontend
|
65
|
-
# let ticket_id = 1;
|
66
|
-
# let action_id = 5;
|
67
|
-
# this.http.get(`127.0.0.1/help/tickets/${ticket_id}/actions/${action_id}`);
|
68
|
-
def show
|
69
|
-
set_action
|
70
|
-
return respond_with_not_found unless @action
|
71
|
-
|
72
|
-
if block_given?
|
73
|
-
yield(@action)
|
74
|
-
else
|
75
|
-
return respond_with_successful(@action)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# @controller_action_param :content [String] The commented message
|
80
|
-
# @controller_action_param :actions_id [Integer] The id of a actions that this message responds to
|
81
|
-
# @return [Json] Json that contains wheter the creation of the action was successful or not.
|
82
|
-
# If it is not successful, it returs an error message
|
83
|
-
# @description Creates a new action associated to a *cloud_object* and notifies all users subscribed to this event.
|
84
|
-
# The id of the *cloud_object* is within the *params* attribute
|
85
|
-
# @example
|
86
|
-
# # Executing this controller's action from javascript's frontend
|
87
|
-
# let ticket_id = 1;
|
88
|
-
# let data = {
|
89
|
-
# ticket_action: {
|
90
|
-
# content: "This is a comment on a ticket!"
|
91
|
-
# }
|
92
|
-
# };
|
93
|
-
# this.http.post(`127.0.0.1/help/tickets/${ticket_id}/actions`, data);
|
94
|
-
def create
|
95
|
-
action_model = action_model() # If there is a custom action model, it must be returned in this method
|
96
|
-
cloud_object_model = action_model.cloud_object_model
|
97
|
-
|
98
|
-
set_cloud_object
|
99
|
-
new_action_params = action_params.merge(
|
100
|
-
user_creator: current_user
|
101
|
-
)
|
102
|
-
|
103
|
-
action = @cloud_object.actions.new(new_action_params)
|
104
|
-
if action.save
|
105
|
-
if block_given?
|
106
|
-
yield(cloud_object, action)
|
107
|
-
else
|
108
|
-
respond_with_successful(action.show(current_user))
|
109
|
-
end
|
110
|
-
else
|
111
|
-
respond_with_error(action.errors.full_messages)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# @controller_action_param :content [String] The content of the action
|
116
|
-
# @controller_action_param :actions_id [Integer] The id of a actions that this message responds to
|
117
|
-
# @return [Json] Json that contains wheter the update of the action was successful or not.
|
118
|
-
# If it is not successful, it returs an error message
|
119
|
-
# @description Updates the action based on the id of the *cloud_object* and its own id.
|
120
|
-
# @example
|
121
|
-
# # Executing this controller's action from javascript's frontend
|
122
|
-
# let ticket_id = 1;
|
123
|
-
# let action_id = 22;
|
124
|
-
# data = {
|
125
|
-
# action: {
|
126
|
-
# content: "This is the new content of the action"
|
127
|
-
# }
|
128
|
-
# };
|
129
|
-
# this.http.patch(`127.0.0.1/help/tickets/${ticket_id}/actions/${action_id}`, data);
|
130
|
-
def update
|
131
|
-
set_action
|
132
|
-
return respond_with_not_found unless @action
|
133
|
-
return respond_with_unauthorized unless @action.is_editable_by?(current_user)
|
134
|
-
|
135
|
-
if @action.update(action_params)
|
136
|
-
respond_with_successful(@action.show(current_user))
|
137
|
-
else
|
138
|
-
respond_with_error(@action.errors.full_messages.to_sentence)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
# @return [Json] A response that contains wheter the action was deleted or not.
|
143
|
-
# If it is not successful, it returns an error message
|
144
|
-
# @description Deletes a action from the database based on the id of the *cloud_object* and its own id.
|
145
|
-
# @example
|
146
|
-
# # Executing this controller's action from javascript's frontend
|
147
|
-
# let ticket_id = 1;
|
148
|
-
# let action_id = 22;
|
149
|
-
# this.http.delete(`127.0.0.1/help/tickets/${ticket_id}/actions/${action_id}`);
|
150
|
-
def destroy
|
151
|
-
set_action
|
152
|
-
return respond_with_not_found unless @action
|
153
|
-
|
154
|
-
if @action.destroy
|
155
|
-
respond_with_successful
|
156
|
-
else
|
157
|
-
respond_with_error(@action.errors.full_messages.to_sentence)
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
protected
|
162
|
-
|
163
|
-
# @return [Parameters] Allowed parameters for the action
|
164
|
-
# @description Sanitizes the parameters received from an HTTP call to only allow the specified ones.
|
165
|
-
# Allowed params are _:content_, _:actions_id_.
|
166
|
-
# @example
|
167
|
-
# # supose params contains {
|
168
|
-
# # "ticket_action": {
|
169
|
-
# # "id": 5,
|
170
|
-
# # "content": "This is a message!",
|
171
|
-
# # "cloud_help_ticket_actions_id": 4
|
172
|
-
# # }
|
173
|
-
# #}
|
174
|
-
# action_params = action_params
|
175
|
-
# puts action_params
|
176
|
-
# # will remove the _id_ field and only print {
|
177
|
-
# # "ticket_action": {
|
178
|
-
# # "content": "This is a message!",
|
179
|
-
# # "cloud_help_ticket_actions_id": 4
|
180
|
-
# # }
|
181
|
-
# #}
|
182
|
-
def action_params
|
183
|
-
action_model = action_model() # If there is a custom action model, it must be returned in this method
|
184
|
-
cloud_object_model = action_model.cloud_object_model
|
185
|
-
|
186
|
-
params.require(
|
187
|
-
"#{cloud_object_model.name.demodulize.underscore}_action".to_sym
|
188
|
-
).permit(
|
189
|
-
:instructions,
|
190
|
-
:complete,
|
191
|
-
:group,
|
192
|
-
"#{action_model.table_name}_id".to_sym
|
193
|
-
)
|
194
|
-
end
|
195
|
-
|
196
|
-
# @return [void]
|
197
|
-
# @descriptions Sets the variable @cloud_object based on the paremeters send in the URL. If no,
|
198
|
-
# cloud_object is found or it is not within the current_user's account, nil is used instead
|
199
|
-
# @example
|
200
|
-
# # Imagine you are inside CloudFocus::Task::ActionsController
|
201
|
-
# puts @cloud_object # will display nil
|
202
|
-
# set_cloud_object
|
203
|
-
# puts @cloud_object # Will display an instance of CloudFocus::Task
|
204
|
-
def set_cloud_object
|
205
|
-
action_model = action_model() # If there is a custom action model, it must be returned in this method
|
206
|
-
cloud_object_model = action_model.cloud_object_model
|
207
|
-
account_model = cloud_object_model.reflect_on_association(:account).klass
|
208
|
-
|
209
|
-
@cloud_object = cloud_object_model.find_by(
|
210
|
-
id: params["#{cloud_object_model.name.demodulize.underscore}_id".to_sym],
|
211
|
-
"#{account_model.table_name}_id".to_sym => current_user.account.id
|
212
|
-
)
|
213
|
-
end
|
214
|
-
|
215
|
-
# @return [void]
|
216
|
-
# @description Sets the variable @action. The variable contains the action
|
217
|
-
# to be updated based on the id of the *cloud_object* and the id of the *action*
|
218
|
-
# @example
|
219
|
-
# #suppose params[:ticket_id] = 1
|
220
|
-
# #suppose params[:id] = 44
|
221
|
-
# puts @action # will display nil
|
222
|
-
# set_action
|
223
|
-
# puts @action # will display an instance of CloudHelp:Ticket::Action
|
224
|
-
def set_action
|
225
|
-
action_model = action_model() # If there is a custom action model, it must be returned in this method
|
226
|
-
cloud_object_model = action_model.cloud_object_model
|
227
|
-
account_model = cloud_object_model.reflect_on_association(:account).klass
|
228
|
-
|
229
|
-
@action = action_model.joins(:cloud_object).where(
|
230
|
-
"#{cloud_object_model.table_name}.id = #{params["#{cloud_object_model.name.demodulize.underscore}_id".to_sym]}",
|
231
|
-
"#{cloud_object_model.table_name}.#{account_model.table_name}_id = #{current_user.account.id}"
|
232
|
-
).find_by(
|
233
|
-
id: params[:id]
|
234
|
-
)
|
235
|
-
end
|
236
|
-
|
237
|
-
# @return [CloudObject::Action] The action model that the controller will handle
|
238
|
-
# @descriptions Constantizes and returns the action model associated to this controller. This method
|
239
|
-
# can be overrided by the implementation in the child controller
|
240
|
-
# @example
|
241
|
-
# # Suppose you are inside CloudHelp::Ticket::ActionsController
|
242
|
-
# puts action_model().new
|
243
|
-
# # This will display a new instance of CloudHelp::Ticket::Action
|
244
|
-
def action_model
|
245
|
-
self.class.name.gsub("Controller","").singularize.constantize
|
246
|
-
end
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
@@ -1,215 +0,0 @@
|
|
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 · 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
|
-
=end
|
33
|
-
module Lesli
|
34
|
-
module Interfaces
|
35
|
-
module Controllers
|
36
|
-
module Activities
|
37
|
-
|
38
|
-
# @return [Json] Json that contains a list of all activities related to a *cloud_object*
|
39
|
-
# @description Retrieves and returns all activities associated to a *cloud_object*. The id of the
|
40
|
-
# *cloud_object* is within the *params* attribute
|
41
|
-
# @example
|
42
|
-
# # Executing this controller's activity from javascript's frontend
|
43
|
-
# let ticket_id = 1;
|
44
|
-
# this.http.get(`127.0.0.1/help/tickets/${ticket_id}/activities`);
|
45
|
-
def index
|
46
|
-
activity_model = activity_model() # If there is a custom activity model, it must be returned in this method
|
47
|
-
cloud_object_model = activity_model.cloud_object_model
|
48
|
-
translations_module = activity_model.name.split("::")[0].gsub("Cloud", "").underscore
|
49
|
-
|
50
|
-
@activities = activity_model.index(
|
51
|
-
current_user,
|
52
|
-
params["#{cloud_object_model.name.demodulize.underscore}_id".to_sym],
|
53
|
-
@query
|
54
|
-
)
|
55
|
-
|
56
|
-
if block_given?
|
57
|
-
yield(@activities)
|
58
|
-
else
|
59
|
-
respond_with_successful(@activities)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# @return [JSON] The json information about the selected activity
|
64
|
-
# @description Retrieves and returns the information about the activity. The id of the
|
65
|
-
# *cloud_object* and the id of the *activity* are within the *params* attribute. If a block
|
66
|
-
# is provided, the execution will be yielded sending the activity as first parameter
|
67
|
-
# @example
|
68
|
-
# # Executing this controller's action from javascript's frontend
|
69
|
-
# let ticket_id = 1;
|
70
|
-
# let activity_id = 5;
|
71
|
-
# this.http.get(`127.0.0.1/help/tickets/${ticket_id}/activities/${activity_id}`);
|
72
|
-
def show
|
73
|
-
set_activity
|
74
|
-
return respond_with_not_found unless @activity
|
75
|
-
|
76
|
-
if block_given?
|
77
|
-
yield(@activity)
|
78
|
-
else
|
79
|
-
return respond_with_successful(@activity)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# @controller_action_param :description [String] The description of the activity
|
84
|
-
# @controller_action_param :field [String] The field that was changed (if any)
|
85
|
-
# @controller_action_param :value_from [String] The initial field value of the activity (if any)
|
86
|
-
# @controller_action_param :value_to [String] The final field value of the activity (if any)
|
87
|
-
# @controller_action_param :category [String] An enum value, that indicates the type of activity recorded
|
88
|
-
# @return [Json] Json that contains wheter the creation of the activity was successful or not.
|
89
|
-
# If it is not successful, it returs an error message
|
90
|
-
# @description Creates a new activity associated to a *cloud_object*. The id of the
|
91
|
-
# *cloud_object* is within the *params* attribute
|
92
|
-
# @example
|
93
|
-
# # Executing this controller's activity from javascript's frontend
|
94
|
-
# let ticket_id = 1;
|
95
|
-
# let data = {
|
96
|
-
# ticket_activity: {
|
97
|
-
# description: "Created",
|
98
|
-
# category: "action_create"
|
99
|
-
# }
|
100
|
-
# };
|
101
|
-
# this.http.post(`127.0.0.1/help/tickets/${ticket_id}/activities`, data);
|
102
|
-
def create
|
103
|
-
activity_model = activity_model() # If there is a custom activity model, it must be returned in this method
|
104
|
-
cloud_object_model = activity_model.cloud_object_model
|
105
|
-
|
106
|
-
set_cloud_object
|
107
|
-
new_activity_params = activity_params.merge(
|
108
|
-
user_creator: current_user,
|
109
|
-
cloud_object: @cloud_object
|
110
|
-
)
|
111
|
-
|
112
|
-
activity = activity_model.new(new_activity_params)
|
113
|
-
if activity.save
|
114
|
-
if block_given?
|
115
|
-
yield(cloud_object, activity)
|
116
|
-
else
|
117
|
-
# Returning the 200 HTTP response
|
118
|
-
respond_with_successful(activity)
|
119
|
-
end
|
120
|
-
else
|
121
|
-
respond_with_error(activity.errors.full_messages)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
protected
|
126
|
-
|
127
|
-
# @return [void]
|
128
|
-
# @descriptions Sets the variable @cloud_object based on the paremeters send in the URL. If no,
|
129
|
-
# cloud_object is found or it is not within the current_user's account, nil is used instead
|
130
|
-
# @example
|
131
|
-
# # Imagine you are inside CloudFocus::Task::ActivitiesController
|
132
|
-
# puts @cloud_object # will display nil
|
133
|
-
# set_cloud_object
|
134
|
-
# puts @cloud_object # Will display an instance of CloudFocus::Task
|
135
|
-
def set_cloud_object
|
136
|
-
activity_model = activity_model() # If there is a custom activity model, it must be returned in this method
|
137
|
-
cloud_object_model = activity_model.cloud_object_model
|
138
|
-
account_model = cloud_object_model.reflect_on_association(:account).klass
|
139
|
-
|
140
|
-
@cloud_object = cloud_object_model.find_by(
|
141
|
-
id: params["#{cloud_object_model.name.demodulize.underscore}_id".to_sym],
|
142
|
-
"#{account_model.table_name}_id".to_sym => current_user.account.id
|
143
|
-
)
|
144
|
-
end
|
145
|
-
|
146
|
-
# @return [void]
|
147
|
-
# @description Sets the variable @activity. The variable contains the activity
|
148
|
-
# to be updated based on the id of the *cloud_object* and the id of the *activity*
|
149
|
-
# @example
|
150
|
-
# #suppose params[:ticket_id] = 1
|
151
|
-
# #suppose params[:id] = 44
|
152
|
-
# puts @activity # will display nil
|
153
|
-
# set_activity
|
154
|
-
# puts @activity # will display an instance of CloudHelp:Ticket::Activity
|
155
|
-
def set_activity
|
156
|
-
activity_model = activity_model() # If there is a custom activity model, it must be returned in this method
|
157
|
-
cloud_object_model = activity_model.cloud_object_model
|
158
|
-
account_model = cloud_object_model.reflect_on_association(:account).klass
|
159
|
-
|
160
|
-
@activity = activity_model.joins(:cloud_object).where(
|
161
|
-
"#{cloud_object_model.table_name}.id = #{params["#{cloud_object_model.name.demodulize.underscore}_id".to_sym]}",
|
162
|
-
"#{cloud_object_model.table_name}.#{account_model.table_name}_id = #{current_user.account.id}"
|
163
|
-
).find_by(
|
164
|
-
id: params[:id]
|
165
|
-
)
|
166
|
-
end
|
167
|
-
|
168
|
-
# @return [Parameters] Allowed parameters for the activity
|
169
|
-
# @description Sanitizes the parameters received from an HTTP call to only allow the specified ones.
|
170
|
-
# Allowed params are _:description_, _:field_name_, _:value_from_, _:value_toe_, _:category_
|
171
|
-
# @example
|
172
|
-
# # supose params contains {
|
173
|
-
# # "ticket_activity": {
|
174
|
-
# # "id": 5,
|
175
|
-
# # "description": "User requested this ticket",
|
176
|
-
# # "tags": "Important",
|
177
|
-
# # "info": "Example"
|
178
|
-
# # }
|
179
|
-
# #}
|
180
|
-
# activity_params = activity_params
|
181
|
-
# puts activity_params
|
182
|
-
# # will remove all unpermitted fields and only print {
|
183
|
-
# # "ticket_activity": {
|
184
|
-
# # "description": "User requested this ticket"
|
185
|
-
# # }
|
186
|
-
# #}
|
187
|
-
def activity_params
|
188
|
-
activity_model = activity_model() # If there is a custom activity model, it must be returned in this method
|
189
|
-
cloud_object_model = activity_model.cloud_object_model
|
190
|
-
|
191
|
-
params.require(
|
192
|
-
"#{cloud_object_model.name.demodulize.underscore}_activity".to_sym
|
193
|
-
).permit(
|
194
|
-
:description,
|
195
|
-
:field_name,
|
196
|
-
:value_from,
|
197
|
-
:value_to,
|
198
|
-
:category
|
199
|
-
)
|
200
|
-
end
|
201
|
-
|
202
|
-
# @return [CloudObject::Activity] The activity model that the controller will handle
|
203
|
-
# @descriptions Constantizes and returns the activity model associated to this controller. This method
|
204
|
-
# can be overrided by the implementation in the child controller
|
205
|
-
# @example
|
206
|
-
# # Suppose you are inside CloudHelp::Ticket::ActivitiesController
|
207
|
-
# puts activity_model().new
|
208
|
-
# # This will display a new instance of CloudHelp::Ticket::Activity
|
209
|
-
def activity_model
|
210
|
-
self.class.name.gsub("Controller","").singularize.constantize
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|