2023-10-30 21:35:42 +01:00
< script >
var lang_export_cabrillo_proceed = '<?php echo lang(' export_cabrillo_proceed ') ?>' ;
2023-11-12 17:50:23 +01:00
var lang_export_cabrillo_select_year = " <?php echo lang('export_cabrillo_select_year') ?> " ;
2023-11-01 01:41:58 +01:00
var lang_export_cabrillo_select_contest = '<?php echo lang (' export_cabrillo_select_contest ') ?>' ;
var lang_export_cabrillo_select_date_range = '<?php echo lang (' export_cabrillo_select_date_range ') ?>' ;
2023-10-30 21:35:42 +01:00
var lang_export_cabrillo_no_contests_for_stationlocation = '<?php echo lang(' export_cabrillo_no_contests_for_stationlocation ') ?>' ;
</ script >
2023-04-12 11:58:47 +02:00
< div class = " container " >
< br >
< h2 >< ? php echo $page_title ; ?> </h2>
< div class = " card " >
< div class = " card-header " >
2023-10-30 20:32:36 +01:00
< ? php echo lang ( 'export_cabrillo_description' ); ?>
2023-04-12 11:58:47 +02:00
</ div >
< div class = " card-body " >
< ? php
echo '<div class="contests">' ;
2023-04-12 14:24:03 +02:00
if ( $station_profile ) { ?>
2023-04-12 11:58:47 +02:00
< form class = " form " action = " <?php echo site_url('cabrillo/export'); ?> " method = " post " enctype = " multipart/form-data " >
2023-11-14 13:35:53 +01:00
< div class = " mb-3 d-flex align-items-center row " >
2023-10-30 20:32:36 +01:00
< div class = " col-md-3 control-label " for = " station_id " >< ? php echo lang ( 'export_cabrillo_select_station' ); ?> </div>
2023-11-17 16:28:48 +01:00
< select id = " station_id " name = " station_id " class = " form-select my-1 me-sm-2 col-md-4 w-auto " >
2023-04-12 14:24:03 +02:00
< ? php foreach ( $station_profile -> result () as $station ) { ?>
2023-10-30 21:35:42 +01:00
< option value = " <?php echo $station->station_id ; ?> " < ? php if ( $station -> station_id == $this -> stations -> find_active ()) { echo " selected = \" selected \" " ; } ?> ><?php echo lang('gen_hamradio_callsign') ?>: <?php echo $station->station_callsign; ?> (<?php echo $station->station_profile_name; ?>)</option>
2023-04-12 14:24:03 +02:00
< ? php } ?>
</ select >
2023-11-17 16:28:48 +01:00
< button id = " button1id " type = " button " onclick = " loadYears(); " name = " button1id " class = " btn btn-sm btn-primary w-auto " > < ? php echo lang ( 'export_cabrillo_proceed' ) ?> </button>
2023-04-12 14:24:03 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div class = " mb-3 d-flex align-items-center row contestyear " >
2023-04-12 11:58:47 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div class = " mb-3 d-flex align-items-center row contestname " >
2023-04-12 11:58:47 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div class = " mb-3 d-flex align-items-center row contestdates " >
2023-04-12 11:58:47 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
Add Cabrillo export modal & format improvements
Add a full Cabrillo export workflow and harden Cabrillo/QSO formatting. Introduces a modal UI to export contest logs (new button + modal form with fields for location, category time, operators, club, soapbox, date range and other Cabrillo categories). Controller updates pass the new fields to the export action. Cabrilloformat library extended to accept and emit LOCATION and CATEGORY-TIME, improve header field ordering and presence checks, map ADIF modes to the five Cabrillo modes (CW/PH/FM/RY/DG), fix a band label (2.4G -> 2.3G), and emit placeholders for missing received exchanges to preserve column alignment. Contesting_model: more robust date parsing with UTC fallback, ensure session QSO marker only persists when timestamp valid, and build start timestamp when LIVE mode omits start_date/start_time. Frontend JS: setSession() now returns the ajax promise so callers can await it; several callers updated to await setSession and re-fetch session data before refreshing the QSO table; restore full table search on callsign blur and when suggestions are cleared. Misc: small form/input fixes (club field type, default overlay option) and additional server-supplied data loaded into the contesting view (active station id, contest session, station profile). These changes add required Cabrillo fields for certain contests and make exports and session handling more reliable.
2026-03-27 00:04:21 +00:00
< div class = " col-md-3 control-label " for = " club " > Club : </ div >
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " club " type = " text " name = " club " aria - label = " club " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categoryoperator " >< ? php echo lang ( 'export_cabrillo_cat_operator' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categoryoperator " name = " categoryoperator " >
2023-10-30 21:35:42 +01:00
< option value = " SINGLE-OP " >< ? php echo lang ( 'export_cabrillo_cat_operator_single_op' ) ?> </option>
< option value = " MULTI-OP " >< ? php echo lang ( 'export_cabrillo_cat_operator_multi_op' ) ?> </option>
< option value = " CHECKLOG " >< ? php echo lang ( 'export_cabrillo_cat_operator_checklog' ) ?> </option>
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categoryassisted " >< ? php echo lang ( 'export_cabrillo_cat_assisted' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categoryassisted " name = " categoryassisted " >
2023-10-30 21:35:42 +01:00
< option value = " NON-ASSISTED " >< ? php echo lang ( 'export_cabrillo_cat_assisted_not_ass' ) ?> </option>
< option value = " ASSISTED " >< ? php echo lang ( 'export_cabrillo_cat_assisted_ass' ) ?> </option>
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categoryband " >< ? php echo lang ( 'export_cabrillo_cat_band' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categoryband " name = " categoryband " >
2023-10-30 21:35:42 +01:00
< option value = " ALL " >< ? php echo lang ( 'general_word_all' ) ?> </option>
< option value = " 160M " > 160 M </ option >
< option value = " 80M " > 80 M </ option >
< option value = " 40M " > 40 M </ option >
< option value = " 20M " > 20 M </ option >
< option value = " 15M " > 15 M </ option >
< option value = " 10M " > 10 M </ option >
< option value = " 6M " > 6 M </ option >
< option value = " 4M " > 4 M </ option >
< option value = " 2M " > 2 M </ option >
< option value = " 222 " > 222 MHz ( 1.25 M ) </ option >
< option value = " 432 " > 432 MHz ( 70 CM ) </ option >
< option value = " 902 " > 902 MHz ( 33 CM ) </ option >
< option value = " 1.2G " > 1.2 GHz </ option >
< option value = " 2.3G " > 2.3 GHz </ option >
< option value = " 3.4G " > 3.4 GHz </ option >
< option value = " 5.7G " > 5.7 GHz </ option >
< option value = " 10G " > 10 GHz </ option >
< option value = " 24G " > 24 GHz </ option >
< option value = " 47G " > 47 GHz </ option >
< option value = " 75G " > 75 GHz </ option >
< option value = " 122G " > 122 GHz </ option >
< option value = " 134G " > 134 GHz </ option >
< option value = " 241G " > 241 GHz </ option >
< option value = " Light " >< ? php echo lang ( 'general_word_light' ) ?> </option>
2026-03-27 00:06:12 +00:00
< option value = " VHF-3-BAND " > VHF - 3 - BAND ( ARRL VHF ) </ option >
< option value = " VHF-FM-ONLY " > VHF - FM - ONLY ( ARRL VHF ) </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categorymode " >< ? php echo lang ( 'export_cabrillo_cat_mode' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categorymode " name = " categorymode " >
2023-04-14 08:00:48 +02:00
< option value = " MIXED " > MIXED </ option >
< option value = " CW " > CW </ option >
< option value = " DIGI " > DIGI </ option >
< option value = " FM " > FM </ option >
< option value = " RTTY " > RTTY </ option >
< option value = " SSB " > SSB </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categorypower " >< ? php echo lang ( 'export_cabrillo_cat_power' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categorypower " name = " categorypower " >
2023-04-14 08:00:48 +02:00
< option value = " LOW " > LOW </ option >
< option value = " HIGH " > HIGH </ option >
< option value = " QRP " > QRP </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categorystation " >< ? php echo lang ( 'export_cabrillo_cat_station' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categorystation " name = " categorystation " >
2023-04-14 08:00:48 +02:00
< option value = " FIXED " > FIXED </ option >
< option value = " DISTRIBUTED " > DISTRIBUTED </ option >
< option value = " MOBILE " > MOBILE </ option >
< option value = " PORTABLE " > PORTABLE </ option >
< option value = " ROVER " > ROVER </ option >
< option value = " ROVER-LIMITED " > ROVER - LIMITED </ option >
< option value = " ROVER-UNLIMITED " > ROVER - UNLIMITED </ option >
< option value = " EXPEDITION " > EXPEDITION </ option >
< option value = " HQ " > HQ </ option >
< option value = " SCHOOL " > SCHOOL </ option >
< option value = " EXPLORER " > EXPLORER </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categorytransmitter " >< ? php echo lang ( 'export_cabrillo_cat_transmitter' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categorytransmitter " name = " categorytransmitter " >
2023-04-14 08:00:48 +02:00
< option value = " ONE " > ONE </ option >
< option value = " TWO " > TWO </ option >
< option value = " LIMITED " > LIMITED </ option >
< option value = " UNLIMITED " > UNLIMITED </ option >
< option value = " SWL " > SWL </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " categoryoverlay " >< ? php echo lang ( 'export_cabrillo_cat_overlay' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categoryoverlay " name = " categoryoverlay " >
Add Cabrillo export modal & format improvements
Add a full Cabrillo export workflow and harden Cabrillo/QSO formatting. Introduces a modal UI to export contest logs (new button + modal form with fields for location, category time, operators, club, soapbox, date range and other Cabrillo categories). Controller updates pass the new fields to the export action. Cabrilloformat library extended to accept and emit LOCATION and CATEGORY-TIME, improve header field ordering and presence checks, map ADIF modes to the five Cabrillo modes (CW/PH/FM/RY/DG), fix a band label (2.4G -> 2.3G), and emit placeholders for missing received exchanges to preserve column alignment. Contesting_model: more robust date parsing with UTC fallback, ensure session QSO marker only persists when timestamp valid, and build start timestamp when LIVE mode omits start_date/start_time. Frontend JS: setSession() now returns the ajax promise so callers can await it; several callers updated to await setSession and re-fetch session data before refreshing the QSO table; restore full table search on callsign blur and when suggestions are cleared. Misc: small form/input fixes (club field type, default overlay option) and additional server-supplied data loaded into the contesting view (active station id, contest session, station profile). These changes add required Cabrillo fields for certain contests and make exports and session handling more reliable.
2026-03-27 00:04:21 +00:00
< option value = " " > None / Not Applicable </ option >
2023-04-14 08:00:48 +02:00
< option value = " CLASSIC " > CLASSIC </ option >
< option value = " ROOKIE " > ROOKIE </ option >
< option value = " TB-WIRES " > TB - WIRES </ option >
< option value = " YOUTH " > YOUTH </ option >
< option value = " NOVICE-TECH " > NOVICE - TECH </ option >
< option value = " YL " > YL </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
Add Cabrillo export modal & format improvements
Add a full Cabrillo export workflow and harden Cabrillo/QSO formatting. Introduces a modal UI to export contest logs (new button + modal form with fields for location, category time, operators, club, soapbox, date range and other Cabrillo categories). Controller updates pass the new fields to the export action. Cabrilloformat library extended to accept and emit LOCATION and CATEGORY-TIME, improve header field ordering and presence checks, map ADIF modes to the five Cabrillo modes (CW/PH/FM/RY/DG), fix a band label (2.4G -> 2.3G), and emit placeholders for missing received exchanges to preserve column alignment. Contesting_model: more robust date parsing with UTC fallback, ensure session QSO marker only persists when timestamp valid, and build start timestamp when LIVE mode omits start_date/start_time. Frontend JS: setSession() now returns the ajax promise so callers can await it; several callers updated to await setSession and re-fetch session data before refreshing the QSO table; restore full table search on callsign blur and when suggestions are cleared. Misc: small form/input fixes (club field type, default overlay option) and additional server-supplied data loaded into the contesting view (active station id, contest session, station profile). These changes add required Cabrillo fields for certain contests and make exports and session handling more reliable.
2026-03-27 00:04:21 +00:00
< div class = " col-md-3 control-label " for = " categorytime " > Category Time : </ div >
< select class = " form-select my-1 me-sm-2 col-md-4 w-auto " id = " categorytime " name = " categorytime " >
< option value = " " > Not specified </ option >
< option value = " 6-HOURS " > 6 - HOURS </ option >
< option value = " 8-HOURS " > 8 - HOURS </ option >
< option value = " 12-HOURS " > 12 - HOURS </ option >
< option value = " 24-HOURS " > 24 - HOURS </ option >
2023-04-13 12:30:12 +02:00
</ select >
</ div >
Add Cabrillo export modal & format improvements
Add a full Cabrillo export workflow and harden Cabrillo/QSO formatting. Introduces a modal UI to export contest logs (new button + modal form with fields for location, category time, operators, club, soapbox, date range and other Cabrillo categories). Controller updates pass the new fields to the export action. Cabrilloformat library extended to accept and emit LOCATION and CATEGORY-TIME, improve header field ordering and presence checks, map ADIF modes to the five Cabrillo modes (CW/PH/FM/RY/DG), fix a band label (2.4G -> 2.3G), and emit placeholders for missing received exchanges to preserve column alignment. Contesting_model: more robust date parsing with UTC fallback, ensure session QSO marker only persists when timestamp valid, and build start timestamp when LIVE mode omits start_date/start_time. Frontend JS: setSession() now returns the ajax promise so callers can await it; several callers updated to await setSession and re-fetch session data before refreshing the QSO table; restore full table search on callsign blur and when suggestions are cleared. Misc: small form/input fixes (club field type, default overlay option) and additional server-supplied data loaded into the contesting view (active station id, contest session, station profile). These changes add required Cabrillo fields for certain contests and make exports and session handling more reliable.
2026-03-27 00:04:21 +00:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
< div class = " col-md-3 control-label " for = " location " > Location :
< span tabindex = " 0 " data - bs - toggle = " tooltip " title = " Required for ARRL, CQ, IARU-HF, RSGB-IOTA and RDXC contests. Use your ARRL/RAC section abbreviation (e.g. CT) for US/Canada stations, DX for foreign stations, Island Name for RSGB-IOTA, or RDA Number for RDXC. " >< i class = " fas fa-info-circle " ></ i ></ span >
</ div >
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " location " type = " text " name = " location " aria - label = " location " placeholder = " e.g. CT or DX " >
</ div >
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
< div class = " col-md-3 control-label " for = " operators " >< ? php echo lang ( 'export_cabrillo_operators' ) ?> : </div>
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " operators " type = " text " name = " operators " aria - label = " operators " >
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " soapbox " >< ? php echo lang ( 'export_cabrillo_soapbox' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " soapbox " type = " text " name = " soapbox " aria - label = " soapbox " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " address " >< ? php echo lang ( 'export_cabrillo_address' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " address " type = " text " name = " address " aria - label = " address " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " addresscity " >< ? php echo lang ( 'export_cabrillo_address_city' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " addresscity " type = " text " name = " addresscity " aria - label = " addresscity " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " addressstateprovince " >< ? php echo lang ( 'export_cabrillo_address_state_province' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " addressstateprovince " type = " text " name = " addressstateprovince " aria - label = " addressstateprovince " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " addresspostalcode " >< ? php echo lang ( 'export_cabrillo_address_postalcode' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " addresspostalcode " type = " text " name = " addresspostalcode " aria - label = " addresspostalcode " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-10-30 21:35:42 +01:00
< div class = " col-md-3 control-label " for = " addresscountry " >< ? php echo lang ( 'export_cabrillo_address_country' ) ?> : </div>
2023-11-17 16:28:48 +01:00
< input class = " form-control my-1 me-sm-2 col-md-4 w-auto " id = " addresscountry " type = " text " name = " addresscountry " aria - label = " addresscountry " >
2023-04-13 12:30:12 +02:00
</ div >
2023-11-14 13:35:53 +01:00
< div hidden = " true " class = " mb-3 d-flex align-items-center row additionalinfo " >
2023-04-13 12:30:12 +02:00
< div class = " col-md-3 control-label " for = " button1id " ></ div >
2023-11-17 16:28:48 +01:00
< button id = " button1id " type = " submit " name = " button1id " class = " btn btn-sm btn-primary w-auto " > < ? php echo lang ( 'general_word_export' ) ?> </button>
2023-04-13 12:30:12 +02:00
</ div >
2023-04-12 11:58:47 +02:00
</ form >
< ? php }
else {
2023-10-30 21:35:42 +01:00
echo lang ( 'export_cabrillo_no_contests_in_log' );
2023-04-12 11:58:47 +02:00
}
?>
</ div >
</ div >
</ div >