From 9214d26782ce76f68d54b3344fd2cb4cdcbdae38 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 3 Jan 2025 13:20:12 +0100 Subject: [PATCH] Add activities to form templates [SCI-11388] --- app/controllers/form_fields_controller.rb | 16 ++++++++++++++++ app/controllers/forms_controller.rb | 17 +++++++++++++++++ app/helpers/global_activities_helper.rb | 2 ++ config/initializers/extends.rb | 13 +++++++++++-- config/locales/global_activities/en.yml | 18 ++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/app/controllers/form_fields_controller.rb b/app/controllers/form_fields_controller.rb index 8e071d47d..75efe72ec 100644 --- a/app/controllers/form_fields_controller.rb +++ b/app/controllers/form_fields_controller.rb @@ -18,6 +18,7 @@ class FormFieldsController < ApplicationController ) ) if @form_field.save + log_activity(:form_block_added, block_name: @form_field.name) render json: @form_field, serializer: FormFieldSerializer, user: current_user else render json: { error: @form_field.errors.full_messages }, status: :unprocessable_entity @@ -28,6 +29,7 @@ class FormFieldsController < ApplicationController def update ActiveRecord::Base.transaction do if @form_field.update(form_field_params.merge({ last_modified_by: current_user })) + log_activity(:form_block_edited, block_name: @form_field.name) render json: @form_field, serializer: FormFieldSerializer, user: current_user else render json: { error: @form_field.errors.full_messages }, status: :unprocessable_entity @@ -38,6 +40,7 @@ class FormFieldsController < ApplicationController def destroy ActiveRecord::Base.transaction do if @form_field.destroy + log_activity(:form_block_deleted, block_name: @form_field.name) render json: {} else render json: { error: @form_field.errors.full_messages }, status: :unprocessable_entity @@ -51,6 +54,7 @@ class FormFieldsController < ApplicationController @form_field = @form.form_fields.find(data[:id]) @form_field.insert_at!(data[:position].to_i) end + log_activity(:form_block_rearranged) end render json: params[:form_field_positions], status: :ok @@ -79,4 +83,16 @@ class FormFieldsController < ApplicationController def form_field_params params.require(:form_field).permit(:name, :description, { data: [:type, :unit, :time, :range, validations: {}, options: []] }, :required, :allow_not_applicable, :uid) end + + def log_activity(type_of, message_items = {}) + Activities::CreateActivityService + .call(activity_type: type_of, + owner: current_user, + team: @form.team, + subject: @form, + message_items: { + form: @form.id, + user: current_user.id + }.merge(message_items)) + end end diff --git a/app/controllers/forms_controller.rb b/app/controllers/forms_controller.rb index 953b1fa24..742ffdb71 100644 --- a/app/controllers/forms_controller.rb +++ b/app/controllers/forms_controller.rb @@ -38,6 +38,7 @@ class FormsController < ApplicationController ) if @form.save + log_activity(@form, :form_created) render json: @form, serializer: FormSerializer, user: current_user else render json: { error: @form.errors.full_messages }, status: :unprocessable_entity @@ -48,6 +49,7 @@ class FormsController < ApplicationController def update ActiveRecord::Base.transaction do if @form.update(form_params.merge({ last_modified_by: current_user })) + log_activity(@form, :form_name_changed) render json: @form, serializer: FormSerializer, user: current_user else render json: { error: @form.errors.full_messages }, status: :unprocessable_entity @@ -73,6 +75,7 @@ class FormsController < ApplicationController published_by: current_user, published_on: DateTime.now ) + log_activity(@form, :form_published, { version_number: 1 }) render json: @form, serializer: FormSerializer, user: current_user end @@ -99,6 +102,7 @@ class FormsController < ApplicationController forms.each do |form| form.transaction do form.archive!(current_user) + log_activity(form, :form_archived) counter += 1 rescue StandardError => e Rails.logger.error e.message @@ -123,6 +127,7 @@ class FormsController < ApplicationController forms.each do |form| form.transaction do form.restore!(current_user) + log_activity(form, :form_restored) counter += 1 rescue StandardError => e Rails.logger.error e.message @@ -189,4 +194,16 @@ class FormsController < ApplicationController def form_params params.require(:form).permit(:name, :description) end + + def log_activity(form, type_of, message_items = {}) + Activities::CreateActivityService + .call(activity_type: type_of, + owner: current_user, + team: form.team, + subject: form, + message_items: { + form: form.id, + user: current_user.id + }.merge(message_items)) + end end diff --git a/app/helpers/global_activities_helper.rb b/app/helpers/global_activities_helper.rb index 4d09aaee1..167c503e1 100644 --- a/app/helpers/global_activities_helper.rb +++ b/app/helpers/global_activities_helper.rb @@ -118,6 +118,8 @@ module GlobalActivitiesHelper else storage_location_path(obj, team: activity.team.id) end + when Form + path = form_path(obj, team: obj.team.id) else return current_value end diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb index 4055f217b..10a86c919 100644 --- a/config/initializers/extends.rb +++ b/config/initializers/extends.rb @@ -534,7 +534,16 @@ class Extends form_access_revoked: 333, form_access_granted_all_team_members: 334, form_access_changed_all_team_members: 335, - form_access_revoked_all_team_members: 336 + form_access_revoked_all_team_members: 336, + form_created: 337, + form_archived: 338, + form_restored: 339, + form_published: 340, + form_name_changed: 341, + form_block_added: 342, + form_block_edited: 343, + form_block_deleted: 344, + form_block_rearranged: 345 } ACTIVITY_GROUPS = { @@ -558,7 +567,7 @@ class Extends storage_locations: [*309..315], container_storage_locations: [*316..322, 326], storage_location_repository_rows: [*323..325], - forms: [331, 332, 333, 334, 335, 336] + forms: [331, 332, 333, 334, 335, 336, *337..345] } TOP_LEVEL_ASSIGNABLES = %w(Project Team Protocol Repository Form).freeze diff --git a/config/locales/global_activities/en.yml b/config/locales/global_activities/en.yml index 93d39d298..878891bb6 100644 --- a/config/locales/global_activities/en.yml +++ b/config/locales/global_activities/en.yml @@ -350,6 +350,15 @@ en: form_access_granted_all_team_members_html: "%{user} granted access to all team members of %{team} team with user role %{role} to form template %{form}." form_access_changed_all_team_members_html: "%{user} changed %{team}'s role on form template %{form} to %{role}." form_access_revoked_all_team_members_html: "%{user} removed %{team} team members with user role %{role} from form template %{form}." + form_created_html: "%{user} created form %{form} in Form templates." + form_archived_html: "%{user} archived form %{form} in Form templates." + form_restored_html: "%{user} restored form %{form} from archive in Form templates." + form_published_html: "%{user} published form %{form} version %{version_number}." + form_name_changed_html: "%{user} edited form name in Form templates." + form_block_added_html: "%{user} created form block %{block_name} in form %{form} in Form templates." + form_block_edited_html: "%{user} edited form block %{block_name} in form %{form} in Form templates." + form_block_deleted_html: "%{user} deleted form block %{block_name} in form %{form} in Form templates." + form_block_rearranged_html: "%{user} rearranged form blocks in form %{form} in Form templates." activity_name: create_project: "Project created" rename_project: "Project renamed" @@ -651,6 +660,15 @@ en: task_result_restore_asset_version: "Result file version restored" repository_column_restore_asset_version: "Inventroy item file version restored" protocol_step_restore_asset_version: "Protocol step file version restored" + form_created: "Form created" + form_archived: "Form archived" + form_restored: "Form restored from archive" + form_published: "Form published" + form_name_changed: "Form name edited" + form_block_added: "Form block added" + form_block_edited: "Form block edited" + form_block_deleted: "Form block deleted" + form_block_rearranged: "Form block rearranged" activity_group: projects: "Projects" task_results: "Task results"