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