City Adventure Admin

Gestione percorsi turistici

Seleziona il backend Strapi da utilizzare
{{ loginError }}

Dashboard KPI

Caricamento statistiche...

Caricamento statistiche in corso...

Contenuto

{{ stats.total_routes || 0 }}

Percorsi

{{ stats.total_nodes || 0 }}

POI / Nodi

{{ stats.total_users || 0 }}

Giocatori Tot.

Utenti e Attività

Utenti Attivi Oggi

{{ stats.active_users_today || 0 }}

+{{ stats.new_users_today || 0 }} nuovi
Attivi questa Settimana

{{ stats.active_users_week || 0 }}

+{{ stats.new_users_week || 0 }} nuovi
Attivi questo Mese

{{ stats.active_users_month || 0 }}

+{{ stats.new_users_month || 0 }} nuovi
Sessioni Totali

{{ stats.total_sessions || 0 }}

{{ stats.sessions_today || 0 }} oggi

Engagement

{{ stats.avg_sessions_per_user || 0 }}

Sessioni Medie/Utente

{{ stats.completion_rate || 0 }}%

Tasso Completamento

{{ stats.sessions_week || 0 }}

Sessioni Settimana

Top 10 Percorsi Più Giocati
# Percorso Lingua Partite Completati %
{{ index + 1 }} {{ route.name }} {{ route.locale === 'it' ? '🇮🇹' : '🇬🇧' }} {{ route.plays }} {{ route.completions }} {{ route.plays > 0 ? Math.round(route.completions / route.plays * 100) : 0 }}%
Nessuna partita giocata ancora
Top 10 Giocatori Più Attivi
# Username Partite
{{ index + 1 }} {{ player.username }}
{{ player.email }}
{{ player.games }}
Nessun dato disponibile

Gestione Città ({{ cities.length }})

Caricamento...
ID Nome Città Locale Percorsi Associati Coordinate Azioni
{{ city.id }} {{ city.attributes.Name }}
{{ formatDate(city.attributes.createdAt) }}
{{ city.attributes.locale === 'it' ? '🇮🇹 IT' : '🇬🇧 EN' }} {{ getCityRouteCount(city) }} {{ city.attributes.latitude }}, {{ city.attributes.longitude }} N/A
Nessuna città trovata. Crea la tua prima città!

Gestione Percorsi ({{ filteredRoutes.length }})

Filtrato per città
Attenzione: Non ci sono percorsi in inglese nel database. Puoi crearli caricando CSV con locale 'en'.
Caricamento...
ID Nome Percorso Città Località Categoria Locale Nodi Azioni
{{ route.id }} {{ getRouteName(route) }}
{{ formatDate(route.attributes.createdAt) }}
{{ getCityName(route) }} N/A {{ getRouteLocation(route) }} Nessuna {{ route.attributes.ROUTE_CATEGORY || 'N/A' }} {{ route.attributes.locale === 'it' ? '🇮🇹 IT' : '🇬🇧 EN' }} {{ getNodeCount(route) }}
Nessun percorso trovato con i filtri selezionati

{{ selectedRoute.attributes.RouteName || 'Percorso' }}

ID: {{ selectedRoute.id }}

Nome: {{ selectedRoute.attributes.RouteName || 'N/A' }}

Località: {{ selectedRoute.attributes.RouteLocation || 'N/A' }}

Categoria: {{ selectedRoute.attributes.ROUTE_CATEGORY || 'N/A' }}

Locale: {{ selectedRoute.attributes.locale === 'it' ? '🇮🇹 IT' : '🇬🇧 EN' }}

Difficoltà: {{ selectedRoute.attributes.Difficulties || 'N/A' }}

Ha Quizzone: {{ selectedRoute.attributes.HasQuizzone ? 'Sì' : 'No' }}

Nodo di partenza fisso: {{ getFixedStartNodeLabel(selectedRoute.attributes) }}

