diff --git a/app/assets/javascripts/admin/routes/admin_dashboard_route.js b/app/assets/javascripts/admin/routes/admin_dashboard_route.js index 99bce2159..56a6d8bb8 100644 --- a/app/assets/javascripts/admin/routes/admin_dashboard_route.js +++ b/app/assets/javascripts/admin/routes/admin_dashboard_route.js @@ -31,7 +31,7 @@ Discourse.AdminDashboardRoute = Discourse.Route.extend({ if( !c.get('reportsCheckedAt') || Date.create('1 hour ago') > c.get('reportsCheckedAt') ) { // TODO: use one request to get all reports, or maybe one request for all dashboard data including version check. c.set('reportsCheckedAt', new Date()); - ['visits', 'signups', 'topics', 'posts', 'total_users'].each(function(reportType){ + ['visits', 'signups', 'topics', 'posts', 'total_users', 'flags'].each(function(reportType){ c.set(reportType, Discourse.Report.find(reportType)); }); } diff --git a/app/assets/javascripts/admin/templates/dashboard.js.handlebars b/app/assets/javascripts/admin/templates/dashboard.js.handlebars index 6e97f3b23..3738417ef 100644 --- a/app/assets/javascripts/admin/templates/dashboard.js.handlebars +++ b/app/assets/javascripts/admin/templates/dashboard.js.handlebars @@ -57,6 +57,7 @@ {{ render 'admin_report_signups' signups }} {{ render 'admin_report_topics' topics }} {{ render 'admin_report_posts' posts }} + {{ render 'admin_report_flags' flags }} diff --git a/app/assets/javascripts/admin/views/report/admin_report_flags_view.js b/app/assets/javascripts/admin/views/report/admin_report_flags_view.js new file mode 100644 index 000000000..0c8be5f63 --- /dev/null +++ b/app/assets/javascripts/admin/views/report/admin_report_flags_view.js @@ -0,0 +1,4 @@ +Discourse.AdminReportFlagsView = Discourse.View.extend({ + templateName: 'admin/templates/reports/summed_counts_report', + tagName: 'tbody' +}); \ No newline at end of file diff --git a/app/models/report.rb b/app/models/report.rb index d3b7e0bdc..31d22e493 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -72,7 +72,7 @@ class Report def self.report_total_users(report) report.data = [] fetch report do - (0..30).each do |i| + (0..30).to_a.reverse.each do |i| if (count = User.where('created_at < ?', i.days.ago).count) > 0 report.data << {x: i.days.ago.to_date.to_s, y: count} end @@ -80,6 +80,17 @@ class Report end end + def self.report_flags(report) + report.data = [] + fetch report do + (0..30).to_a.reverse.each do |i| + if (count = PostAction.where('date(created_at) = ?', i.days.ago.to_date).where(post_action_type_id: PostActionType.flag_types.values).count) > 0 + report.data << {x: i.days.ago.to_date.to_s, y: count} + end + end + end + end + private diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 4c2ecc845..b6ea8e389 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -261,6 +261,12 @@ en: yaxis: "Number of new posts" total_users: title: "Total Users" + xaxis: "Day" + yaxis: "Total number of users" + flags: + title: "Flags" + xaxis: "Day" + yaxis: "Number of flags" site_settings: default_locale: "The default language of this Discourse instance (ISO 639-1 Code)" diff --git a/spec/fabricators/flag_fabricator.rb b/spec/fabricators/flag_fabricator.rb new file mode 100644 index 000000000..72192fa44 --- /dev/null +++ b/spec/fabricators/flag_fabricator.rb @@ -0,0 +1,5 @@ +Fabricator(:flag, from: :post_action) do + user + post + post_action_type_id PostActionType.types[:spam] +end \ No newline at end of file diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index 3963e3fe5..f451d6df6 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -30,7 +30,7 @@ describe Report do end - [:signup, :topic, :post].each do |arg| + [:signup, :topic, :post, :flag].each do |arg| describe "#{arg} report" do pluralized = arg.to_s.pluralize @@ -75,8 +75,8 @@ describe Report do end it 'returns correct data' do - report.data[0][:y].should == 3 - report.data[1][:y].should == 1 + report.data[0][:y].should == 1 + report.data[1][:y].should == 3 end end end