diff --git a/app/controllers/project_folders_controller.rb b/app/controllers/project_folders_controller.rb index 7a83f1ff3..3c75b56d1 100644 --- a/app/controllers/project_folders_controller.rb +++ b/app/controllers/project_folders_controller.rb @@ -96,12 +96,6 @@ class ProjectFoldersController < ApplicationController end end - def archive - folder = current_team.project_folders.find(params[:id]) - - log_activity(:archive_project_folder, folder, project_folder: folder.id) - end - private def load_project_folder @@ -143,13 +137,15 @@ class ProjectFoldersController < ApplicationController return if project_ids.blank? current_team.projects.where(id: project_ids).each do |project| - source_folder_name = project.project_folder&.name || I18n.t('global_activities.root_folder_level') + source_folder_id = project.project_folder&.id project.update!(project_folder: destination_folder) - destination_folder_name = project.project_folder&.name || I18n.t('global_activities.root_folder_level') + destination_folder_id = project.project_folder&.id - log_activity(:move_project, project, project: project.id, - destination_folder: destination_folder_name, - source_folder: source_folder_name) + log_activity(:move_project, + project, + project: project.id, + project_folder_to: destination_folder_id, + project_folder_from: source_folder_id) end end @@ -158,13 +154,15 @@ class ProjectFoldersController < ApplicationController return if folder_ids.blank? current_team.project_folders.where(id: folder_ids).each do |folder| - source_folder_name = folder.parent_folder&.name || I18n.t('global_activities.root_folder_level') + source_folder_id = folder.parent_folder&.id folder.update!(parent_folder: destination_folder) - destination_folder_name = folder.parent_folder&.name || I18n.t('global_activities.root_folder_level') + destination_folder_id = folder.parent_folder&.id - log_activity(:move_project_folder, folder, project_folder: folder.id, - destination_folder: destination_folder_name, - source_folder: source_folder_name) + log_activity(:move_project_folder, + folder, + project_folder: folder.id, + project_folder_to: destination_folder_id, + project_folder_from: source_folder_id) end end diff --git a/app/helpers/global_activities_helper.rb b/app/helpers/global_activities_helper.rb index d15f5d86f..1e95c8afc 100644 --- a/app/helpers/global_activities_helper.rb +++ b/app/helpers/global_activities_helper.rb @@ -28,7 +28,12 @@ module GlobalActivitiesHelper end def generate_link(message_item, activity) - obj = message_item['type'].constantize.find_by_id(message_item['id']) + obj = if message_item['id'] + message_item['type'].constantize.find_by(id: message_item['id']) + else + message_item['type'].constantize.new + end + return message_item['value'] unless obj current_value = generate_name(message_item) @@ -88,7 +93,11 @@ module GlobalActivitiesHelper when Report path = reports_path(team: obj.team.id) when ProjectFolder - path = project_folder_path(obj, team: obj.team.id) + path = if obj.new_record? + projects_path(team: activity.team.id) + else + project_folder_path(obj, team: obj.team.id) + end else return current_value end @@ -96,7 +105,14 @@ module GlobalActivitiesHelper end def generate_name(message_item) - obj = message_item['type'].constantize.find_by_id(message_item['id']) + obj = if message_item['id'] + message_item['type'].constantize.find_by(id: message_item['id']) + else + message_item['type'].constantize.new + end + + return I18n.t('projects.index.breadcrumbs_root') if obj.is_a?(ProjectFolder) && obj.new_record? + return message_item['value'] unless obj value = obj.public_send(message_item['value_for'] || 'name') diff --git a/app/services/activities/create_activity_service.rb b/app/services/activities/create_activity_service.rb index 36edf3f65..3e1c4d410 100644 --- a/app/services/activities/create_activity_service.rb +++ b/app/services/activities/create_activity_service.rb @@ -51,7 +51,7 @@ module Activities k = k.to_s.sub('tiny_mce_asset', 'asset').to_sym if k.to_s.include? 'tiny_mce_asset' if const - if v.is_a?(Hash) # Value is array, so you have getter specified + if v.is_a?(Hash) # Value is Hash, so you have getter specified id = v[:id] getter_method = v[:value_for] value_type = v[:value_type] @@ -60,10 +60,14 @@ module Activities getter_method = 'name' end - obj = const.find id - @activity.message_items[k] = { type: const.to_s, value: obj.public_send(getter_method).to_s, id: id } - @activity.message_items[k][:value_for] = getter_method - @activity.message_items[k][:value_type] = value_type unless value_type.nil? + if id + obj = const.find id + @activity.message_items[k] = { type: const.to_s, value: obj.public_send(getter_method).to_s, id: id } + @activity.message_items[k][:value_for] = getter_method + @activity.message_items[k][:value_type] = value_type unless value_type.nil? + else + @activity.message_items[k] = { type: const.to_s, value: nil, value_for: 'name', id: nil } + end else @activity.message_items[k] = v.to_s end diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb index eea11ce1c..5f01a6cc1 100644 --- a/config/initializers/extends.rb +++ b/config/initializers/extends.rb @@ -380,8 +380,7 @@ class Extends move_project: 158, create_project_folder: 159, move_project_folder: 160, - rename_project_folder: 161, - archive_project_folder: 162 + rename_project_folder: 161 } ACTIVITY_GROUPS = { diff --git a/config/locales/global_activities/en.yml b/config/locales/global_activities/en.yml index 89e0965c7..04351db6a 100644 --- a/config/locales/global_activities/en.yml +++ b/config/locales/global_activities/en.yml @@ -176,11 +176,11 @@ en: export_inventory_items_assigned_to_task_html: "%{user} exported inventory item(s) assigned to task %{my_module} from inventory %{repository}: Live version." export_inventory_snapshot_items_assigned_to_task_html: "%{user} exported inventory item(s) assigned to task %{my_module} from inventory %{repository_snapshot}: Snapshot of %{created_at}." change_status_on_task_flow_html: "%{user} changed status from %{my_module_status_old} to %{my_module_status_new} for task %{my_module}." - move_project_html: "%{user} moved project %{project} from folder %{source_folder} to folder %{destination_folder}." + move_project_html: "%{user} moved project %{project} from folder %{project_folder_from} to folder %{project_folder_to}." + create_project_folder_html: "%{user} created project folder %{project_folder}." rename_project_folder_html: "%{user} renamed project folder %{project_folder}." - archive_project_folder_html: "%{user} archived project folder %{project_folder}." - move_project_folder_html: "%{user} moved folder %{project_folder} from folder %{source_folder} to folder %{destination_folder}." + move_project_folder_html: "%{user} moved folder %{project_folder} from folder %{project_folder_from} to folder %{project_folder_to}." activity_name: create_project: "Project created" @@ -325,7 +325,6 @@ en: move_project: "Project moved" create_project_folder: "Project folder created" rename_project_folder: "Project folder renamed" - archive_project_folder: "Project folder archived" move_project_folder: "Project folder moved" activity_group: @@ -349,5 +348,3 @@ en: protocol: "Protocol" step: "Step" report: "Report" - - root_folder_level: "[Projects]" diff --git a/spec/controllers/project_folders_controller_spec.rb b/spec/controllers/project_folders_controller_spec.rb index d2b213460..ba5d85412 100644 --- a/spec/controllers/project_folders_controller_spec.rb +++ b/spec/controllers/project_folders_controller_spec.rb @@ -96,19 +96,4 @@ describe ProjectFoldersController, type: :controller do expect { action }.to(change { Activity.count }.by(1)) end end - - describe 'POST archive' do - let(:action) { post :archive, params: { id: project_folder.id }, format: :json } - - it 'calls create activity for creating project folder' do - expect(Activities::CreateActivityService) - .to(receive(:call).with(hash_including(activity_type: :archive_project_folder))) - - action - end - - it 'adds activity in DB' do - expect { action }.to(change { Activity.count }.by(1)) - end - end end diff --git a/spec/services/activities/create_activity_service_spec.rb b/spec/services/activities/create_activity_service_spec.rb index 54e84ec50..f3d75be71 100644 --- a/spec/services/activities/create_activity_service_spec.rb +++ b/spec/services/activities/create_activity_service_spec.rb @@ -140,4 +140,19 @@ describe Activities::CreateActivityService do end end end + + context 'when message item is nil' do + it 'adds project_folder_from to message items with value nil' do + activity = Activities::CreateActivityService.call(activity_type: :move_project_folder, + owner: user, + subject: project, + team: team, + message_items: { + project_folder_from: nil + }).activity + + expect(activity.message_items['project_folder_from'].symbolize_keys) + .to(include({ type: 'ProjectFolder', value: nil })) + end + end end