Icon URL: {{ selectedRoute.attributes.IconURL || 'N/A' }}

Creato: {{ formatDate(selectedRoute.attributes.createdAt) }}

Aggiornato: {{ formatDate(selectedRoute.attributes.updatedAt) }}

Sponsor

Header: {{ selectedRoute.attributes.SponsorHeaderText }}

Testo: {{ selectedRoute.attributes.SponsorText }}

CTA Text: {{ selectedRoute.attributes.SponsorCallToActionText }}

CTA URL: {{ selectedRoute.attributes.SponsorCallToActionUrl }}

Se impostato, indica il nodo di partenza fisso per la route.
Sponsor

Visualizzazione Geografica

Nodi del Percorso ({{ routeNodes.length }})

Caricamento...
Nessun nodo associato a questo percorso
# ID Titolo Mappa Quiz Coordinate Tipo Locale Aneddoto Ordine
{{ index + 1 }} {{ node.id }} {{ node.attributes.Title }} Senza titolo Quiz Domanda - {{ node.attributes.MapCoordinates }} - {{ node.attributes.NodeType }} - {{ node.attributes.locale === 'it' ? '🇮🇹' : '🇬🇧' }} {{ node.attributes.Anecdote.substring(0, 100) }}{{ node.attributes.Anecdote.length > 100 ? '...' : '' }} Nessun aneddoto

{{ selectedNode.attributes.Title || 'POI' }}

{{ selectedNode.id }}

{{ selectedNode.attributes.locale === 'it' ? '🇮🇹 IT' : '🇬🇧 EN' }}

{{ selectedNode.attributes.Title }}

{{ selectedNode.attributes.NodeType }}

{{ selectedNode.attributes.Anecdote }}

{{ selectedNode.attributes.MapCoordinates || 'Nessuna coordinata' }}

{{ selectedNode.attributes.GeoLocalizationPolygon || 'Nessun poligono' }}

Formato KML: "lon,lat,alt" separati da spazi.

{{ selectedNode.attributes.Question || '(Nessuna domanda Quizzone)' }}

Usata solo se il percorso ha HasQuizzone = true
Enigmi ({{ nodeRiddles.length }})

ID: {{ riddle.id }}

Tipo: {{ riddle.attributes.RiddleType }}

Domanda Riddle: {{ getRiddleQuestion(riddle) }}

Soluzione: {{ riddle.attributes.Solution }}

Titolo Tutorial: {{ riddle.attributes.TutorialTitle }}

Testo Tutorial: {{ riddle.attributes.TutorialText }}

Risposte Riddle ({{ riddleAnswers.length }})
Estratte dal campo ExtraDetails del riddle

Risposta {{ idx + 1 }}: CORRETTA

{{ answer.text }}

Le risposte del riddle sono gestite nel campo ExtraDetails e non possono essere modificate qui.
Risposte Quiz ({{ quizAnswers.length }})
Usate se il percorso ha HasQuizzone = true

Risposta {{ idx + 1 }}: CORRETTA

Nessuna risposta trovata per questo POI

Carica Percorso da CSV

CSV bilingue richiede due percorsi separati: uno per IT e uno per EN
Crea Nuova Città IT
Crea Nuova Città EN
Seleziona prima la città italiana
Crea Nuovo Percorso IT
Inserisci il numero di POI che questo percorso conterrà
Seleziona prima la città inglese
Crea Nuovo Percorso EN
Insert the number of POIs this route will contain
Formato CSV Richiesto

Per CSV Singolo Percorso (IT o EN):

NOME, COORDINATE, ANEDDOTO, QUESTION, RISPOSTA 1 (CORRETTA), RISPOSTA 2, RISPOSTA 3, RISPOSTA 4

COORDINATE (opzionale): formato longitudine,latitudine (es: 14.42597,40.623016)

Per CSV Doppio Percorso (IT + EN):

