diff --git a/app/controllers/asset_sync_controller.rb b/app/controllers/asset_sync_controller.rb
index 1ef9318f5..59a26a8f9 100644
--- a/app/controllers/asset_sync_controller.rb
+++ b/app/controllers/asset_sync_controller.rb
@@ -36,6 +36,8 @@ class AssetSyncController < ApplicationController
@asset.file.attach(io: request.body, filename: @asset.file.filename)
@asset.touch
+ log_activity
+
render json: AssetSyncTokenSerializer.new(@asset_sync_token).as_json
end
@@ -43,6 +45,47 @@ class AssetSyncController < ApplicationController
render plain: Constants::ASSET_SYNC_URL
end
+ def log_activity
+ assoc ||= @asset.step
+ assoc ||= @asset.result
+
+ case assoc
+ when Step
+ if assoc.protocol.in_module?
+ log_step_activity(
+ :edit_task_step_file_locally,
+ assoc,
+ assoc.my_module.project,
+ my_module: assoc.my_module.id,
+ file: @asset.file_name,
+ user: current_user.id,
+ step_position_original: @asset.step.position + 1,
+ step: assoc.id
+ )
+ else
+ log_step_activity(
+ :edit_protocol_template_file_locally,
+ assoc,
+ nil,
+ {
+ file: @asset.file_name,
+ user: current_user.id,
+ step_position_original: @asset.step.position + 1,
+ step: assoc.id
+ }
+ )
+ end
+ when Result
+ log_result_activity(
+ :edit_task_result_file_locally,
+ assoc,
+ file: @asset.file_name,
+ user: current_user.id,
+ result: Result.first.id
+ )
+ end
+ end
+
private
def conflicting_asset_copy_token
@@ -76,6 +119,32 @@ class AssetSyncController < ApplicationController
head :forbidden unless can_manage_asset?(@asset)
end
+ def log_step_activity(type_of, step, project = nil, message_items = {})
+ default_items = { step: step.id,
+ step_position: { id: step.id, value_for: 'position_plus_one' } }
+ message_items = default_items.merge(message_items)
+
+ Activities::CreateActivityService
+ .call(activity_type: type_of,
+ owner: User.first,
+ subject: step.protocol,
+ team: step.protocol.team,
+ project: project,
+ message_items: message_items)
+ end
+
+ def log_result_activity(type_of, result, message_items)
+ Activities::CreateActivityService
+ .call(activity_type: type_of,
+ owner: current_user,
+ subject: result,
+ team: result.my_module.team,
+ project: result.my_module.project,
+ message_items: {
+ result: result.id
+ }.merge(message_items))
+ end
+
def check_asset_sync
render_404 if ENV['ASSET_SYNC_URL'].blank?
end
diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb
index 30df5d97b..3247672cb 100644
--- a/config/initializers/extends.rb
+++ b/config/initializers/extends.rb
@@ -492,16 +492,19 @@ class Extends
export_inventories: 293,
edit_image_on_inventory_item: 294,
edit_wopi_file_on_inventory_item: 295,
- export_inventory_stock_consumption: 296
+ export_inventory_stock_consumption: 296,
+ edit_task_step_file_locally: 297,
+ edit_protocol_template_file_locally: 298,
+ edit_task_result_file_locally: 299
}
ACTIVITY_GROUPS = {
projects: [*0..7, 32, 33, 34, 95, 108, 65, 109, *158..162, 241, 242, 243],
- task_results: [23, 26, 25, 42, 24, 40, 41, 99, 110, 122, 116, 128, 169, 172, 178, *246..248, *257..273, *284..291],
+ task_results: [23, 26, 25, 42, 24, 40, 41, 99, 110, 122, 116, 128, 169, 172, 178, *246..248, *257..273, *284..291, 299],
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,
- 168, 171, 177, 184, 185, 188, 189, *192..203, 221, 222, 224, 225, 226, 236, *249..252, *274..278],
+ 168, 171, 177, 184, 185, 188, 189, *192..203, 221, 222, 224, 225, 226, 236, *249..252, *274..278, 297],
task_inventory: [55, 56, 146, 147, 183],
experiment: [*27..31, 57, 141, 165],
reports: [48, 50, 49, 163, 164],
@@ -510,7 +513,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, 170, 173, 179, 187, 186,
190, 191, *204..215, 220, 223, 227, 228, 229, *230..235,
- *237..240, *253..256, *279..283],
+ *237..240, *253..256, *279..283, 298],
team: [92, 94, 93, 97, 104, 244, 245],
label_templates: [*216..219]
}
diff --git a/config/locales/global_activities/en.yml b/config/locales/global_activities/en.yml
index 5fbf382b2..b0e7294a1 100644
--- a/config/locales/global_activities/en.yml
+++ b/config/locales/global_activities/en.yml
@@ -317,6 +317,9 @@ en:
result_text_moved_html: "%{user} moved text %{text_name} from result %{result_original} to result %{result_destination}."
result_table_moved_html: "%{user} moved table %{table_name} from result %{result_original} to result %{result_destination}."
move_chemical_structure_on_result_html: "%{user} moved chemical structure %{file} from result %{result_original} to result %{result_destination}."
+ edit_task_step_file_locally_html: "%{user} locally edited file %{file} on protocol's step %{step_position_original} %{step} on task %{my_module}"
+ edit_protocol_template_file_locally_html: "%{user} locally edited file %{file} on protocol's step %{step_position_original} %{step} with SciNote Edit in Protocol repository"
+ edit_task_result_file_locally_html: "%{user} locally edited file %{file} on result %{result}"
export_inventories_html: "%{user} exported inventory %{inventories}"
edit_image_on_inventory_item_html: "%{user} edited image %{asset_name} on inventory item %{repository_row} in inventory %{repository}: %{action}."
edit_wopi_file_on_inventory_item_html: "%{user} edited Office online file %{asset_name} on inventory item %{repository_row} in inventory %{repository}: %{action}."
@@ -592,6 +595,9 @@ en:
result_text_moved: "Result text moved"
result_table_moved: "Result table moved"
move_chemical_structure_on_result: "Chemical structure on result moved"
+ edit_task_step_file_locally: "File on task step edited locally"
+ edit_protocol_template_file_locally: "File on protocol templates edited locally"
+ edit_task_result_file_locally: "File on task result edited locally"
export_inventories: "Inventories exported"
edit_image_on_inventory_item: "Inventory item image edited"
edit_wopi_file_on_inventory_item: "Inventory item wopi file edited"