mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: makes reports loadable in bulk (#6309)
This commit is contained in:
@@ -18,44 +18,41 @@ class Admin::ReportsController < Admin::AdminController
|
||||
render_json_dump(reports: reports.sort_by { |report| report[:title] })
|
||||
end
|
||||
|
||||
def bulk
|
||||
reports = []
|
||||
|
||||
hijack do
|
||||
params[:reports].each do |report_type, report_params|
|
||||
args = parse_params(report_params)
|
||||
|
||||
report = nil
|
||||
if (report_params[:cache])
|
||||
report = Report.find_cached(report_type, args)
|
||||
end
|
||||
|
||||
if report
|
||||
reports << report
|
||||
else
|
||||
report = Report.find(report_type, args)
|
||||
|
||||
if (report_params[:cache]) && report
|
||||
Report.cache(report, 35.minutes)
|
||||
end
|
||||
|
||||
reports << report if report
|
||||
end
|
||||
end
|
||||
|
||||
render_json_dump(reports: reports)
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
report_type = params[:type]
|
||||
|
||||
raise Discourse::NotFound unless report_type =~ /^[a-z0-9\_]+$/
|
||||
|
||||
start_date = (params[:start_date].present? ? Time.parse(params[:start_date]).to_date : 1.days.ago).beginning_of_day
|
||||
end_date = (params[:end_date].present? ? Time.parse(params[:end_date]).to_date : start_date + 30.days).end_of_day
|
||||
|
||||
if params.has_key?(:category_id) && params[:category_id].to_i > 0
|
||||
category_id = params[:category_id].to_i
|
||||
else
|
||||
category_id = nil
|
||||
end
|
||||
|
||||
if params.has_key?(:group_id) && params[:group_id].to_i > 0
|
||||
group_id = params[:group_id].to_i
|
||||
else
|
||||
group_id = nil
|
||||
end
|
||||
|
||||
facets = nil
|
||||
if Array === params[:facets]
|
||||
facets = params[:facets].map { |s| s.to_s.to_sym }
|
||||
end
|
||||
|
||||
limit = nil
|
||||
if params.has_key?(:limit) && params[:limit].to_i > 0
|
||||
limit = params[:limit].to_i
|
||||
end
|
||||
|
||||
args = {
|
||||
start_date: start_date,
|
||||
end_date: end_date,
|
||||
category_id: category_id,
|
||||
group_id: group_id,
|
||||
facets: facets,
|
||||
limit: limit
|
||||
}
|
||||
args = parse_params(params)
|
||||
|
||||
report = nil
|
||||
if (params[:cache])
|
||||
@@ -77,7 +74,43 @@ class Admin::ReportsController < Admin::AdminController
|
||||
|
||||
render_json_dump(report: report)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_params(report_params)
|
||||
start_date = (report_params[:start_date].present? ? Time.parse(report_params[:start_date]).to_date : 1.days.ago).beginning_of_day
|
||||
end_date = (report_params[:end_date].present? ? Time.parse(report_params[:end_date]).to_date : start_date + 30.days).end_of_day
|
||||
|
||||
if report_params.has_key?(:category_id) && report_params[:category_id].to_i > 0
|
||||
category_id = report_params[:category_id].to_i
|
||||
else
|
||||
category_id = nil
|
||||
end
|
||||
|
||||
if report_params.has_key?(:group_id) && report_params[:group_id].to_i > 0
|
||||
group_id = report_params[:group_id].to_i
|
||||
else
|
||||
group_id = nil
|
||||
end
|
||||
|
||||
facets = nil
|
||||
if Array === report_params[:facets]
|
||||
facets = report_params[:facets].map { |s| s.to_s.to_sym }
|
||||
end
|
||||
|
||||
limit = nil
|
||||
if report_params.has_key?(:limit) && report_params[:limit].to_i > 0
|
||||
limit = report_params[:limit].to_i
|
||||
end
|
||||
|
||||
{
|
||||
start_date: start_date,
|
||||
end_date: end_date,
|
||||
category_id: category_id,
|
||||
group_id: group_id,
|
||||
facets: facets,
|
||||
limit: limit
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user