diff --git a/application/controllers/Contesting.php b/application/controllers/Contesting.php index 62227406..f6dbeca1 100644 --- a/application/controllers/Contesting.php +++ b/application/controllers/Contesting.php @@ -9,8 +9,46 @@ if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Contesting extends CI_Controller { - public function index() + public function index() { - echo 'Functions to come'; - } + + $this->load->model('cat'); + $this->load->model('stations'); + $this->load->model('logbook_model'); + $this->load->model('user_model'); + $this->load->model('modes'); + if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } + + $data['active_station_profile'] = $this->stations->find_active(); + $data['notice'] = false; + $data['stations'] = $this->stations->all(); + $data['radios'] = $this->cat->radios(); + $data['dxcc'] = $this->logbook_model->fetchDxcc(); + $data['modes'] = $this->modes->active(); + + + $this->load->library('form_validation'); + + $this->form_validation->set_rules('start_date', 'Date', 'required'); + $this->form_validation->set_rules('start_time', 'Time', 'required'); + $this->form_validation->set_rules('callsign', 'Callsign', 'required'); + + $data['page_title'] = "Contest logging"; + + $this->load->view('interface_assets/header', $data); + $this->load->view('contesting/index'); + $this->load->view('interface_assets/footer'); + + + //setcookie("radio", $qso_data['radio'], time()+3600*24*99); + //setcookie("station_profile_id", $qso_data['station_profile_id'], time()+3600*24*99); + + //$this->session->set_userdata($qso_data); + + // If SAT name is set make it session set to sat + if($this->input->post('sat_name')) { + $this->session->set_userdata('prop_mode', 'SAT'); + } + + } } \ No newline at end of file diff --git a/application/controllers/Qso.php b/application/controllers/Qso.php index 03702344..7d24e842 100755 --- a/application/controllers/Qso.php +++ b/application/controllers/Qso.php @@ -98,6 +98,14 @@ class QSO extends CI_Controller { $this->load->view('interface_assets/footer'); } } + + /* + * This is used for contest-logging and the ajax-call + */ + public function saveqso() { + $this->load->model('logbook_model'); + $this->logbook_model->create_qso(); + } function edit() { diff --git a/application/models/Contesting_model.php b/application/models/Contesting_model.php new file mode 100644 index 00000000..22ced12a --- /dev/null +++ b/application/models/Contesting_model.php @@ -0,0 +1,9 @@ +input->post('sat_name')) { $prop_mode = "SAT"; - } + } + + // Contest exchange, need to separate between serial and other type of exchange + if($this->input->post('exchangeradio')) { + if($this->input->post('exchangeradio') == "serial") { + $srx = $this->input->post('exch_recv'); + $stx = $this->input->post('exch_sent'); + $srx_string = null; + $stx_string = null; + } else { + $srx = null; + $stx = null; + $srx_string = $this->input->post('exch_recv'); + $stx_string = $this->input->post('exch_sent'); + } + } else { + $srx_string = null; + $stx_string = null; + $srx = null; + $stx = null; + } if($this->session->userdata('user_locator')){ $locator = $this->session->userdata('user_locator'); @@ -108,8 +128,10 @@ class Logbook_model extends CI_Model { 'COL_AGE' => null, 'COL_TEN_TEN' => null, 'COL_TX_PWR' => $tx_power, - 'COL_STX' => null, - 'COL_SRX' => null, + 'COL_STX' => $stx, + 'COL_SRX' => $srx, + 'COL_STX_STRING' => $stx_string, + 'COL_SRX_STRING' => $srx_string, 'COL_NR_BURSTS' => null, 'COL_NR_PINGS' => null, 'COL_MAX_BURSTS' => null, diff --git a/application/views/contesting/index.php b/application/views/contesting/index.php new file mode 100644 index 00000000..174489dc --- /dev/null +++ b/application/views/contesting/index.php @@ -0,0 +1,193 @@ +
+

