Fix session problem with sort order and query
This commit is contained in:
parent
1e600d4511
commit
e679f66b8b
@ -2,18 +2,20 @@ module AdditionalsQueriesHelper
|
|||||||
def additionals_retrieve_query(object_type, options = {})
|
def additionals_retrieve_query(object_type, options = {})
|
||||||
query_class = Object.const_get("#{object_type.camelcase}Query")
|
query_class = Object.const_get("#{object_type.camelcase}Query")
|
||||||
if params[:query_id].present?
|
if params[:query_id].present?
|
||||||
cond = 'project_id IS NULL'
|
additionals_load_query_id(query_class, object_type, params[:query_id], options)
|
||||||
cond << " OR project_id = #{@project.id}" if @project
|
|
||||||
@query = query_class.where(cond).find(params[:query_id])
|
|
||||||
raise ::Unauthorized unless @query.visible?
|
|
||||||
@query.project = @project
|
|
||||||
@query.user_filter = options[:user_filter] if options[:user_filter]
|
|
||||||
session["#{object_type}_query".to_sym] = { id: @query.id, project_id: @query.project_id }
|
|
||||||
sort_clear
|
|
||||||
elsif api_request? ||
|
elsif api_request? ||
|
||||||
params[:set_filter] ||
|
params[:set_filter] ||
|
||||||
session["#{object_type}_query".to_sym].nil? ||
|
session["#{object_type}_query".to_sym].nil? ||
|
||||||
session["#{object_type}_query".to_sym][:project_id] != (@project ? @project.id : nil)
|
session["#{object_type}_query".to_sym][:project_id] != (@project ? @project.id : nil)
|
||||||
|
|
||||||
|
if options[:with_default_query] && !api_request? && %i[op f].all? { |k| !params.key?(k) }
|
||||||
|
d_query = query_class.default_query
|
||||||
|
if d_query.present? && query_class.where(id: d_query.id).exists?
|
||||||
|
additionals_load_query_id(query_class, object_type, d_query.id, options)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Give it a name, required to be valid
|
# Give it a name, required to be valid
|
||||||
@query = query_class.new(name: '_')
|
@query = query_class.new(name: '_')
|
||||||
@query.project = @project
|
@query.project = @project
|
||||||
@ -21,9 +23,12 @@ module AdditionalsQueriesHelper
|
|||||||
@query.build_from_params(params)
|
@query.build_from_params(params)
|
||||||
session["#{object_type}_query".to_sym] = { project_id: @query.project_id }
|
session["#{object_type}_query".to_sym] = { project_id: @query.project_id }
|
||||||
# session has a limit to 4k, we have to use a cache for it for larger data
|
# session has a limit to 4k, we have to use a cache for it for larger data
|
||||||
Rails.cache.write(additionals_query_cache_key(object_type), filters: @query.filters,
|
Rails.cache.write(additionals_query_cache_key(object_type),
|
||||||
|
filters: @query.filters,
|
||||||
group_by: @query.group_by,
|
group_by: @query.group_by,
|
||||||
column_names: @query.column_names)
|
column_names: @query.column_names,
|
||||||
|
totalable_names: @query.totalable_names,
|
||||||
|
sort_criteria: params[:sort].presence || @query.sort_criteria.to_a)
|
||||||
else
|
else
|
||||||
# retrieve from session
|
# retrieve from session
|
||||||
@query = query_class.find(session["#{object_type}_query".to_sym][:id]) if session["#{object_type}_query".to_sym][:id]
|
@query = query_class.find(session["#{object_type}_query".to_sym][:id]) if session["#{object_type}_query".to_sym][:id]
|
||||||
@ -31,11 +36,24 @@ module AdditionalsQueriesHelper
|
|||||||
@query ||= query_class.new(name: '_',
|
@query ||= query_class.new(name: '_',
|
||||||
filters: session_data.nil? ? nil : session_data[:filters],
|
filters: session_data.nil? ? nil : session_data[:filters],
|
||||||
group_by: session_data.nil? ? nil : session_data[:group_by],
|
group_by: session_data.nil? ? nil : session_data[:group_by],
|
||||||
column_names: session_data.nil? ? nil : session_data[:column_names])
|
column_names: session_data.nil? ? nil : session_data[:column_names],
|
||||||
|
totalable_names: session_data.nil? ? nil : session_data[:totalable_names],
|
||||||
|
sort_criteria: params[:sort].presence || (session_data.nil? ? nil : session_data[:sort_criteria]))
|
||||||
@query.project = @project
|
@query.project = @project
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def additionals_load_query_id(query_class, object_type, query_id, options)
|
||||||
|
cond = 'project_id IS NULL'
|
||||||
|
cond << " OR project_id = #{@project.id}" if @project
|
||||||
|
@query = query_class.where(cond).find(query_id)
|
||||||
|
raise ::Unauthorized unless @query.visible?
|
||||||
|
@query.project = @project
|
||||||
|
@query.user_filter = options[:user_filter] if options[:user_filter]
|
||||||
|
session["#{object_type}_query".to_sym] = { id: @query.id, project_id: @query.project_id }
|
||||||
|
sort_clear
|
||||||
|
end
|
||||||
|
|
||||||
def additionals_query_cache_key(object_type)
|
def additionals_query_cache_key(object_type)
|
||||||
project_id = @project.nil? ? 0 : @project.id
|
project_id = @project.nil? ? 0 : @project.id
|
||||||
"#{object_type}_query_data_#{session.id}_#{project_id}"
|
"#{object_type}_query_data_#{session.id}_#{project_id}"
|
||||||
|
Loading…
Reference in New Issue
Block a user