diff --git a/app/controllers/admin/stats_controller.rb b/app/controllers/admin/stats_controller.rb index 352232d55..e865b530d 100644 --- a/app/controllers/admin/stats_controller.rb +++ b/app/controllers/admin/stats_controller.rb @@ -1,7 +1,7 @@ class Admin::StatsController < Admin::BaseController def show - @event_types = Ahoy::Event.group(:name).count + @event_types = Ahoy::Event.pluck(:name).uniq.sort @visits = Visit.count @debates = Debate.with_hidden.count @@ -31,6 +31,17 @@ class Admin::StatsController < Admin::BaseController @investments = Budget::Investment.where(budget_id: budgets_ids).count end + def graph + @name = params[:id] + @event = params[:event] + + if params[:event] + @count = Ahoy::Event.where(name: params[:event]).count + else + @count = params[:count] + end + end + def proposal_notifications @proposal_notifications = ProposalNotification.all @proposals_with_notifications = @proposal_notifications.select(:proposal_id).distinct.count diff --git a/app/helpers/stats_helper.rb b/app/helpers/stats_helper.rb index b36977b3e..57db7166a 100644 --- a/app/helpers/stats_helper.rb +++ b/app/helpers/stats_helper.rb @@ -1,24 +1,27 @@ module StatsHelper - def events_chart_tag(events, opt = {}) - events = events.join(",") if events.is_a? Array + def chart_tag(opt = {}) opt[:data] ||= {} - opt[:data][:graph] = admin_api_stats_path(events: events) + opt[:data][:graph] = admin_api_stats_path(chart_data(opt)) content_tag :div, "", opt end - def visits_chart_tag(opt = {}) - events = events.join(",") if events.is_a? Array - opt[:data] ||= {} - opt[:data][:graph] = admin_api_stats_path(visits: true) - content_tag :div, "", opt + def chart_data(opt = {}) + data = nil + if opt[:id].present? + data = { opt[:id] => true } + elsif opt[:event].present? + data = { event: opt[:event] } + end + data end - def spending_proposals_chart_tag(opt = {}) - events = events.join(",") if events.is_a? Array - opt[:data] ||= {} - opt[:data][:graph] = admin_api_stats_path(spending_proposals: true) - content_tag :div, "", opt + def graph_link_text(event) + text = t("admin.stats.graph.#{event}") + if text.to_s.match(/translation missing/) + text = event + end + text end def budget_investments_chart_tag(opt = {}) diff --git a/app/views/admin/stats/_graph.html.erb b/app/views/admin/stats/_graph.html.erb new file mode 100644 index 000000000..529574a28 --- /dev/null +++ b/app/views/admin/stats/_graph.html.erb @@ -0,0 +1,4 @@ +
+

<%= t "admin.stats.graph.#{name || event}" %>(<%= count %>)

+ <%= chart_tag id: name, event: event %> +
diff --git a/app/views/admin/stats/graph.html.erb b/app/views/admin/stats/graph.html.erb new file mode 100644 index 000000000..af6d1111a --- /dev/null +++ b/app/views/admin/stats/graph.html.erb @@ -0,0 +1,5 @@ +<% content_for :head do %> + <%= javascript_include_tag "stat_graphs", 'data-turbolinks-track' => true %> +<% end %> + +<%= render 'graph', name: @name, event: @event, count: @count %> diff --git a/app/views/admin/stats/show.html.erb b/app/views/admin/stats/show.html.erb index 86855a15b..1a2820086 100644 --- a/app/views/admin/stats/show.html.erb +++ b/app/views/admin/stats/show.html.erb @@ -1,7 +1,7 @@ <% content_for :head do %> <%= javascript_include_tag "stat_graphs", "data-turbolinks-track" => true %> <% end %> -
+

<%= t "admin.stats.show.stats_title" %>

@@ -22,7 +22,8 @@
@@ -119,24 +120,14 @@
-

<%= t "admin.stats.show.visits_title" %>

- <%= visits_chart_tag id: "visits" %> -
- -
- <% @event_types.each do |event, count| %> -

<%= event.titleize %> (<%= count %>)

- <%= events_chart_tag event %> + <% @event_types.each do |event| %> +

+ <%= link_to graph_link_text(event), + graph_admin_stats_path(event: event) %> +

<% end %>
- <% if feature?(:spending_proposals) %> -
-

<%= t "admin.stats.show.spending_proposals_title" %>

- <%= spending_proposals_chart_tag id: "spending_proposals" %> -
- <% end %> - <% if feature?(:budgets) %>

<%= t "admin.stats.show.budgets_title" %>

diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index ad66ad884..7baa7a31c 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1453,11 +1453,16 @@ en: votes: Total votes spending_proposals_title: Spending Proposals budgets_title: Participatory budgeting - visits_title: Visits direct_messages: Direct messages proposal_notifications: Proposal notifications incomplete_verifications: Incomplete verifications polls: Polls + graph: + debate_created: Debates + spending_proposals: Investment projects + visit: Visits + level_2_user: Level 2 users + proposal_created: Citizen proposals direct_messages: title: Direct messages total: Total diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index b55e1dae8..6124e2e6d 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1452,11 +1452,16 @@ es: votes: Votos spending_proposals_title: Propuestas de inversión budgets_title: Presupuestos participativos - visits_title: Visitas direct_messages: Mensajes directos proposal_notifications: Notificaciones de propuestas incomplete_verifications: Verificaciones incompletas polls: Votaciones + graph: + debate_created: Debates + spending_proposals: Propuestas de inversión + visit: Visitas + level_2_user: Usuarios nivel 2 + proposal_created: Propuestas Ciudadanas direct_messages: title: Mensajes directos total: Total diff --git a/config/routes/admin.rb b/config/routes/admin.rb index c5b350528..7824c062a 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -194,6 +194,7 @@ namespace :admin do end resource :stats, only: :show do + get :graph, on: :member get :proposal_notifications, on: :collection get :direct_messages, on: :collection get :polls, on: :collection