Blocca la seconda diretta sullo stesso utente, registra gli abusi in admin e presenta la copertina come grafica caricata dalla società, con demo Team MLTV. Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
2.4 KiB
ERB
49 lines
2.4 KiB
ERB
<% content_for :body_class, "admin-body" %>
|
|
|
|
<div class="admin-page-head">
|
|
<h2 class="admin-page-title"><%= t("admin.stream_concurrency.index.title") %></h2>
|
|
<p class="muted admin-page-sub"><%= t("admin.stream_concurrency.index.lead") %></p>
|
|
</div>
|
|
|
|
<section class="kpi-grid">
|
|
<div class="kpi-card <%= @lookback_count.positive? ? 'kpi-card--accent' : '' %>">
|
|
<div class="kpi-label"><%= t("admin.stream_concurrency.kpi.lookback") %></div>
|
|
<div class="kpi-value"><%= @lookback_count %></div>
|
|
<div class="kpi-sub"><%= t("admin.stream_concurrency.kpi.lookback_sub") %></div>
|
|
</div>
|
|
<div class="kpi-card <%= @two_devices_count.positive? ? 'kpi-card--danger' : '' %>">
|
|
<div class="kpi-label"><%= t("admin.stream_concurrency.kpi.two_devices") %></div>
|
|
<div class="kpi-value"><%= @two_devices_count %></div>
|
|
<div class="kpi-sub"><%= t("admin.stream_concurrency.kpi.two_devices_sub") %></div>
|
|
</div>
|
|
</section>
|
|
|
|
<div class="panel admin-sessions-filters">
|
|
<%= form_with url: admin_stream_concurrency_violations_path, method: :get, local: true, class: "admin-filter-form" do %>
|
|
<div class="admin-filter-grid">
|
|
<label class="admin-filter-field">
|
|
<span><%= t("admin.stream_concurrency.filters.q") %></span>
|
|
<%= text_field_tag :q, @filters[:q], placeholder: t("admin.stream_concurrency.filters.q_placeholder") %>
|
|
</label>
|
|
<label class="admin-filter-field admin-filter-field--check">
|
|
<span><%= t("admin.stream_concurrency.filters.two_devices") %></span>
|
|
<label class="admin-checkbox">
|
|
<%= check_box_tag :devices_differ, "1", @filters[:devices_differ] %>
|
|
<%= t("admin.stream_concurrency.filters.two_devices_hint") %>
|
|
</label>
|
|
</label>
|
|
</div>
|
|
<div class="admin-filter-actions">
|
|
<%= submit_tag t("admin.stream_concurrency.filters.apply"), class: "admin-btn admin-btn--primary admin-btn--sm" %>
|
|
<%= link_to t("admin.stream_concurrency.filters.reset"), admin_stream_concurrency_violations_path, class: "admin-btn admin-btn--outline admin-btn--sm" %>
|
|
<span class="muted admin-filter-count">
|
|
<%= t("admin.stream_concurrency.index.results", shown: @violations.size, total: @total_count) %>
|
|
</span>
|
|
</div>
|
|
<% end %>
|
|
</div>
|
|
|
|
<div class="panel">
|
|
<%= render "admin/stream_concurrency_violations/table", violations: @violations, empty_key: "admin.stream_concurrency.index.none" %>
|
|
</div>
|