From 3a415a558729a38794aceccbc84f99215cbf1d7f Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Wed, 12 Apr 2023 11:58:47 +0200 Subject: [PATCH] [Cabrillo export] Added contest export for cabrillo --- application/controllers/Cabrillo.php | 82 ++++++++++++++ application/libraries/Cabrilloformat.php | 63 +++++++++++ application/models/Contesting_model.php | 103 ++++++++++++++++++ application/views/cabrillo/export.php | 12 ++ application/views/cabrillo/index.php | 41 +++++++ application/views/interface_assets/header.php | 2 + assets/js/sections/cabrillo.js | 44 ++++++++ 7 files changed, 347 insertions(+) create mode 100644 application/controllers/Cabrillo.php create mode 100644 application/libraries/Cabrilloformat.php create mode 100644 application/views/cabrillo/export.php create mode 100644 application/views/cabrillo/index.php create mode 100644 assets/js/sections/cabrillo.js diff --git a/application/controllers/Cabrillo.php b/application/controllers/Cabrillo.php new file mode 100644 index 000000000..5cf61ddee --- /dev/null +++ b/application/controllers/Cabrillo.php @@ -0,0 +1,82 @@ +load->model('user_model'); + if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } + } + + public function index() + { + $data['page_title'] = "Export Cabrillo"; + + $this->load->model('Contesting_model'); + + $data['contestyears'] = $this->Contesting_model->get_logged_years(); + + $footerData = []; + $footerData['scripts'] = [ + 'assets/js/sections/cabrillo.js' + ]; + + $this->load->view('interface_assets/header', $data); + $this->load->view('cabrillo/index'); + $this->load->view('interface_assets/footer', $footerData); + } + + public function getContests() { + $this->load->model('Contesting_model'); + $result = $this->Contesting_model->get_logged_contests($this->input->post('year')); + + header('Content-Type: application/json'); + echo json_encode($result); + } + + public function getContestDates() { + $this->load->model('Contesting_model'); + $result = $this->Contesting_model->get_contest_dates($this->input->post('year'), $this->input->post('contestid')); + + header('Content-Type: application/json'); + echo json_encode($result); + } + + public function export() { + // Set memory limit to unlimited to allow heavy usage + ini_set('memory_limit', '-1'); + $this->load->model('Contesting_model'); + + $contest_id = $this->security->xss_clean($this->input->post('contestid')); + $fromto = $this->security->xss_clean($this->input->post('contestdates')); + + $fromto = explode(',', $fromto); + + $from = $fromto[0]; + $to = $fromto[1]; + + $data['qsos'] = $this->Contesting_model->export_custom($from, $to, $contest_id); + + $data['contest_id'] = $contest_id; + $data['callsign'] = ''; + $data['claimed_score'] = ''; + $data['operators'] = ''; + $data['club'] = ''; + $data['name'] = ''; + $data['address1'] = ''; + $data['address2'] = ''; + $data['address3'] = ''; + $data['soapbox'] = ''; + + $this->load->view('cabrillo/export', $data); + } +} \ No newline at end of file diff --git a/application/libraries/Cabrilloformat.php b/application/libraries/Cabrilloformat.php new file mode 100644 index 000000000..4f849c746 --- /dev/null +++ b/application/libraries/Cabrilloformat.php @@ -0,0 +1,63 @@ +COL_FREQ, 0, -3); + + if($qso->COL_MODE == "SSB") { + $mode = "PH"; + } elseif($qso->COL_MODE == "RTTY") { + $mode = "RY"; + } else { + $mode = $qso->COL_MODE; + } + + $time = substr($qso->COL_TIME_ON, 0, -3); + + $time = str_replace(":","",$time); + + if ($qso->COL_STX_STRING != "") { + + if($qso->COL_SRX_STRING != "") { + $rx_string = $qso->COL_SRX_STRING; + } else { + $rx_string = "--"; + } + + return "QSO: ".$freq." ".$mode." ".$time." ".$qso->station_callsign."\t".$qso->COL_RST_SENT." ".$qso->COL_STX." ".$qso->COL_STX_STRING."\t".$qso->COL_CALL."\t".$qso->COL_RST_RCVD." ".$qso->COL_STX." ".$rx_string."\n"; + } else { + return "QSO: ".$freq." ".$mode." ".$time." ".$qso->station_callsign."\t".$qso->COL_RST_SENT." ".$qso->COL_STX."\t".$qso->COL_CALL."\t".$qso->COL_RST_RCVD." ".$qso->COL_STX."\n"; + } + } +} \ No newline at end of file diff --git a/application/models/Contesting_model.php b/application/models/Contesting_model.php index 79918db1d..6d5c2784c 100644 --- a/application/models/Contesting_model.php +++ b/application/models/Contesting_model.php @@ -160,4 +160,107 @@ class Contesting_model extends CI_Model { return $query; } + + function export_custom($from, $to, $contest_id) { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $this->db->select(''.$this->config->item('table_name').'.*, station_profile.*'); + $this->db->from($this->config->item('table_name')); + $this->db->where($this->config->item('table_name').'.station_id', $station_id); + + // If date is set, we format the date and add it to the where-statement + if ($from != 0) { + $from = DateTime::createFromFormat('Y-m-d', $from); + $from = $from->format('Y-m-d'); + $this->db->where("date(".$this->config->item('table_name').".COL_TIME_ON) >= '".$from."'"); + } + if ($to != 0) { + $to = DateTime::createFromFormat('Y-m-d', $to); + $to = $to->format('Y-m-d'); + $this->db->where("date(".$this->config->item('table_name').".COL_TIME_ON) <= '".$to."'"); + } + + $this->db->where($this->config->item('table_name').'.COL_CONTEST_ID', $contest_id); + + $this->db->order_by($this->config->item('table_name').".COL_TIME_ON", "ASC"); + + $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); + + return $this->db->get(); + } + + function get_logged_contests2() { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $sql = "select col_contest_id, min(date(col_time_on)) mindate, max(date(col_time_on)) maxdate, year(col_time_on) year, month(col_time_on) month + from logbook l + where coalesce(COL_CONTEST_ID, '') <> '' + and station_id =" . $station_id; + + $sql .= " group by COL_CONTEST_ID , year(col_time_on), month(col_time_on) order by year(col_time_on) desc"; + + $data = $this->db->query($sql); + + return ($data->result()); + } + + function get_logged_years() { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $sql = "select distinct year(col_time_on) year + from logbook l + where coalesce(COL_CONTEST_ID, '') <> '' + and station_id =" . $station_id; + + $sql .= " order by year(col_time_on) desc"; + + $data = $this->db->query($sql); + + return ($data->result()); + } + + function get_logged_contests($year) { + $year = $this->security->xss_clean($year); + + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $sql = "select distinct col_contest_id + from logbook l + where coalesce(COL_CONTEST_ID, '') <> '' + and station_id =" . $station_id . + " and year(col_time_on) ='" . $year . "'"; + + $sql .= " order by COL_CONTEST_ID asc"; + + $data = $this->db->query($sql); + + return $data->result(); + } + + function get_contest_dates($year, $contestid) { + $year = $this->security->xss_clean($year); + $contestid = $this->security->xss_clean($contestid); + + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $sql = "select min(date(col_time_on)) mindate, max(date(col_time_on)) maxdate + from logbook l + where coalesce(COL_CONTEST_ID, '') <> '' + and station_id =" . $station_id . + " and year(col_time_on) ='" . $year . "' and col_contest_id ='" . $contestid . "'"; + + $data = $this->db->query($sql); + + return $data->result(); + } } diff --git a/application/views/cabrillo/export.php b/application/views/cabrillo/export.php new file mode 100644 index 000000000..3b6226d05 --- /dev/null +++ b/application/views/cabrillo/export.php @@ -0,0 +1,12 @@ +session->userdata('user_callsign').'-'.date('dmY-Hi').'.log"'); + +$CI =& get_instance(); +$CI->load->library('Cabrilloformat'); + +echo $CI->cabrilloformat->header($contest_id, $callsign, $claimed_score, $operators, $club, $name, $address1, $address2, $address3, $soapbox); +foreach ($qsos->result() as $row) { + echo $CI->cabrilloformat->qso($row); +} +echo $CI->cabrilloformat->footer(); \ No newline at end of file diff --git a/application/views/cabrillo/index.php b/application/views/cabrillo/index.php new file mode 100644 index 000000000..2c4b4a1f4 --- /dev/null +++ b/application/views/cabrillo/index.php @@ -0,0 +1,41 @@ +