mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-08 14:15:35 +08:00
Merge pull request #2990 from urbanrotnik/ur-sci-5181-add-folders-activities
Add activities for Project Folders [SCI-5181]
This commit is contained in:
commit
2c8adc9496
8 changed files with 141 additions and 14 deletions
|
@ -26,7 +26,7 @@ class ProjectFoldersController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.json do
|
||||
if project_folder.save
|
||||
# log_activity()
|
||||
log_activity(:create_project_folder, project_folder, { project_folder: project_folder.id })
|
||||
message = t('projects.index.modal_new_project_folder.success_flash',
|
||||
name: escape_input(project_folder.name))
|
||||
render json: { message: message }
|
||||
|
@ -55,6 +55,18 @@ class ProjectFoldersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def update
|
||||
folder = current_team.project_folders.find(params[:id])
|
||||
|
||||
log_activity(:rename_project_folder, folder, { project_folder: folder.id })
|
||||
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_current_folder
|
||||
|
@ -85,13 +97,34 @@ class ProjectFoldersController < ApplicationController
|
|||
project_ids = move_params[:movables].collect { |movable| movable[:id] if movable[:type] == 'project' }.compact
|
||||
return if project_ids.blank?
|
||||
|
||||
current_team.projects.where(id: project_ids).each { |p| p.update!(project_folder: destination_folder) }
|
||||
current_team.projects.where(id: project_ids).each do |project|
|
||||
source_folder_name = project.project_folder&.name || I18n.t('global_activities.root_folder_level')
|
||||
project.update!(project_folder: destination_folder)
|
||||
destination_folder_name = project.project_folder&.name || I18n.t('global_activities.root_folder_level')
|
||||
|
||||
log_activity(:move_project, project, { project: project.id,
|
||||
destination_folder: destination_folder_name,
|
||||
source_folder: source_folder_name })
|
||||
end
|
||||
end
|
||||
|
||||
def move_folders(destination_folder)
|
||||
folder_ids = move_params[:movables].collect { |movable| movable[:id] if movable[:type] == 'project_folder' }.compact
|
||||
return if folder_ids.blank?
|
||||
|
||||
current_team.project_folders.where(id: folder_ids).each { |f| f.update!(parent_folder: destination_folder) }
|
||||
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')
|
||||
folder.update!(parent_folder: destination_folder)
|
||||
destination_folder_name = folder.parent_folder&.name || I18n.t('global_activities.root_folder_level')
|
||||
|
||||
log_activity(:move_project_folder, folder, { project_folder: folder.id,
|
||||
destination_folder: destination_folder_name,
|
||||
source_folder: source_folder_name })
|
||||
end
|
||||
end
|
||||
|
||||
def log_activity(type_of, subject, items = {})
|
||||
Activities::CreateActivityService
|
||||
.call(activity_type: type_of, owner: current_user, team: subject.team, subject: subject, message_items: items)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -87,6 +87,8 @@ module GlobalActivitiesHelper
|
|||
return current_value
|
||||
when Report
|
||||
path = reports_path(team: obj.team.id)
|
||||
when ProjectFolder
|
||||
path = projects_path
|
||||
else
|
||||
return current_value
|
||||
end
|
||||
|
|
|
@ -141,6 +141,9 @@ class Activity < ApplicationRecord
|
|||
when Report
|
||||
breadcrumbs[:report] = subject.name
|
||||
generate_breadcrumb(subject.team) if subject.team
|
||||
when ProjectFolder
|
||||
breadcrumbs[:project_folder] = subject.name
|
||||
generate_breadcrumb(subject.team)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
<%= render partial: "global_activities/references/team.html.erb",
|
||||
locals: { team: team, subject: subject&.team, breadcrumbs: breadcrumbs, values: values, type_of: type_of } %>
|
||||
<div class="ga-breadcrumb">
|
||||
<span class="fas fa-folder"></span>
|
||||
|
||||
<% if subject %>
|
||||
<% path = projects_path(team: team) %>
|
||||
<%= route_to_other_team(path,
|
||||
team,
|
||||
subject.name&.truncate(Constants::NAME_TRUNCATION_LENGTH),
|
||||
title: subject.name) %>
|
||||
<% else %>
|
||||
<span title="<%= breadcrumbs['project_folder'] %>">
|
||||
<%= breadcrumbs['project_folder']&.truncate(Constants::NAME_TRUNCATION_LENGTH) %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
|
@ -124,7 +124,7 @@ class Extends
|
|||
'MyModule' => :description }
|
||||
|
||||
ACTIVITY_SUBJECT_TYPES = %w(
|
||||
Team RepositoryBase Project Experiment MyModule Result Protocol Report RepositoryRow
|
||||
Team RepositoryBase Project Experiment MyModule Result Protocol Report RepositoryRow ProjectFolder
|
||||
).freeze
|
||||
|
||||
SEARCHABLE_ACTIVITY_SUBJECT_TYPES = %w(
|
||||
|
@ -146,7 +146,7 @@ class Extends
|
|||
ACTIVITY_MESSAGE_ITEMS_TYPES =
|
||||
ACTIVITY_SUBJECT_TYPES + %w(
|
||||
User Tag RepositoryColumn RepositoryRow Step Asset TinyMceAsset
|
||||
Repository MyModuleStatus RepositorySnapshot ProjectFolder
|
||||
Repository MyModuleStatus RepositorySnapshot
|
||||
).freeze
|
||||
|
||||
ACTIVITY_TYPES = {
|
||||
|
@ -292,12 +292,16 @@ class Extends
|
|||
restore_inventory: 145,
|
||||
export_inventory_items_assigned_to_task: 146,
|
||||
export_inventory_snapshot_items_assigned_to_task: 147,
|
||||
change_status_on_task_flow: 148, # 149, 150, 151 in AdddOn!
|
||||
move_project: 158
|
||||
change_status_on_task_flow: 148, # 149..157 in AdddOn!
|
||||
move_project: 158,
|
||||
create_project_folder: 159,
|
||||
move_project_folder: 160,
|
||||
rename_project_folder: 161,
|
||||
archive_project_folder: 162
|
||||
}
|
||||
|
||||
ACTIVITY_GROUPS = {
|
||||
projects: [*0..7, 32, 33, 34, 95, 108, 65, 109, 158],
|
||||
projects: [*0..7, 32, 33, 34, 95, 108, 65, 109, *158..162],
|
||||
task_results: [23, 26, 25, 42, 24, 40, 41, 99, 110, 122, 116, 128],
|
||||
task: [8, 58, 9, 59, *10..14, 35, 36, 37, 53, 54, *60..63, 138, 139, 140, 64, 66, 106, 126, 120, 132,
|
||||
*146..148],
|
||||
|
|
|
@ -176,7 +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 <strong>%{my_module_status_old}</strong> to <strong>%{my_module_status_new}</strong> for task %{my_module}."
|
||||
move_project_html: "%{user} moved %{project} project to <strong>%{project_folder_dest}</strong> folder from <strong>%{project_folder_src}</strong> folder"
|
||||
move_project_html: "%{user} moved project %{project} from folder <strong>%{source_folder}</strong> to folder <strong>%{destination_folder}</strong>."
|
||||
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 <strong>%{source_folder}</strong> to folder <strong>%{destination_folder}</strong>."
|
||||
|
||||
activity_name:
|
||||
create_project: "Project created"
|
||||
|
@ -319,6 +323,10 @@ en:
|
|||
export_inventory_snapshot_items_assigned_to_task: "Task-assigned inventory items exported (snapshot)"
|
||||
change_status_on_task_flow: "Task status changed"
|
||||
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:
|
||||
projects: "Projects"
|
||||
|
@ -341,3 +349,5 @@ en:
|
|||
protocol: "Protocol"
|
||||
step: "Step"
|
||||
report: "Report"
|
||||
|
||||
root_folder_level: "[Projects]"
|
||||
|
|
|
@ -303,14 +303,17 @@ Rails.application.routes.draw do
|
|||
end
|
||||
end
|
||||
|
||||
resources :project_folders, only: %i(new create) do
|
||||
resources :project_folders, only: %i(create new update) do
|
||||
member do
|
||||
post 'archive', to: 'project_folders#archive'
|
||||
end
|
||||
get 'cards', to: 'projects#cards'
|
||||
|
||||
member do
|
||||
post 'move_to', to: 'project_folders#move_to', defaults: { format: 'json' }
|
||||
end
|
||||
end
|
||||
get 'project_folders/:project_folder_id', to: 'projects#index', as: :project_folder
|
||||
get 'project_folders/:project_folder_id', to: 'projects#index', as: :project_folder_projects
|
||||
|
||||
resources :experiments, only: %i(edit update) do
|
||||
member do
|
||||
|
|
|
@ -4,11 +4,12 @@ require 'rails_helper'
|
|||
|
||||
describe ProjectFoldersController, type: :controller do
|
||||
login_user
|
||||
render_views
|
||||
# render_views
|
||||
|
||||
let!(:user) { subject.current_user }
|
||||
let!(:team) { create :team, created_by: user }
|
||||
let(:user) { subject.current_user }
|
||||
let(:team) { create :team, created_by: user }
|
||||
let!(:user_team) { create :user_team, team: team, user: user, role: :admin }
|
||||
let(:project_folder) { create :project_folder, team: team }
|
||||
|
||||
describe 'POST #move_to' do
|
||||
let!(:project_folder_1) do
|
||||
|
@ -51,6 +52,60 @@ describe ProjectFoldersController, type: :controller do
|
|||
expect(project_folder_3.reload.parent_folders).to(include(project_folder_1))
|
||||
expect(project_3.reload.project_folder.parent_folder.parent_folder).to(be_eql(project_folder_1))
|
||||
end
|
||||
|
||||
it 'adds 1 move_porject and 1 move_project_folder activity in DB' do
|
||||
expect { action }.to(change { Activity.where(type_of: :move_project).count }.by(1)
|
||||
.and(change { Activity.where(type_of: :move_project_folder).count }.by(1)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST create' do
|
||||
let(:action) { post :create, params: { project_folder: { name: 'My Proejct Folder' } }, format: :json }
|
||||
|
||||
it 'calls create activity for creating project folder' do
|
||||
expect(Activities::CreateActivityService)
|
||||
.to(receive(:call).with(hash_including(activity_type: :create_project_folder)))
|
||||
|
||||
action
|
||||
end
|
||||
|
||||
it 'adds activity in DB' do
|
||||
expect { action }.to(change { Activity.count }.by(1))
|
||||
end
|
||||
|
||||
it 'adds ProjectFolder in DB' do
|
||||
expect { action }.to(change { ProjectFolder.count }.by(1))
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH update' do
|
||||
let(:action) { patch :update, 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: :rename_project_folder)))
|
||||
|
||||
action
|
||||
end
|
||||
|
||||
it 'adds activity in DB' 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
|
||||
|
|
Loading…
Add table
Reference in a new issue