+
+ +
+
+
Logging form
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ + +
+ +
+ + +
+
+ + +
+ +
+ +
+ +
+ +
+
+
Callsign Suggestions
+ +
+
+ +
+
Logbook (for this logging session)
+ + + + + + + + + + + + + + + + + +
Date/TimeCallBandModeRST (S)RST (R)Exch SExch R
+
+
+ + + + + + diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index 96d3653e..b880b6b6 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -984,6 +984,20 @@ $(document).on('change', 'input', function(){ setRst($('.mode') .val()); }); + + + function convert_case(str) { + var lower = str.toLowerCase(); + return lower.replace(/(^| )(\w)/g, function(x) { + return x.toUpperCase(); + }); + } + + + + +uri->segment(1) == "qso" && $_GET['manual'] == 0) || $this->uri->segment(1) == "contesting") { ?> + + +uri->segment(1) == "qso" && $_GET['manual'] == 0) || $this->uri->segment(1) == "contesting") { ?> + @@ -2528,5 +2533,49 @@ function deleteQsl(id) { }); } +uri->segment(1) == "contesting") { ?> + + + + diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index 01c88fe1..83f88699 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -71,6 +71,8 @@ Post QSO + Contest logging + View QSL diff --git a/assets/js/sections/contesting.js b/assets/js/sections/contesting.js new file mode 100644 index 00000000..05c23680 --- /dev/null +++ b/assets/js/sections/contesting.js @@ -0,0 +1,131 @@ +// Callsign always has focus on load +$("#callsign").focus(); + +// Init serial sent as 1 when loading page +$("#exch_sent").val(1); + +// realtime clock +$(function($) { + var options = { + utc: true, + format: '%H:%M:%S' + } + $('.input_time').jclock(options); +}); + +$(function($) { + var options = { + utc: true, + format: '%d-%m-%Y' + } + $('.input_date').jclock(options); +}); + +// We don't want spaces to be written in callsign +$(function() { + $('#callsign').on('keypress', function(e) { + if (e.which == 32){ + return false; + } + }); +}); + +// We don't want spaces to be written in exchange +$(function() { + $('#exch_recv').on('keypress', function(e) { + if (e.which == 32){ + return false; + } + }); +}); + +// Here we capture keystrokes fo execute functions +document.onkeyup = function(e) { + // ALT-W wipe + if (e.altKey && e.which == 87) { + reset_log_fields(); + } else if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey)) { + logQso(); + } else if (e.which == 27) { + reset_log_fields(); + // Space to jump to either callsign or sent exchange + } else if (e.which == 32) { + if ($(document.activeElement).attr("id") == "callsign") { + $("#exch_recv").focus(); + return false; + } else if ($(document.activeElement).attr("id") == "exch_recv") { + $("#callsign").focus(); + return false; + } + } + +}; + +// On Key up check and suggest callsigns +$("#callsign").keyup(function() { + var call = $(this).val(); + if (call.length >= 3) { + $.get('lookup/scp/' + call.toUpperCase(), function(result) { + $('.callsign-suggestions').text(result); + highlight(call.toUpperCase()); + }); + } + else if (call.length <= 2) { + $('.callsign-suggestions').text(""); + } +}); + +function reset_log_fields() { + $('#name').val(""); + $('.callsign-suggestions').text(""); + $('#callsign').val(""); + $('#comment').val(""); + $('#exch_recv').val(""); + $("#callsign").focus(); +} + +RegExp.escape = function(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} + +function highlight(term, base) { + if (!term) return; + base = base || document.body; + var re = new RegExp("(" + RegExp.escape(term) + ")", "gi"); + var replacement = "" + term + ""; + $(".callsign-suggestions", base).contents().each( function(i, el) { + if (el.nodeType === 3) { + var data = el.data; + if (data = data.replace(re, replacement)) { + var wrapper = $("").html(data); + $(el).before(wrapper.contents()).remove(); + } + } + }); +} + +// Only set the frequency when not set by userdata/PHP. +if ($('#frequency').val() == "") +{ + $.get('qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) { + $('#frequency').val(result); + $('#frequency_rx').val(""); + }); +} + +/* on mode change */ +$('.mode').change(function() { + $.get('qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) { + $('#frequency').val(result); + $('#frequency_rx').val(""); + }); +}); + +/* Calculate Frequency */ +/* on band change */ +$('#band').change(function() { + $.get('qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function(result) { + $('#frequency').val(result); + $('#frequency_rx').val(""); + }); +}); \ No newline at end of file