cloudlog/application/views/search/main.php
Peter Goodhall 8e741b5d36 Improve search with exact match and recent history
Refactors the callsign/gridsquare search to support exact match toggling, partial/broad match fallback, and a recent searches history stored in localStorage. Search terms are now passed via GET parameters (bookmarkable URLs) instead of POST. The advanced filter panel gains result count badges, a clear button, and persists query rules across page loads. DataTable initialization is extracted into reusable helpers.
2026-08-06 15:05:04 +01:00

76 lines
2.8 KiB
PHP

<div class="container search">
<h1>
Search
<small class="text-muted">Ready to find a QSO?</small>
</h1>
<div class="card text-center">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" href="<?php echo site_url('search'); ?>">Search</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo site_url('search/filter'); ?>">Advanced Search</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo site_url('search/duplicates'); ?>">Duplicate QSOs</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo site_url('search/incorrect_cq_zones'); ?>">Incorrect CQ Zones</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo site_url('search/lotw_unconfirmed'); ?>">QSOs unconfirmed on LoTW</a>
</li>
</ul>
</div>
<div class="card-body">
<form method="post" action="" id="search_box" name="test">
<?php
$prefillCallsign = '';
$prefillExact = false;
if (isset($initial_search) && $initial_search !== '') {
$prefillCallsign = $initial_search;
} elseif ($this->input->post('callsign') !== null) {
$prefillCallsign = $this->input->post('callsign');
}
if (isset($initial_exact) && $initial_exact) {
$prefillExact = true;
}
?>
<div class="mb-3 row">
<label for="callsign" class="col-sm-2 col-form-label">Callsign / Gridsquare</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="callsign" value="<?php echo htmlspecialchars($prefillCallsign); ?>">
<div class="form-check mt-2 text-start">
<input class="form-check-input" type="checkbox" id="exact_match" <?php echo $prefillExact ? 'checked' : ''; ?>>
<label class="form-check-label" for="exact_match">Exact callsign match only</label>
</div>
<div class="mt-2 text-start" id="recent_searches_wrapper" style="display:none;">
<small class="text-muted d-block mb-1">Recent searches</small>
<div id="recent_searches"></div>
</div>
</div>
<div class="col-sm-2">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit"><i class="fas fa-search"></i> Search</button>
</div>
</div>
</form>
</div>
</div>
<div class="card mt-3" id="results_card" style="display:none;">
<div class="card-header d-flex justify-content-between align-items-center">
<span>Results</span>
<div>
<span class="badge text-bg-light me-2" id="results_count">0 QSOs</span>
<span class="badge text-bg-secondary" id="results_mode">Partial match</span>
</div>
</div>
<div class="card-body p-2" id="results_body">
<div id="partial_view"></div>
</div>
</div>
</div>