2022-09-18 16:48:16 +02:00
|
|
|
<style>
|
|
|
|
|
#modeChart, #bandChart, #satChart{
|
|
|
|
|
margin: 0 auto;
|
2021-09-10 18:53:24 +02:00
|
|
|
}
|
2025-11-14 14:36:31 +00:00
|
|
|
|
|
|
|
|
.stats-summary-cards {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
|
|
|
gap: 1.5rem;
|
|
|
|
|
margin-bottom: 2rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card {
|
|
|
|
|
background: var(--bs-body-bg);
|
|
|
|
|
border: 1px solid var(--bs-border-color);
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
padding: 1.5rem;
|
|
|
|
|
text-align: center;
|
|
|
|
|
transition: transform 0.2s, box-shadow 0.2s;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card:hover {
|
|
|
|
|
transform: translateY(-5px);
|
|
|
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card-value {
|
|
|
|
|
font-size: 2.5rem;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
color: var(--bs-primary);
|
|
|
|
|
margin-bottom: 0.5rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card-label {
|
|
|
|
|
font-size: 0.875rem;
|
|
|
|
|
color: var(--bs-secondary-color, var(--bs-secondary));
|
|
|
|
|
text-transform: uppercase;
|
|
|
|
|
letter-spacing: 0.5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.loading-indicator {
|
|
|
|
|
text-align: center;
|
|
|
|
|
padding: 2rem;
|
|
|
|
|
color: var(--bs-body-color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.loading-spinner {
|
|
|
|
|
border: 3px solid var(--bs-border-color);
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
border-top: 3px solid var(--bs-primary);
|
|
|
|
|
width: 40px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
animation: spin 1s linear infinite;
|
|
|
|
|
margin: 0 auto 1rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes spin {
|
|
|
|
|
0% { transform: rotate(0deg); }
|
|
|
|
|
100% { transform: rotate(360deg); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.chart-container {
|
|
|
|
|
position: relative;
|
|
|
|
|
min-height: 200px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Dark theme specific adjustments */
|
|
|
|
|
[data-bs-theme="dark"] .stats-card {
|
|
|
|
|
background: var(--bs-dark-bg-subtle, #212529);
|
|
|
|
|
border-color: var(--bs-border-color, #495057);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[data-bs-theme="dark"] .stats-card:hover {
|
|
|
|
|
box-shadow: 0 4px 12px rgba(255,255,255,0.1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[data-bs-theme="dark"] .loading-spinner {
|
|
|
|
|
border-color: rgba(255,255,255,0.1);
|
|
|
|
|
border-top-color: var(--bs-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@media (max-width: 768px) {
|
|
|
|
|
.stats-summary-cards {
|
|
|
|
|
grid-template-columns: repeat(2, 1fr);
|
|
|
|
|
gap: 1rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card {
|
|
|
|
|
padding: 1rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card-icon {
|
|
|
|
|
font-size: 2rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.stats-card-value {
|
|
|
|
|
font-size: 1.5rem;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-09-18 16:48:16 +02:00
|
|
|
</style>
|
2023-11-05 16:57:53 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
// General Language
|
|
|
|
|
var lang_statistics_years = "<?php echo lang('statistics_years')?>";
|
|
|
|
|
var lang_statistics_modes = "<?php echo lang('statistics_modes')?>";
|
|
|
|
|
var lang_statistics_bands = "<?php echo lang('statistics_bands')?>";
|
|
|
|
|
var lang_statistics_number_of_qso_worked_each_year = "<?php echo lang('statistics_number_of_qso_worked_each_year')?>";
|
|
|
|
|
var lang_statistics_year = "<?php echo lang('statistics_year')?>";
|
|
|
|
|
var lang_statistics_number_of_qso_worked = "<?php echo lang('statistics_number_of_qso_worked')?>";
|
|
|
|
|
var lang_gen_hamradio_mode = "<?php echo lang('gen_hamradio_mode')?>";
|
|
|
|
|
var lang_gen_hamradio_band = "<?php echo lang('gen_hamradio_band')?>";
|
2025-11-14 14:36:31 +00:00
|
|
|
var lang_statistics_unique_callsigns = "<?php echo lang('statistics_unique_callsigns')?>";
|
2023-11-05 16:57:53 +01:00
|
|
|
</script>
|
|
|
|
|
|
2019-05-13 17:37:01 +01:00
|
|
|
<div class="container statistics">
|
|
|
|
|
|
2021-09-10 18:53:24 +02:00
|
|
|
<h2>
|
|
|
|
|
<?php echo $page_title; ?>
|
2023-05-17 02:08:11 +03:00
|
|
|
<small class="text-muted"><?php echo lang('statistics_explore_the_logbook'); ?></small>
|
2021-09-10 18:53:24 +02:00
|
|
|
</h2>
|
|
|
|
|
|
2025-11-14 14:36:31 +00:00
|
|
|
<!-- Summary Cards -->
|
|
|
|
|
<div class="stats-summary-cards" id="summaryCards">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading statistics...</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Date Range Filter (Optional) -->
|
|
|
|
|
<div class="card mb-3" style="display: none;" id="dateFilterCard">
|
|
|
|
|
<div class="card-body">
|
|
|
|
|
<div class="row align-items-end">
|
|
|
|
|
<div class="col-md-4">
|
|
|
|
|
<label for="filterStartDate" class="form-label">
|
|
|
|
|
<i class="fas fa-calendar-alt"></i> Start Date
|
|
|
|
|
</label>
|
|
|
|
|
<input type="date" class="form-control" id="filterStartDate">
|
|
|
|
|
</div>
|
|
|
|
|
<div class="col-md-4">
|
|
|
|
|
<label for="filterEndDate" class="form-label">
|
|
|
|
|
<i class="fas fa-calendar-alt"></i> End Date
|
|
|
|
|
</label>
|
|
|
|
|
<input type="date" class="form-control" id="filterEndDate">
|
|
|
|
|
</div>
|
|
|
|
|
<div class="col-md-4">
|
|
|
|
|
<button class="btn btn-primary" onclick="applyDateFilter()">
|
|
|
|
|
<i class="fas fa-filter"></i> Apply Filter
|
|
|
|
|
</button>
|
|
|
|
|
<button class="btn btn-secondary" onclick="clearDateFilter()">
|
|
|
|
|
<i class="fas fa-times"></i> Clear
|
|
|
|
|
</button>
|
|
|
|
|
<button class="btn btn-outline-secondary" onclick="toggleDateFilter()">
|
|
|
|
|
<i class="fas fa-chevron-up"></i>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="text-end mb-2">
|
|
|
|
|
<button class="btn btn-sm btn-outline-primary" onclick="toggleDateFilter()">
|
|
|
|
|
<i class="fas fa-filter"></i> Date Range Filter
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
2022-09-18 16:48:16 +02:00
|
|
|
<div hidden class="tabs">
|
2022-09-25 20:39:55 +02:00
|
|
|
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
|
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link active" id="home-tab" data-bs-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">
|
|
|
|
|
<i class="fas fa-chart-line"></i> General
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
2022-10-05 23:23:32 +02:00
|
|
|
<?php if ($sat_active) { ?>
|
2022-09-25 20:39:55 +02:00
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link" id="satellite-tab" data-bs-toggle="tab" href="#satellite" role="tab" aria-controls="satellite" aria-selected="false">
|
|
|
|
|
<i class="fas fa-satellite"></i> Satellites
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
2022-10-05 23:23:32 +02:00
|
|
|
<?php } ?>
|
2022-09-25 20:39:55 +02:00
|
|
|
</ul>
|
2022-09-18 16:48:16 +02:00
|
|
|
</div>
|
2021-09-10 18:53:24 +02:00
|
|
|
|
2022-09-25 20:39:55 +02:00
|
|
|
<div class="tab-content" id="myTabContent">
|
|
|
|
|
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
|
|
|
|
|
<br />
|
|
|
|
|
<ul class="nav nav-pills" id="myTab2" role="tablist">
|
|
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link active" id="years-tab" data-bs-toggle="tab" href="#yearstab" role="tab" aria-controls="yearstab" aria-selected="true">
|
|
|
|
|
<i class="fas fa-calendar-alt"></i> <?php echo lang('statistics_years'); ?>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" id="mode-tab" data-bs-toggle="tab" href="#modetab" role="tab" aria-controls="modetab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-broadcast-tower"></i> <?php echo lang('statistics_modes'); ?>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" id="band-tab" data-bs-toggle="tab" href="#bandtab" role="tab" aria-controls="bandtab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-wave-square"></i> <?php echo lang('statistics_bands'); ?>
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link" id="qso-tab" data-bs-toggle="tab" href="#qsotab" role="tab" aria-controls="qsotab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-table"></i> <?php echo lang('statistics_qsos'); ?>
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link" id="unique-tab" data-bs-toggle="tab" href="#uniquetab" role="tab" aria-controls="uniquetab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-users"></i> <?php echo lang('statistics_unique_callsigns'); ?>
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link" id="trends-tab" data-bs-toggle="tab" href="#trendstab" role="tab" aria-controls="trendstab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-chart-area"></i> Trends
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
2025-11-14 14:36:31 +00:00
|
|
|
<a class="nav-link" id="continents-tab" data-bs-toggle="tab" href="#continentstab" role="tab" aria-controls="continentstab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-globe-americas"></i> Continents
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" id="mostworked-tab" data-bs-toggle="tab" href="#mostworkedtab" role="tab" aria-controls="mostworkedtab" aria-selected="false">
|
|
|
|
|
<i class="fas fa-trophy"></i> Most Worked
|
|
|
|
|
</a>
|
2022-09-25 20:39:55 +02:00
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<div class="tab-content">
|
|
|
|
|
<div class="tab-pane fade show active" id="yearstab" role="tabpanel" aria-labelledby="years-tab">
|
2025-11-14 14:36:31 +00:00
|
|
|
<div class="years chart-container" style="margin-top: 20px;">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading year statistics...</p>
|
|
|
|
|
</div>
|
2022-09-25 20:39:55 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="modetab" role="tabpanel" aria-labelledby="mode-tab">
|
2025-11-14 14:36:31 +00:00
|
|
|
<div class="mode chart-container">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading mode statistics...</p>
|
|
|
|
|
</div>
|
2022-09-25 20:39:55 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="bandtab" role="tabpanel" aria-labelledby="band-tab">
|
2025-11-14 14:36:31 +00:00
|
|
|
<div class="band chart-container">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading band statistics...</p>
|
|
|
|
|
</div>
|
2022-09-25 20:39:55 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="qsotab" role="tabpanel" aria-labelledby="qso-tab">
|
2025-11-14 14:36:31 +00:00
|
|
|
<div class="qsos chart-container">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading QSO statistics...</p>
|
|
|
|
|
</div>
|
2022-09-25 20:39:55 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="uniquetab" role="tabpanel" aria-labelledby="unique-tab">
|
2025-11-14 14:36:31 +00:00
|
|
|
<div class="unique chart-container">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading unique callsigns...</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="trendstab" role="tabpanel" aria-labelledby="trends-tab">
|
|
|
|
|
<div class="trends chart-container" style="margin-top: 20px;">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading trends...</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="continentstab" role="tabpanel" aria-labelledby="continents-tab">
|
|
|
|
|
<div class="continents chart-container" style="margin-top: 20px;">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading continent statistics...</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane fade" id="mostworkedtab" role="tabpanel" aria-labelledby="mostworked-tab">
|
|
|
|
|
<div class="mostworked chart-container" style="margin-top: 20px;">
|
|
|
|
|
<div class="loading-indicator">
|
|
|
|
|
<div class="loading-spinner"></div>
|
|
|
|
|
<p>Loading most worked statistics...</p>
|
|
|
|
|
</div>
|
2022-09-25 20:39:55 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2022-09-18 16:48:16 +02:00
|
|
|
</div>
|
2021-09-10 18:53:24 +02:00
|
|
|
|
2022-09-25 20:39:55 +02:00
|
|
|
<div class="tab-pane fade" id="satellite" role="tabpanel" aria-labelledby="satellite-tab">
|
|
|
|
|
<br/>
|
|
|
|
|
<div style="display: flex;" id="satContainer"><div style="flex: 1;"><canvas id="satChart" width="500" height="500"></canvas></div><div style="flex: 1;" id="satTable">
|
|
|
|
|
|
|
|
|
|
<table style="width:100%" class="sattable table table-sm table-bordered table-hover table-striped table-condensed text-center"><thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>#</td>
|
|
|
|
|
<td>Satellite</td>
|
|
|
|
|
<td># of QSO's worked</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody></tbody>
|
|
|
|
|
</table></div></div>
|
|
|
|
|
</div>
|
2021-09-10 18:53:24 +02:00
|
|
|
</div>
|
2011-11-06 23:09:51 +00:00
|
|
|
</div>
|