From adfea01cdbe5d1d31b797d1d481e6c9dcfa4bce7 Mon Sep 17 00:00:00 2001 From: Emiliano Frascaro Date: Tue, 8 Sep 2026 22:14:35 +0200 Subject: [PATCH] Permette di filtrare il grafico analytics su una singola pagina. Aggiunge il filtro Pagina (grafico) e il link Grafico in tabella, mantenendo Da/A/Device. Co-authored-by: Cursor --- .../controllers/admin/analytics_controller.rb | 22 +++++----- .../app/views/admin/analytics/index.html.erb | 42 ++++++++++++++++--- backend/app/views/layouts/admin.html.erb | 2 +- backend/config/locales/admin.de.yml | 9 +++- backend/config/locales/admin.en.yml | 9 +++- backend/config/locales/admin.es.yml | 9 +++- backend/config/locales/admin.fr.yml | 9 +++- backend/config/locales/admin.it.yml | 9 +++- backend/public/admin.css | 8 ++++ backend/spec/requests/admin/analytics_spec.rb | 20 +++++++++ 10 files changed, 112 insertions(+), 27 deletions(-) diff --git a/backend/app/controllers/admin/analytics_controller.rb b/backend/app/controllers/admin/analytics_controller.rb index df9e22c..2e52672 100644 --- a/backend/app/controllers/admin/analytics_controller.rb +++ b/backend/app/controllers/admin/analytics_controller.rb @@ -6,7 +6,8 @@ module Admin @filters = { from: parse_date(params[:from]) || 7.days.ago.to_date, to: parse_date(params[:to]) || Time.zone.today, - device: params[:device].presence + device: params[:device].presence, + chart_path: params[:chart_path].presence } @analytics_preview_active = analytics_preview_active? @@ -37,21 +38,22 @@ module Admin } end.sort_by { |r| [-r[:pageviews], -r[:moves], -r[:clicks], r[:page_path]] } - pageviews_by_day = scope.group(:day).sum(:pageview_count) - clicks_by_day = cell_scope.group(:day).sum(:click_count) - moves_by_day = cell_scope.group(:day).sum(:move_count) + @chart_path_options = @pages.map { |row| row[:page_path] } + if @filters[:chart_path].present? && @chart_path_options.exclude?(@filters[:chart_path]) + @filters[:chart_path] = nil + end + + trend_scope = scope + trend_scope = trend_scope.where(page_path: @filters[:chart_path]) if @filters[:chart_path].present? + pageviews_by_day = trend_scope.group(:day).sum(:pageview_count) @trend = (@filters[:from]..@filters[:to]).map do |day| { day: day.iso8601, - pageviews: pageviews_by_day[day].to_i, - clicks: clicks_by_day[day].to_i, - moves: moves_by_day[day].to_i + pageviews: pageviews_by_day[day].to_i } end @trend_totals = { - pageviews: @trend.sum { |r| r[:pageviews] }, - clicks: @trend.sum { |r| r[:clicks] }, - moves: @trend.sum { |r| r[:moves] } + pageviews: @trend.sum { |r| r[:pageviews] } } end diff --git a/backend/app/views/admin/analytics/index.html.erb b/backend/app/views/admin/analytics/index.html.erb index 5aa485c..d2a5062 100644 --- a/backend/app/views/admin/analytics/index.html.erb +++ b/backend/app/views/admin/analytics/index.html.erb @@ -50,6 +50,14 @@ @filters[:device] ) %> +
<%= submit_tag t("admin.analytics.filters.apply"), class: "admin-btn admin-btn--primary admin-btn--sm" %> @@ -63,7 +71,13 @@

<%= t("admin.analytics.index.trend_title") %>

-

<%= t("admin.analytics.index.trend_lead") %>

+

+ <% if @filters[:chart_path].present? %> + <%= t("admin.analytics.index.trend_lead_path", path: @filters[:chart_path]) %> + <% else %> + <%= t("admin.analytics.index.trend_lead") %> + <% end %> +