Billing Stripe, link regia mobile e staff solo trasmissione.

Aggiunge fatturazione club, pagina regia condivisibile senza account, roster squadre e rimuove la modalità controller dall'app (v1.1.0).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-29 07:23:13 +02:00
parent 4083bc5dee
commit f4b7be0f80
156 changed files with 5033 additions and 2033 deletions

View File

@@ -2,30 +2,50 @@
<% content_for :meta_description, "Guarda le dirette live delle partite giovanili ora in corso e le prossime gare programmate. Cerca la tua squadra e apri il link senza installare app." %>
<% content_for :canonical_url, seo_absolute_url(public_live_index_path) %>
<% live_index_params = @club ? { club_id: @club.id } : {} %>
<div class="wrap">
<h1>Dirette e partite in programma</h1>
<p class="results-hint">
Cerca la tua squadra: trovi le dirette attive e le partite già programmate dallapp.
</p>
<% if @club %>
<p class="results-hint" style="margin-bottom:8px">
<%= link_to "← #{@club.name}", public_club_path(@club), class: "back-link" %>
</p>
<h1>Dirette e partite — <%= @club.name %></h1>
<p class="results-hint">
Solo le squadre di questa società: dirette in corso e partite programmate da app o sito.
</p>
<% else %>
<h1>Dirette e partite in programma</h1>
<p class="results-hint">
Cerca per società, squadra, avversario o luogo: trovi le dirette attive e le partite programmate.
</p>
<% end %>
<% if @club && @can_schedule_match %>
<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px">
<%= link_to "Programma partita", public_new_club_match_path(@club), class: "btn btn-primary" %>
</div>
<% end %>
<%= form_with url: public_live_index_path, method: :get, local: true, class: "search-form" do %>
<% if @club %>
<%= hidden_field_tag :club_id, @club.id %>
<% end %>
<input
type="search"
name="q"
value="<%= @query %>"
placeholder="Es. Tigers, Eagles, nome squadra…"
placeholder="<%= @club ? "Cerca società, squadra, avversario o luogo…" : "Es. Crazy Volley, Serie D, avversario…" %>"
aria-label="Cerca squadra"
autocomplete="off"
/>
<button type="submit" class="btn btn-primary">Cerca</button>
<% if @query.present? %>
<%= link_to "Azzera", public_live_index_path, class: "btn btn-secondary" %>
<%= link_to "Azzera", public_live_index_path(live_index_params), class: "btn btn-secondary" %>
<% end %>
<% end %>
<% if @query.present? %>
<p class="results-hint">
Risultati per «<%= h @query %>»:
Risultati per «<%= h @query %>»<%= @club ? " in #{@club.name}" : "" %>:
<%= @sessions.size %> in diretta · <%= @upcoming_matches.size %> in programma
</p>
<% end %>
@@ -37,7 +57,7 @@
<% match = session.match %>
<% on_air = @online_paths.include?(session.mediamtx_path_name) %>
<article class="live-card">
<h3><%= match.team.name %> vs <%= match.opponent_name %></h3>
<%= live_match_card_heading(match) %>
<p class="meta">
<% if match.location.present? %><%= match.location %> · <% end %>
<%= session.platform == "matchlivetv" ? "Match Live TV" : session.platform.capitalize %>
@@ -70,11 +90,11 @@
<% if @upcoming_matches.any? %>
<h2 class="section-heading<%= ' section-heading--spaced' if @sessions.any? %>">Prossime partite</h2>
<p class="results-hint">Programmate dallapp: la diretta partirà quando lo staff avvierà la trasmissione.</p>
<p class="results-hint">Programmate da app o sito: la diretta partirà quando lo staff avvierà la trasmissione.</p>
<div class="live-grid upcoming-grid">
<% @upcoming_matches.each do |match| %>
<article class="live-card live-card--upcoming">
<h3><%= match.team.name %> vs <%= match.opponent_name %></h3>
<%= live_match_card_heading(match) %>
<p class="meta">
<% if match.location.present? %><%= match.location %> · <% end %>
<%= match.category.presence || match.sport&.capitalize %>
@@ -96,6 +116,25 @@
<p><strong>Nessuna diretta in questo momento.</strong></p>
<p>Torna allorario indicato: quando la squadra avvierà lo streaming, la partita comparirà in «In diretta adesso».</p>
</div>
<% elsif @club %>
<div class="empty-state">
<p><strong>Nessuna diretta o partita in programma per <%= @club.name %>.</strong></p>
<p>
<% if @can_schedule_match %>
<%= link_to "Programma la prima partita", public_new_club_match_path(@club), class: "btn btn-primary" %>
oppure dallapp Match Live TV.
<% elsif @club.teams.any? %>
Chiedi al titolare della società o a un responsabile trasmissione di programmare una gara.
<% else %>
Aggiungi una squadra dalla
<%= link_to "pagina società", public_club_path(@club) %>
e programma la prima partita.
<% end %>
</p>
<p style="margin-top:16px">
<%= link_to "← Torna alla società", public_club_path(@club), class: "btn btn-secondary" %>
</p>
</div>
<% else %>
<div class="empty-hero">
<div class="empty-hero-copy">