NOME, COORDINATE, ANEDDOTO, QUESTION, RISPOSTA 1 (CORRETTA), RISPOSTA 2, RISPOSTA 3, RISPOSTA 4, ANEDDOTO, QUIZ, ANSWER 1 (CORRECT), ANSWER 2, ANSWER 3, ANSWER 4

Le prime 8 colonne sono per l'italiano, le seconde 7 per l'inglese

COORDINATE (opzionale): formato longitudine,latitudine (es: 14.42597,40.623016)

La prima risposta (RISPOSTA 1 / ANSWER 1) è sempre quella corretta
File Valido

{{ csvPreview.message }}

Nodi totali: {{ csvPreview.total_nodes }}

Anteprima primi 5 nodi
{{ idx + 1 }}. {{ node.title }}

{{ node.anecdote }}

{{ node.answers_count }} risposte
{{ uploadError }}
{{ uploadSuccess }}

Gestione Eventi ({{ events.length }})

Caricamento...
ID Nome Descrizione Data Inizio Data Fine Locale Creato
{{ event.id }} {{ event.attributes.EventName || 'Senza nome' }}
{{ event.attributes.EVENT_CATEGORY }}
{{ event.attributes.SponsorText.substring(0, 100) }}{{ event.attributes.SponsorText.length > 100 ? '...' : '' }} Nessuna descrizione {{ formatDate(event.attributes.From) }} - {{ formatDate(event.attributes.To) }} - {{ event.attributes.locale === 'it' ? '🇮🇹 IT' : '🇬🇧 EN' }} {{ formatDate(event.attributes.createdAt) }}
Nessun evento trovato

{{ selectedEvent.attributes.EventName || 'Evento' }}

ID: {{ selectedEvent.id }}

Nome: {{ selectedEvent.attributes.EventName }}

Categoria: {{ selectedEvent.attributes.EVENT_CATEGORY || 'N/A' }}

Locale: {{ selectedEvent.attributes.locale === 'it' ? '🇮🇹 IT' : '🇬🇧 EN' }}

Data Inizio: {{ selectedEvent.attributes.From ? formatDate(selectedEvent.attributes.From) : 'N/A' }}

Data Fine: {{ selectedEvent.attributes.To ? formatDate(selectedEvent.attributes.To) : 'N/A' }}

Difficoltà: {{ selectedEvent.attributes.Difficulty || 'N/A' }}

Comportamento Quiz: {{ selectedEvent.attributes.EVENT_QUIZ_BEHAVIOUR || 'INHERIT_FROM_ROUTE_SETTINGS' }}

Call To Action Text: {{ selectedEvent.attributes.CallToActionText || 'N/A' }}

Call To Action URL: {{ selectedEvent.attributes.CallToActionUrl }} N/A

Creato: {{ formatDate(selectedEvent.attributes.createdAt) }}

Aggiornato: {{ formatDate(selectedEvent.attributes.updatedAt) }}

Sponsor

Header: {{ selectedEvent.attributes.SponsorHeaderText }}

Testo: {{ selectedEvent.attributes.SponsorText }}

CTA Text: {{ selectedEvent.attributes.SponsorCallToActionText }}

CTA URL: {{ selectedEvent.attributes.SponsorCallToActionUrl }}

Sponsor

Nodi dell'Evento ({{ eventNodes.length }})

Caricamento...
Nessun nodo associato a questo evento
# ID Titolo Quiz Coordinate Tipo Locale Aneddoto Ordine
{{ index + 1 }} {{ node.id }} {{ node.attributes.Title }} Senza titolo Quiz Domanda - {{ node.attributes.MapCoordinates }} - {{ node.attributes.NodeType }} - {{ node.attributes.locale === 'it' ? '🇮🇹' : '🇬🇧' }} {{ node.attributes.Anecdote.substring(0, 100) }}{{ node.attributes.Anecdote.length > 100 ? '...' : '' }} Nessun aneddoto