mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-11-10 00:11:22 +08:00
Merge pull request #8882 from okriuchykhin/ok_SCI_12350_v4
Fix parameter passing from search controller to models [SCI-12350]
This commit is contained in:
commit
ffe09576b0
13 changed files with 38 additions and 56 deletions
|
|
@ -115,7 +115,7 @@ class SearchController < ApplicationController
|
|||
query = (params.fetch(:q) { '' }).strip
|
||||
@filters = params[:filters]
|
||||
@include_archived = @filters.blank? || @filters[:include_archived] == 'true'
|
||||
@teams = (@filters.present? && @filters[:teams]&.values) || current_user.teams
|
||||
@teams = @filters.present? && @filters[:teams]&.values ? current_user.teams.where(id: @filters[:teams].values) : current_user.teams
|
||||
@display_query = query
|
||||
|
||||
splited_query = query.split
|
||||
|
|
@ -142,10 +142,8 @@ class SearchController < ApplicationController
|
|||
@records = @model.search(current_user,
|
||||
@include_archived,
|
||||
@search_query,
|
||||
nil,
|
||||
teams: @teams,
|
||||
users: @users,
|
||||
options: options)
|
||||
@teams,
|
||||
options)
|
||||
.select("COUNT(\"#{@model.table_name}\".\"id\") OVER() AS filtered_count")
|
||||
.select("\"#{@model.table_name}\".*")
|
||||
|
||||
|
|
|
|||
|
|
@ -59,19 +59,16 @@ class Asset < ApplicationRecord
|
|||
user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {}
|
||||
teams = user.teams,
|
||||
_options = {}
|
||||
)
|
||||
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
|
||||
assets_in_steps = Asset.joins(:step)
|
||||
.where(steps: { protocol: Protocol.search(user, include_archived, nil, teams) })
|
||||
.pluck(:id)
|
||||
.select(:id)
|
||||
|
||||
assets_in_results = Asset.joins(:result)
|
||||
.where(results: { id: Result.search(user, include_archived, nil, teams) })
|
||||
.pluck(:id)
|
||||
.select(:id)
|
||||
|
||||
assets_in_inventories = Asset.joins(repository_cell: { repository_column: :repository })
|
||||
.where(repositories: {
|
||||
|
|
@ -79,7 +76,7 @@ class Asset < ApplicationRecord
|
|||
team_id: teams
|
||||
})
|
||||
.where.not(repositories: { type: 'RepositorySnapshot' })
|
||||
.pluck(:id)
|
||||
.select(:id)
|
||||
|
||||
assets = distinct.where('assets.id IN (?) OR assets.id IN (?) OR assets.id IN (?)',
|
||||
assets_in_steps, assets_in_results, assets_in_inventories)
|
||||
|
|
@ -87,7 +84,7 @@ class Asset < ApplicationRecord
|
|||
Asset.left_outer_joins(:asset_text_datum)
|
||||
.joins(file_attachment: :blob)
|
||||
.from(assets, 'assets')
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
end
|
||||
|
||||
def blob
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ module SearchableByNameModel
|
|||
|
||||
def self.search_by_search_fields_with_boolean(user, teams = [], query = nil, search_fields = [], options = {})
|
||||
readable_by_user(user, teams)
|
||||
.where_attributes_like_boolean(search_fields, query, options)
|
||||
.where_attributes_like_boolean(search_fields, query)
|
||||
.limit(options[:limit] || Constants::SEARCH_LIMIT)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ module SearchableModel
|
|||
end
|
||||
}
|
||||
|
||||
scope :where_attributes_like_boolean, lambda { |attributes, query, options = {}|
|
||||
scope :where_attributes_like_boolean, lambda { |attributes, query|
|
||||
return unless query
|
||||
|
||||
query_clauses = []
|
||||
|
|
|
|||
|
|
@ -67,13 +67,11 @@ class Experiment < ApplicationRecord
|
|||
user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {}
|
||||
teams = user.teams,
|
||||
_options = {}
|
||||
)
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
|
||||
new_query = distinct.readable_by_user(user, teams)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
|
||||
new_query = new_query.joins(:project).active.where(projects: { archived: false }) unless include_archived
|
||||
|
||||
|
|
|
|||
|
|
@ -34,12 +34,11 @@ class LabelTemplate < ApplicationRecord
|
|||
user,
|
||||
_include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {}
|
||||
teams = user.teams,
|
||||
_options = {}
|
||||
)
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
distinct.readable_by_user(user, teams)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
end
|
||||
|
||||
def icon
|
||||
|
|
|
|||
|
|
@ -111,14 +111,12 @@ class MyModule < ApplicationRecord
|
|||
user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {}
|
||||
teams = user.teams,
|
||||
_options = {}
|
||||
)
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
|
||||
new_query = distinct.left_joins(:task_comments, my_module_tags: :tag, user_my_modules: :user)
|
||||
.readable_by_user(user, teams)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
|
||||
unless include_archived
|
||||
new_query = new_query.joins(experiment: :project)
|
||||
|
|
|
|||
|
|
@ -76,13 +76,12 @@ class Project < ApplicationRecord
|
|||
user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {}
|
||||
teams = user.teams,
|
||||
_options = {}
|
||||
)
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
new_query = distinct.readable_by_user(user, teams)
|
||||
.left_joins(:project_comments)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
|
||||
new_query = new_query.active unless include_archived
|
||||
|
||||
|
|
|
|||
|
|
@ -40,11 +40,9 @@ class ProjectFolder < ApplicationRecord
|
|||
.where(team: teams)
|
||||
end
|
||||
|
||||
def self.search(user, include_archived, query = nil, current_team = nil, options = {})
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
|
||||
def self.search(user, include_archived, query = nil, teams = user.teams, _options = {})
|
||||
new_query = distinct.readable_by_user(user, teams)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
new_query = new_query.active unless include_archived
|
||||
|
||||
new_query
|
||||
|
|
|
|||
|
|
@ -143,11 +143,11 @@ class Protocol < ApplicationRecord
|
|||
def self.search(user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
teams = user.teams,
|
||||
options = {})
|
||||
team_ids = options[:teams]&.pluck(:id) || current_team&.id || user.teams.pluck(:id)
|
||||
team_ids = teams.is_a?(ActiveRecord::Relation) ? teams.pluck(:id) : teams.id
|
||||
|
||||
if options[:options]&.dig(:in_repository)
|
||||
if options[:in_repository]
|
||||
protocols = latest_available_versions(team_ids).readable_by_user(user, team_ids)
|
||||
protocols = protocols.active unless include_archived
|
||||
else
|
||||
|
|
@ -185,7 +185,7 @@ class Protocol < ApplicationRecord
|
|||
protocol_my_modules = joins(:my_module).where(my_modules: { id: MyModule.readable_by_user(user, teams) })
|
||||
|
||||
where('protocols.id IN ((?) UNION (?))', protocol_templates.select(:id), protocol_my_modules.select(:id))
|
||||
.where_attributes_like_boolean(search_fields, query, options)
|
||||
.where_attributes_like_boolean(search_fields, query)
|
||||
.limit(options[:limit] || Constants::SEARCH_LIMIT)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -70,13 +70,12 @@ class Report < ApplicationRecord
|
|||
user,
|
||||
_include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {}
|
||||
)
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
teams = user.teams,
|
||||
_options = {}
|
||||
)
|
||||
distinct.with_granted_permissions(user, ReportPermissions::READ)
|
||||
.where(team: teams)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
end
|
||||
|
||||
def self.readable_by_user(user, teams)
|
||||
|
|
|
|||
|
|
@ -163,13 +163,11 @@ class RepositoryRow < ApplicationRecord
|
|||
def self.search(user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {})
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
|
||||
teams = user.teams,
|
||||
_options = {})
|
||||
repository_rows = joins(:repository, :created_by).readable_by_user(user, teams)
|
||||
repository_rows = repository_rows.active unless include_archived
|
||||
repository_rows.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options)
|
||||
repository_rows.where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query)
|
||||
end
|
||||
|
||||
def self.where_children_attributes_like(query)
|
||||
|
|
|
|||
|
|
@ -46,10 +46,8 @@ class Result < ApplicationRecord
|
|||
def self.search(user,
|
||||
include_archived,
|
||||
query = nil,
|
||||
current_team = nil,
|
||||
options = {})
|
||||
teams = options[:teams] || current_team || user.teams.select(:id)
|
||||
|
||||
teams = user.teams,
|
||||
_options = {})
|
||||
new_query = joins(:my_module)
|
||||
.where(
|
||||
my_modules: {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue