diff --git a/app/controllers/protocols_controller.rb b/app/controllers/protocols_controller.rb
index d3b84ab20..ac8bcb261 100644
--- a/app/controllers/protocols_controller.rb
+++ b/app/controllers/protocols_controller.rb
@@ -376,6 +376,7 @@ class ProtocolsController < ApplicationController
end
else
# Everything good, display flash & render 200
+ log_activity_task_protocol(:update_protocol_in_task_from_repository)
flash[:success] = t(
'my_modules.protocols.revert_flash'
)
@@ -415,18 +416,7 @@ class ProtocolsController < ApplicationController
end
else
# Everything good, record activity, display flash & render 200
- Activity.create(
- type_of: :revert_protocol,
- project: @protocol.my_module.experiment.project,
- experiment: @protocol.my_module.experiment,
- my_module: @protocol.my_module,
- user: current_user,
- message: I18n.t(
- 'activities.revert_protocol',
- user: current_user.full_name,
- protocol: @protocol.name
- )
- )
+ log_activity_task_protocol(:update_protocol_in_repository_from_task)
flash[:success] = t(
'my_modules.protocols.update_parent_flash'
)
@@ -466,6 +456,7 @@ class ProtocolsController < ApplicationController
end
else
# Everything good, display flash & render 200
+ log_activity_task_protocol(:update_protocol_in_task_from_repository)
flash[:success] = t(
'my_modules.protocols.update_from_parent_flash'
)
@@ -505,18 +496,7 @@ class ProtocolsController < ApplicationController
end
else
# Everything good, record activity, display flash & render 200
- Activity.create(
- type_of: :load_protocol_from_repository,
- project: @protocol.my_module.experiment.project,
- experiment: @protocol.my_module.experiment,
- my_module: @protocol.my_module,
- user: current_user,
- message: I18n.t(
- 'activities.load_protocol_from_repository',
- user: current_user.full_name,
- protocol: @source.name
- )
- )
+ log_activity_task_protocol(:load_protocol_to_task_from_repository)
flash[:success] = t('my_modules.protocols.load_from_repository_flash')
flash.keep(:success)
format.json { render json: {}, status: :ok }
@@ -553,18 +533,15 @@ class ProtocolsController < ApplicationController
end
else
# Everything good, record activity, display flash & render 200
- Activity.create(
- type_of: :load_protocol_from_file,
- project: @protocol.my_module.experiment.project,
- experiment: @protocol.my_module.experiment,
- my_module: @protocol.my_module,
- user: current_user,
- message: I18n.t(
- 'activities.load_protocol_from_file',
- user: current_user.full_name,
- protocol: @protocol_json[:name]
- )
- )
+ Activities::CreateActivityService
+ .call(activity_type: :load_protocol_to_task_from_file,
+ owner: current_user,
+ subject: @protocol,
+ team: current_team,
+ project: @protocol.my_module.experiment.project,
+ message_items: {
+ protocol: @protocol.id
+ })
flash[:success] = t(
'my_modules.protocols.load_from_file_flash'
)
@@ -1234,4 +1211,17 @@ class ProtocolsController < ApplicationController
protocol: @protocol.id
})
end
+
+ def log_activity_task_protocol(type_of)
+ Activities::CreateActivityService
+ .call(activity_type: type_of,
+ owner: current_user,
+ subject: @protocol,
+ team: current_team,
+ project: @protocol.my_module.experiment.project,
+ message_items: {
+ protocol_task: @protocol.id,
+ protocol_reporitory: @protocol.parent.id
+ })
+ end
end
diff --git a/app/controllers/step_comments_controller.rb b/app/controllers/step_comments_controller.rb
index fbeb17ead..4e410276c 100644
--- a/app/controllers/step_comments_controller.rb
+++ b/app/controllers/step_comments_controller.rb
@@ -52,19 +52,7 @@ class StepCommentsController < ApplicationController
step_comment_annotation_notification
# Generate activity (this can only occur in module,
# but nonetheless check if my module is not nil)
- Activity.create(
- type_of: :add_comment_to_step,
- user: current_user,
- project: @step.my_module.experiment.project,
- experiment: @step.my_module.experiment,
- my_module: @step.my_module,
- message: t(
- "activities.add_comment_to_step",
- user: current_user.full_name,
- step: @step.position + 1,
- step_name: @step.name
- )
- )
+ log_activity(:add_comment_to_step)
format.json {
render json: {
@@ -111,19 +99,8 @@ class StepCommentsController < ApplicationController
step_comment_annotation_notification(old_text)
# Generate activity
- Activity.create(
- type_of: :edit_step_comment,
- user: current_user,
- project: @step.my_module.experiment.project,
- experiment: @step.my_module.experiment,
- my_module: @step.my_module,
- message: t(
- 'activities.edit_step_comment',
- user: current_user.full_name,
- step: @step.position + 1,
- step_name: @step.name
- )
- )
+ log_activity(:edit_step_comment)
+
message = custom_auto_link(@comment.message, team: current_team)
render json: { comment: message }, status: :ok
else
@@ -138,20 +115,7 @@ class StepCommentsController < ApplicationController
respond_to do |format|
format.json do
if @comment.destroy
- # Generate activity
- Activity.create(
- type_of: :delete_step_comment,
- user: current_user,
- project: @step.my_module.experiment.project,
- experiment: @step.my_module.experiment,
- my_module: @step.my_module,
- message: t(
- 'activities.delete_step_comment',
- user: current_user.full_name,
- step: @step.position + 1,
- step_name: @step.name
- )
- )
+ log_activity(:delete_step_comment)
render json: {}, status: :ok
else
render json: { message: I18n.t('comments.delete_error') },
@@ -215,4 +179,18 @@ class StepCommentsController < ApplicationController
protocols_my_module_url(@step.my_module)))
)
end
+
+ def log_activity(type_of)
+ Activities::CreateActivityService
+ .call(activity_type: type_of,
+ owner: current_user,
+ subject: @protocol,
+ team: current_team,
+ project: @step.my_module.experiment.project,
+ message_items: {
+ protocol: @protocol.id,
+ step: @step.id,
+ step_position: { id: @step.id, value_for: 'position' }
+ })
+ end
end
diff --git a/app/controllers/steps_controller.rb b/app/controllers/steps_controller.rb
index 236bc9e7e..0bf9450d5 100644
--- a/app/controllers/steps_controller.rb
+++ b/app/controllers/steps_controller.rb
@@ -67,19 +67,7 @@ class StepsController < ApplicationController
# Generate activity
if @protocol.in_module?
- Activity.create(
- type_of: :create_step,
- user: current_user,
- project: @my_module.experiment.project,
- experiment: @my_module.experiment,
- my_module: @my_module,
- message: t(
- "activities.create_step",
- user: current_user.full_name,
- step: @step.position + 1,
- step_name: @step.name
- )
- )
+ log_activity(:create_step, @my_module.experiment.project)
else
log_activity(:add_step_to_protocol_repository)
end
@@ -186,19 +174,7 @@ class StepsController < ApplicationController
# Generate activity
if @protocol.in_module?
- Activity.create(
- type_of: :edit_step,
- user: current_user,
- project: @my_module.experiment.project,
- experiment: @my_module.experiment,
- my_module: @my_module,
- message: t(
- "activities.edit_step",
- user: current_user.full_name,
- step: @step.position + 1,
- step_name: @step.name
- )
- )
+ log_activity(:edit_step, @my_module.experiment.project)
else
log_activity(:edit_step_in_protocol_repository)
end
@@ -276,41 +252,34 @@ class StepsController < ApplicationController
# Create activity
if changed
- str = if checked
- 'activities.check_step_checklist_item'
- else
- 'activities.uncheck_step_checklist_item'
- end
completed_items = @chk_item.checklist.checklist_items
.where(checked: true).count
all_items = @chk_item.checklist.checklist_items.count
text_activity = smart_annotation_parser(@chk_item.text)
.gsub(/\s+/, ' ')
- message = t(
- str,
- user: current_user.full_name,
- checkbox: text_activity,
- step: @chk_item.checklist.step.position + 1,
- step_name: @chk_item.checklist.step.name,
- completed: completed_items,
- all: all_items
- )
-
+ type_of = if checked
+ :check_step_checklist_item
+ else
+ :uncheck_step_checklist_item
+ end
# This should always hold true (only in module can
# check items be checked, but still check just in case)
if @protocol.in_module?
- Activity.create(
- user: current_user,
- project: @protocol.my_module.experiment.project,
- experiment: @protocol.my_module.experiment,
- my_module: @protocol.my_module,
- message: message,
- type_of: if checked
- :check_step_checklist_item
- else
- :uncheck_step_checklist_item
- end
- )
+ Activities::CreateActivityService
+ .call(activity_type: type_of,
+ owner: current_user,
+ subject: @protocol,
+ team: current_team,
+ project: @protocol.my_module.experiment.project,
+ message_items: {
+ protocol: @protocol.id,
+ step: @chk_item.checklist.step.id,
+ step_position: { id: @chk_item.checklist.step.id,
+ value_for: 'position' },
+ checkbox: text_activity,
+ num_completed: completed_items.to_s,
+ num_all: all_items.to_s
+ })
end
end
else
@@ -340,30 +309,25 @@ class StepsController < ApplicationController
if changed
completed_steps = @protocol.steps.where(completed: true).count
all_steps = @protocol.steps.count
- str = 'activities.uncomplete_step'
- str = 'activities.complete_step' if completed
-
- message = t(
- str,
- user: current_user.full_name,
- step: @step.position + 1,
- step_name: @step.name,
- completed: completed_steps,
- all: all_steps
- )
+ type_of = completed ? :complete_step : :uncomplete_step
# Toggling step state can only occur in
# module protocols, so my_module is always
# not nil; nonetheless, check if my_module is present
if @protocol.in_module?
- Activity.create(
- user: current_user,
- project: @protocol.my_module.experiment.project,
- experiment: @protocol.my_module.experiment,
- my_module: @protocol.my_module,
- message: message,
- type_of: completed ? :complete_step : :uncomplete_step
- )
+ Activities::CreateActivityService
+ .call(activity_type: type_of,
+ owner: current_user,
+ subject: @protocol,
+ team: current_team,
+ project: @protocol.my_module.experiment.project,
+ message_items: {
+ protocol: @protocol.id,
+ step: @step.id,
+ step_position: { id: @step.id, value_for: 'position' },
+ num_completed: completed_steps.to_s,
+ num_all: all_steps.to_s
+ })
end
end
@@ -652,15 +616,17 @@ class StepsController < ApplicationController
)
end
- def log_activity(type_of)
+ def log_activity(type_of, project = nil)
Activities::CreateActivityService
.call(activity_type: type_of,
owner: current_user,
subject: @protocol,
team: current_team,
+ project: project,
message_items: {
protocol: @protocol.id,
- step: @step.id
+ step: @step.id,
+ step_position: { id: @step.id, value_for: 'position' }
})
end
end
diff --git a/app/models/step.rb b/app/models/step.rb
index a623a1a4e..5ee0e969e 100644
--- a/app/models/step.rb
+++ b/app/models/step.rb
@@ -131,19 +131,17 @@ class Step < ApplicationRecord
# Generate "delete" activity, but only if protocol is
# located inside module
if (protocol.my_module.present?) then
- Activity.create(
- type_of: :destroy_step,
- project: protocol.my_module.experiment.project,
- experiment: protocol.my_module.experiment,
- my_module: protocol.my_module,
- user: @current_user,
- message: I18n.t(
- "activities.destroy_step",
- user: @current_user.full_name,
- step: position + 1,
- step_name: name
- )
- )
+ Activities::CreateActivityService
+ .call(activity_type: :destroy_step,
+ owner: @current_user,
+ subject: protocol,
+ team: protocol.my_module.experiment.project.team,
+ project: protocol.my_module.experiment.project,
+ message_items: {
+ protocol: protocol.id,
+ step: id,
+ step_position: { id: id, value_for: 'position' }
+ })
end
end
diff --git a/app/utilities/wopi_util.rb b/app/utilities/wopi_util.rb
index 06682a82e..113dd418b 100644
--- a/app/utilities/wopi_util.rb
+++ b/app/utilities/wopi_util.rb
@@ -73,41 +73,40 @@ module WopiUtil
end
def create_wopi_file_activity(current_user, started_editing)
+ action = if started_editing
+ t('activities.wupi_file_editing.started')
+ else
+ t('activities.wupi_file_editing.finished')
+ end
if @assoc.class == Step
- activity = Activity.new(
- type_of: :start_edit_wopi_file,
- user: current_user,
- message: t(
- started_editing ? 'activities.start_edit_wopi_file_step' :
- 'activities.unlock_wopi_file_step',
- user: current_user.full_name,
- file: @asset.file_file_name,
- step: @asset.step.position + 1,
- step_name: @asset.step.name
- )
- )
-
if @protocol.in_module?
- activity.my_module = @protocol.my_module
- activity.project = @protocol.my_module.experiment.project
+ project = @protocol.my_module.experiment.project
end
-
- activity.save
+ Activities::CreateActivityService
+ .call(activity_type: :edit_wopi_file_on_step,
+ owner: current_user,
+ subject: @protocol,
+ team: current_team,
+ project: project,
+ message_items: {
+ protocol: @protocol.id,
+ step: @asset.step.id,
+ step_position: { id: @asset.step.id, value_for: 'position' },
+ asset_name: { id: @asset.id, value_for: 'file_file_name' },
+ action: action
+ })
elsif @assoc.class == Result
- Activity.create(
- type_of: :start_edit_wopi_file,
- user: current_user,
- project: @my_module.experiment.project,
- experiment: @my_module.experiment,
- my_module: @my_module,
- message: t(
- started_editing ? 'activities.start_edit_wopi_file_result' :
- 'activities.unlock_wopi_file_result',
- user: current_user.full_name,
- file: @asset.file_file_name,
- result: @asset.result.name
- )
- )
+ Activities::CreateActivityService
+ .call(activity_type: :edit_wopi_file_on_result,
+ owner: current_user,
+ subject: @asset.result,
+ team: @my_module.experiment.project.team,
+ project: @my_module.experiment.project,
+ message_items: {
+ result: @asset.result.id,
+ asset_name: { id: @asset.id, value_for: 'file_file_name' },
+ action: action
+ })
end
end
end
diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb
index b6cab4435..8e0b730ff 100644
--- a/config/initializers/extends.rb
+++ b/config/initializers/extends.rb
@@ -142,9 +142,9 @@ class Extends
destroy_result: 42,
start_edit_wopi_file: 43,
unlock_wopi_file: 44,
- load_protocol_from_file: 45,
- load_protocol_from_repository: 46,
- revert_protocol: 47,
+ load_protocol_to_task_from_file: 45,
+ load_protocol_to_task_from_repository: 46,
+ update_protocol_in_task_from_repository: 47,
create_report: 48,
delete_report: 49,
edit_report: 50,
@@ -195,6 +195,8 @@ class Extends
export_projects: 95,
export_inventory_items: 96,
export_audit_trails: 97,
- export_system_logs: 98
+ export_system_logs: 98,
+ edit_wopi_file_on_result: 99,
+ edit_wopi_file_on_step: 100
}.freeze
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 4285e9fab..9c1cfb60b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1317,6 +1317,9 @@ en:
text: "text"
table: "table"
asset: "file"
+ wupi_file_editing:
+ started: "editing started"
+ finished: "editing finished"
create_project: "%{user} created project %{project}."
rename_project: "%{user} renamed project %{project}."
change_project_visibility: "%{user} changed project %{project}'s visibility to %{visibility}."