diff --git a/app/controllers/form_field_values_controller.rb b/app/controllers/form_field_values_controller.rb index d508e7446..51a2ea46d 100644 --- a/app/controllers/form_field_values_controller.rb +++ b/app/controllers/form_field_values_controller.rb @@ -13,6 +13,8 @@ class FormFieldValuesController < ApplicationController not_applicable: form_field_value_params[:not_applicable] ) + log_form_field_value_create_activity + render json: @form_field_value, serializer: FormFieldValueSerializer, user: current_user end @@ -37,4 +39,28 @@ class FormFieldValuesController < ApplicationController def check_create_permissions render_403 unless can_submit_form_response?(@form_response) end + + def log_form_field_value_create_activity + step = @form_response.step + protocol = step.protocol + + Activities::CreateActivityService.call( + activity_type: :task_step_form_field_edited, + owner: current_user, + team: protocol.team, + project: nil, + subject: protocol, + message_items: { + user: current_user.id, + form_field_name: @form_field.name, + form: @form_field.form.id, + step: step.id, + step_position: { + id: step.id, + value_for: 'position_plus_one' + }, + my_module: protocol.my_module.id + } + ) + end end diff --git a/app/controllers/step_elements/form_responses_controller.rb b/app/controllers/step_elements/form_responses_controller.rb index 7d1d0671f..20a3c7a80 100644 --- a/app/controllers/step_elements/form_responses_controller.rb +++ b/app/controllers/step_elements/form_responses_controller.rb @@ -13,6 +13,7 @@ module StepElements ActiveRecord::Base.transaction do @form_response = FormResponse.create!(form: @form, created_by: current_user) create_in_step!(@step, @form_response) + log_step_form_activity(:form_added, @step, { form: @form.id }) end render_step_orderable_element(@form_response) @@ -22,6 +23,7 @@ module StepElements render_403 and return unless can_submit_form_response?(@form_response) @form_response.submit!(current_user) + log_step_form_activity(:form_field_submitted, @form_response.step, { form: @form_response.form.id }) render_step_orderable_element(@form_response) end @@ -30,10 +32,29 @@ module StepElements render_403 and return unless can_reset_form_response?(@form_response) new_form_response = @form_response.reset!(current_user) + log_step_form_activity(:form_field_reopened, @form_response.step, { form: @form_response.form.id }) render_step_orderable_element(new_form_response) end + def move + ActiveRecord::Base.transaction do + target = @form_response.step + log_step_form_activity(:form_moved, + @form_response.step, { + form: @form_response.form.id, + step_position_destination: target.position + 1, + step_destination: target.id + }) + end + end + + def destroy + ActiveRecord::Base.transaction do + log_step_form_activity(:form_deleted, @form_response.step, { form: @form_response.form.id }) + end + end + private def form_response_params @@ -57,5 +78,26 @@ module StepElements render_404 unless @form_response end + + def log_step_form_activity(element_type_of, step, message_items = {}) + protocol = step.protocol + message_items[:my_module] = protocol.my_module.id if protocol.in_module? + + Activities::CreateActivityService.call( + activity_type: "#{step.protocol.in_module? ? 'task_step_' : 'protocol_step_'}#{element_type_of}", + owner: current_user, + team: protocol.team, + project: protocol.in_module? ? protocol.my_module.project : nil, + subject: protocol, + message_items: { + user: current_user.id, + step: step.id, + step_position: { + id: step.id, + value_for: 'position_plus_one' + } + }.merge(message_items) + ) + end end end diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb index 13e14ed07..d12b2891a 100644 --- a/config/initializers/extends.rb +++ b/config/initializers/extends.rb @@ -544,7 +544,17 @@ class Extends form_block_edited: 343, form_block_deleted: 344, form_block_rearranged: 345, - export_form_responses: 346 + export_form_responses: 346, + task_step_form_added: 347, + task_step_form_deleted: 348, + task_step_form_moved: 349, + task_step_form_field_edited: 350, + task_step_form_field_submitted: 351, + task_step_form_field_reopened: 352, + protocol_step_form_added: 353, + protocol_step_form_deleted: 354, + protocol_step_form_moved: 355 + } ACTIVITY_GROUPS = { @@ -553,7 +563,7 @@ class Extends task: [8, 58, 9, 59, *10..14, 35, 36, 37, 53, 54, *60..63, 138, 139, 140, 64, 66, 106, 126, 120, 132, 148, 166], task_protocol: [15, 22, 16, 18, 19, 20, 21, 17, 38, 39, 100, 111, 45, 46, 47, 121, 124, 115, 118, 127, 130, 137, - 184, 185, 188, 189, *192..203, 221, 222, 224, 225, 226, 236, *249..252, *274..278, 299, 302, 305, 327], + 184, 185, 188, 189, *192..203, 221, 222, 224, 225, 226, 236, *249..252, *274..278, 299, 302, 305, 327, *347..352], task_inventory: [55, 56, 146, 147, 183], experiment: [*27..31, 57, 141, 165], reports: [48, 50, 49, 163, 164], @@ -562,7 +572,7 @@ class Extends protocol_repository: [80, 103, 89, 87, 79, 90, 91, 88, 85, 86, 84, 81, 82, 83, 101, 112, 123, 125, 117, 119, 129, 131, 187, 186, 190, 191, *204..215, 220, 223, 227, 228, 229, *230..235, - *237..240, *253..256, *279..283, 300, 304, 307, 330], + *237..240, *253..256, *279..283, 300, 304, 307, 330, *353..355], team: [92, 94, 93, 97, 104, 244, 245], label_templates: [*216..219], storage_locations: [*309..315], diff --git a/config/locales/global_activities/en.yml b/config/locales/global_activities/en.yml index 4c3e97cd8..d105342c5 100644 --- a/config/locales/global_activities/en.yml +++ b/config/locales/global_activities/en.yml @@ -360,6 +360,15 @@ en: 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." export_form_responses_html: "%{user} exported data from form %{form} in Form templates." + task_step_form_added_html: "%{user} added form %{form} in protocol's step %{step_position} %{step} on task %{my_module}." + task_step_form_deleted_html: "%{user} deleted form %{form} in protocol's step %{step_position} %{step} on task %{my_module}." + task_step_form_moved_html: "%{user} moved form %{form} in protocol's step %{step_position} %{step} to step %{step_position_destination} %{step_destination} on task %{my_module}." + task_step_form_field_edited_html: "%{user} edited form field %{form_field_name} in form %{form} in protocol's step %{step_position} %{step} on task %{my_module}." + task_step_form_field_submitted_html: "%{user} submitted form %{form} in protocol's step %{step_position} %{step} on task %{my_module}." + task_step_form_field_reopened_html: "%{user} reopened form %{form} in protocol's step %{step_position} %{step} on task %{my_module}." + protocol_step_form_added_html: "%{user} added form %{form} in protocol's step %{step_position} %{step} in Protocol repository." + protocol_step_form_deleted_html: "%{user} deleted form %{form} in protocol's step %{step_position} %{step} in Protocol repository." + protocol_step_form_moved_html: "%{user} moved form %{form} in protocol's step %{step_position} %{step} to step %{step_position_destination} %{step_destination} in Protocol repository." activity_name: create_project: "Project created" rename_project: "Project renamed" @@ -671,6 +680,15 @@ en: form_block_deleted: "Form block deleted" form_block_rearranged: "Form block rearranged" export_form_responses: "Form data exported" + task_step_form_added: "Task step form added" + task_step_form_deleted: "Task step form deleted" + task_step_form_moved: "Task step form moved" + task_step_form_field_edited: "Task step form field edited" + task_step_form_field_submitted: "Task step form submitted" + task_step_form_field_reopened: "Task step form reopened" + protocol_step_form_added: "Protocol step form added" + protocol_step_form_deleted: "Task step form deleted" + protocol_step_form_moved: "Task step form moved" activity_group: projects: "Projects" task_results: "Task results" diff --git a/config/routes.rb b/config/routes.rb index bdfa399eb..4e7957e51 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -613,10 +613,11 @@ Rails.application.routes.draw do post :reorder, on: :collection end end - resources :form_responses, controller: 'step_elements/form_responses', only: %i(create) do + resources :form_responses, controller: 'step_elements/form_responses', only: %i(create destroy) do member do post :submit post :reset + post :move end end member do diff --git a/spec/factories/form_responses.rb b/spec/factories/form_responses.rb index 06fca1575..34c1022cd 100644 --- a/spec/factories/form_responses.rb +++ b/spec/factories/form_responses.rb @@ -4,6 +4,8 @@ FactoryBot.define do factory :form_response do association :form association :created_by, factory: :user + association :step_orderable_element, factory: :step_orderable_element + status { :pending } trait :submitted do