diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index 5426e1995..5caa176aa 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -405,7 +405,7 @@ class RepositoryRowsController < ApplicationController Activities::CreateActivityService .call(activity_type: type_of, owner: current_user, - subject: @repository, + subject: repository_row, team: current_team, message_items: { repository_row: repository_row.id, diff --git a/app/models/concerns/searchable_by_name_model.rb b/app/models/concerns/searchable_by_name_model.rb index b1b3dec0b..8d4f4b228 100644 --- a/app/models/concerns/searchable_by_name_model.rb +++ b/app/models/concerns/searchable_by_name_model.rb @@ -20,37 +20,6 @@ module SearchableByNameModel sql_q.limit(Constants::SEARCH_LIMIT) end - - def self.filter_by_teams(teams = []) - return self if teams.blank? - - if column_names.include? 'team_id' - where(team_id: teams) - else - valid_subjects = Extends::ACTIVITY_SUBJECT_CHILDREN - parent_array = [to_s.underscore] - find_parent = true - # Trying to build parent array - while find_parent - possible_parent = valid_subjects.find { |_sub, ch| ((ch || []).include? parent_array[-1].pluralize.to_sym) } - possible_parent = { Project: nil } if parent_array[-1] == 'experiment' - if possible_parent - parent_array.push(possible_parent.flatten[0].to_s.underscore) - else - find_parent = false - end - end - parent_array.shift - # Now we will go from parent to child direction - last_parent = parent_array.reverse!.shift - query = last_parent.to_s.camelize.constantize.where(team_id: teams) - parent_array.each do |child| - query = child.to_s.camelize.constantize.where("#{last_parent}_id" => query) - last_parent = child - end - where("#{last_parent}_id" => query) - end - end end # rubocop:enable Metrics/BlockLength end diff --git a/app/models/experiment.rb b/app/models/experiment.rb index 607898720..2516ac2aa 100644 --- a/app/models/experiment.rb +++ b/app/models/experiment.rb @@ -86,6 +86,12 @@ class Experiment < ApplicationRecord .where(project: Project.viewable_by_user(user, teams)) end + def self.filter_by_teams(teams = []) + return self if teams.blank? + + joins(:project).where(project: { team: teams }) + end + def archived_branch? archived? || project.archived? end diff --git a/app/models/my_module.rb b/app/models/my_module.rb index f4fbe7634..7335ba4a6 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -117,6 +117,12 @@ class MyModule < ApplicationRecord .where(experiment: Experiment.viewable_by_user(user, teams)) end + def self.filter_by_teams(teams = []) + return self if teams.blank? + + joins(experiment: :project).where(experiment: { projects: { team: teams } }) + end + def navigable? !experiment.archived? && experiment.navigable? end diff --git a/app/models/project.rb b/app/models/project.rb index 2df597e8c..eda28a225 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -104,6 +104,10 @@ class Project < ApplicationRecord .distinct end + def self.filter_by_teams(teams = []) + teams.blank? ? self : where(team: teams) + end + def permission_parent nil end diff --git a/app/models/project_folder.rb b/app/models/project_folder.rb index f529f7c0e..181fbe4cd 100644 --- a/app/models/project_folder.rb +++ b/app/models/project_folder.rb @@ -69,6 +69,10 @@ class ProjectFolder < ApplicationRecord end end + def self.filter_by_teams(teams = []) + teams.blank? ? self : where(team: teams) + end + def parent_folders outer_folders_sql = 'WITH RECURSIVE outer_project_folders(id, parent_folder_id, selected_folders_ids) AS ( diff --git a/app/models/protocol.rb b/app/models/protocol.rb index a8ebc725c..499b037dd 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -202,6 +202,10 @@ class Protocol < ApplicationRecord user_id: user.id)) end + def self.filter_by_teams(teams = []) + teams.blank? ? self : where(team: teams) + end + def insert_step(step, position) ActiveRecord::Base.transaction do steps.where('position >= ?', position).desc_order.each do |s| diff --git a/app/models/report.rb b/app/models/report.rb index bdf1955f4..f0f600a82 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -85,6 +85,10 @@ class Report < ApplicationRecord where(project: Project.viewable_by_user(user, teams)) end + def self.filter_by_teams(teams = []) + teams.blank? ? self : where(team: teams) + end + def root_elements report_elements.active.where(parent: nil).order(:position) end diff --git a/app/models/repository.rb b/app/models/repository.rb index 2e0400175..95d54077a 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -99,6 +99,10 @@ class Repository < RepositoryBase end end + def self.filter_by_teams(teams = []) + teams.blank? ? self : where(team: teams) + end + def default_table_state Constants::REPOSITORY_TABLE_DEFAULT_STATE end diff --git a/app/models/repository_row.rb b/app/models/repository_row.rb index a06e9598d..21aeaee19 100644 --- a/app/models/repository_row.rb +++ b/app/models/repository_row.rb @@ -99,6 +99,12 @@ class RepositoryRow < ApplicationRecord where(repository: Repository.viewable_by_user(user, teams)) end + def self.filter_by_teams(teams = []) + return self if teams.blank? + + joins(:repository).where(repository: { team: teams }) + end + def self.name_like(query) where('repository_rows.name ILIKE ?', "%#{query}%") end diff --git a/app/models/result.rb b/app/models/result.rb index 495e33e70..e5db867f4 100644 --- a/app/models/result.rb +++ b/app/models/result.rb @@ -55,6 +55,12 @@ class Result < ApplicationRecord where(my_module: MyModule.viewable_by_user(user, teams)) end + def self.filter_by_teams(teams = []) + return self if teams.blank? + + joins(my_module: { experiment: :project }).where(my_module: { experiments: { projects: { team: teams } } }) + end + def navigable? !my_module.archived? && my_module.navigable? end diff --git a/app/models/step.rb b/app/models/step.rb index 99586340f..f6b5b267d 100644 --- a/app/models/step.rb +++ b/app/models/step.rb @@ -72,6 +72,13 @@ class Step < ApplicationRecord end end + def self.filter_by_teams(teams = []) + return self if teams.blank? + + joins(protocol: { my_module: { experiment: :project } }) + .where(protocol: { my_modules: { experiments: { projects: { team: teams } } } }) + end + def default_view_state { 'assets' => { 'sort' => 'new' } } end diff --git a/app/services/report_actions/save_pdf_to_inventory_item.rb b/app/services/report_actions/save_pdf_to_inventory_item.rb index daa419867..7c4e01ad2 100644 --- a/app/services/report_actions/save_pdf_to_inventory_item.rb +++ b/app/services/report_actions/save_pdf_to_inventory_item.rb @@ -68,7 +68,7 @@ module ReportActions Activities::CreateActivityService .call(activity_type: :edit_item_inventory, owner: @user, - subject: @repository, + subject: @repository_row, team: @team, message_items: { repository_row: @repository_row.id, diff --git a/app/services/repository_actions/archive_rows_base_service.rb b/app/services/repository_actions/archive_rows_base_service.rb index 4fec343cf..5f09eb869 100644 --- a/app/services/repository_actions/archive_rows_base_service.rb +++ b/app/services/repository_actions/archive_rows_base_service.rb @@ -52,7 +52,7 @@ module RepositoryActions Activities::CreateActivityService .call(activity_type: type, owner: @user, - subject: row.repository, + subject: row, team: @team, message_items: { repository_row: row.id diff --git a/app/views/global_activities/references/_repository_row.html.erb b/app/views/global_activities/references/_repository_row.html.erb new file mode 100644 index 000000000..68bf39737 --- /dev/null +++ b/app/views/global_activities/references/_repository_row.html.erb @@ -0,0 +1,15 @@ +<%= render partial: "global_activities/references/team.html.erb", + locals: { team: team, subject: team, breadcrumbs: breadcrumbs, values: values, type_of: type_of } %> +
+ + <% if subject %> + <%= route_to_other_team(repository_path(subject.repository.id, team: subject.repository.team.id), + team, + subject.repository.name&.truncate(Constants::NAME_TRUNCATION_LENGTH), + title: subject.repository.name) %> + <% else %> + + <%= breadcrumbs['repository']&.truncate(Constants::NAME_TRUNCATION_LENGTH) %> + + <% end %> +
diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb index 7e5025cd1..a37e49b83 100644 --- a/config/initializers/extends.rb +++ b/config/initializers/extends.rb @@ -201,7 +201,7 @@ class Extends ).freeze ACTIVITY_SUBJECT_CHILDREN = { - repository: [:repository_rows], + repository_base: [:repository_rows], repository_row: nil, report: nil, project: nil, diff --git a/db/migrate/20220705091621_change_subject_on_repository_row_activities.rb b/db/migrate/20220705091621_change_subject_on_repository_row_activities.rb new file mode 100644 index 000000000..77da4928c --- /dev/null +++ b/db/migrate/20220705091621_change_subject_on_repository_row_activities.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class ChangeSubjectOnRepositoryRowActivities < ActiveRecord::Migration[6.1] + def up + execute( + "UPDATE activities " \ + "SET subject_id = (values -> 'message_items' -> 'repository_row' ->> 'id')::bigint, "\ + "subject_type = 'RepositoryRow' " \ + "WHERE \"activities\".\"subject_type\" = 'RepositoryBase' "\ + "AND (values -> 'message_items' -> 'repository_row' IS NOT NULL);" + ) + end + + def down + Activity.where(subject_type: 'RepositoryRow').find_each do |activity| + next if activity.subject.blank? + + activity.update_columns(subject_type: 'RepositoryBase', subject_id: activity.subject.repository_id) + end + end +end diff --git a/db/structure.sql b/db/structure.sql index de667b340..ea7f62b76 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -8511,8 +8511,11 @@ INSERT INTO "schema_migrations" (version) VALUES ('20220321122111'), ('20220325101011'), ('20220328164215'), -('20220530144300'); ('20220414095100'), -('20220414143955'); +('20220414143955'), +('20220429083335'), +('20220530144300'), +('20220602120714'), +('20220705091621');