diff --git a/application/controllers/Eqsl.php b/application/controllers/Eqsl.php
index 0c5b32dda..79c3a70e9 100644
--- a/application/controllers/Eqsl.php
+++ b/application/controllers/Eqsl.php
@@ -1,4 +1,4 @@
-load->helper(array('form', 'url'));
if (ENVIRONMENT == 'maintenance' && $this->session->userdata('user_id') == '') {
- echo "Maintenance Mode is active. Try again later.\n";
+ echo "Maintenance Mode is active. Try again later.\n";
redirect('user/login');
}
}
- // Default view when loading controller.
+ // Default view when loading controller.
public function index() {
$this->lang->load('qslcard');
@@ -38,469 +38,221 @@ class eqsl extends CI_Controller {
public function import() {
$this->load->model('user_model');
- if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
+ if (!$this->user_model->authorize(2)) {
+ $this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
+ redirect('dashboard');
+ }
- $this->load->model('stations');
- $data['station_profile'] = $this->stations->all_of_user();
- $active_station_id = $this->stations->find_active();
- $station_profile = $this->stations->profile($active_station_id);
- $data['active_station_info'] = $station_profile->row();
+ $this->load->model('stations');
+ $data['station_profile'] = $this->stations->all_of_user();
+ $active_station_id = $this->stations->find_active();
+ $station_profile = $this->stations->profile($active_station_id);
+ $data['active_station_info'] = $station_profile->row();
- // Check if eQSL Nicknames have been defined
- $this->load->model('eqslmethods_model');
- $eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined();
- if($eqsl_locations->num_rows() == 0) {
- $this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
+ // Check if eQSL Nicknames have been defined
+ $this->load->model('eqslmethods_model');
+ $eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined();
+ if ($eqsl_locations->num_rows() == 0) {
+ $this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
+ }
+
+ ini_set('memory_limit', '-1');
+ set_time_limit(0);
+
+ $config['upload_path'] = './uploads/';
+ $config['allowed_types'] = 'adi|ADI';
+
+ $this->load->library('upload', $config);
+
+ $eqsl_results = array();
+ if (($this->input->post('eqslimport') == 'fetch') && (!($this->config->item('disable_manual_eqsl')))) {
+
+ $this->load->library('EqslImporter');
+
+ // Get credentials for eQSL
+ $query = $this->user_model->get_by_id($this->session->userdata('user_id'));
+ $q = $query->row();
+ $eqsl_password = $q->user_eqsl_password;
+
+ // Validate that eQSL credentials are not empty
+ if ($eqsl_password == '') {
+ $this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
+ redirect('eqsl/import');
}
- ini_set('memory_limit', '-1');
- set_time_limit(0);
+ $eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date') == "") ? $this->input->post('eqsl_force_from_date') : "";
+ foreach ($eqsl_locations->result_array() as $eqsl_location) {
+ $this->eqslimporter->from_callsign_and_QTH(
+ $eqsl_location['station_callsign'],
+ $eqsl_location['eqslqthnickname'],
+ $config['upload_path'],
+ $eqsl_location['station_id']
+ );
- $config['upload_path'] = './uploads/';
- $config['allowed_types'] = 'adi|ADI';
+ $eqsl_results[] = $this->eqslimporter->fetch($eqsl_password, $eqsl_force_from_date);
+ }
+ } elseif (($this->input->post('eqslimport') == 'upload')) {
+ $station_id4upload = $this->input->post('station_profile');
+ if ($this->stations->check_station_is_accessible($station_id4upload)) {
+ $station_callsign = $this->stations->profile($station_id4upload)->row()->station_callsign;
+ if (!$this->upload->do_upload()) {
+ $data['page_title'] = "eQSL Import";
+ $data['error'] = $this->upload->display_errors();
- $this->load->library('upload', $config);
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('eqsl/import');
+ $this->load->view('interface_assets/footer');
- $eqsl_results = array();
- if (($this->input->post('eqslimport') == 'fetch') && (!($this->config->item('disable_manual_eqsl')))) {
- $this->load->library('EqslImporter');
-
- // Get credentials for eQSL
- $query = $this->user_model->get_by_id($this->session->userdata('user_id'));
- $q = $query->row();
- $eqsl_password = $q->user_eqsl_password;
-
- // Validate that eQSL credentials are not empty
- if ($eqsl_password == '')
- {
- $this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
- redirect('eqsl/import');
- }
-
- $eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date')=="")?$this->input->post('eqsl_force_from_date'):"";
- foreach ($eqsl_locations->result_array() as $eqsl_location) {
- $this->eqslimporter->from_callsign_and_QTH(
- $eqsl_location['station_callsign'],
- $eqsl_location['eqslqthnickname'],
- $config['upload_path'],
- $eqsl_location['station_id']
- );
-
- $eqsl_results[] = $this->eqslimporter->fetch($eqsl_password, $eqsl_force_from_date);
- }
- } elseif (($this->input->post('eqslimport') == 'upload')) {
- $station_id4upload=$this->input->post('station_profile');
- if ($this->stations->check_station_is_accessible($station_id4upload)) {
- $station_callsign=$this->stations->profile($station_id4upload)->row()->station_callsign;
- if ( ! $this->upload->do_upload())
- {
- $data['page_title'] = "eQSL Import";
- $data['error'] = $this->upload->display_errors();
-
- $this->load->view('interface_assets/header', $data);
- $this->load->view('eqsl/import');
- $this->load->view('interface_assets/footer');
-
- return;
- } else {
- $data = array('upload_data' => $this->upload->data());
-
- $this->load->library('EqslImporter');
- $this->eqslimporter->from_file('./uploads/'.$data['upload_data']['file_name'], $station_callsign, $station_id4upload);
-
- $eqsl_results[] = $this->eqslimporter->import();
- }
+ return;
} else {
- log_message('error',$station_id4upload." is not valid for user!");
+ $data = array('upload_data' => $this->upload->data());
+
+ $this->load->library('EqslImporter');
+ $this->eqslimporter->from_file('./uploads/' . $data['upload_data']['file_name'], $station_callsign, $station_id4upload);
+
+ $eqsl_results[] = $this->eqslimporter->import();
}
} else {
- $data['page_title'] = "eQSL Import";
-
- $this->load->view('interface_assets/header', $data);
- $this->load->view('eqsl/import');
- $this->load->view('interface_assets/footer');
-
- return;
+ log_message('error', $station_id4upload . " is not valid for user!");
}
-
- $data['eqsl_results'] = $eqsl_results;
- $data['page_title'] = "eQSL Import Information";
+ } else {
+ $data['page_title'] = "eQSL Import";
$this->load->view('interface_assets/header', $data);
- $this->load->view('eqsl/analysis');
+ $this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
- } // end function
+
+ return;
+ }
+
+ $data['eqsl_results'] = $eqsl_results;
+ $data['page_title'] = "eQSL Import Information";
+
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('eqsl/analysis');
+ $this->load->view('interface_assets/footer');
+ }
public function export() {
$this->load->model('user_model');
- if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
+ if (!$this->user_model->authorize(2)) {
+ $this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
+ redirect('dashboard');
+ }
- // Check if eQSL Nicknames have been defined
- $this->load->model('stations');
- if($this->stations->are_eqsl_nicks_defined() == 0) {
- $this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
- }
+ // Check if eQSL Nicknames have been defined
+ $this->load->model('stations');
+ if ($this->stations->are_eqsl_nicks_defined() == 0) {
+ $this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
+ }
- ini_set('memory_limit', '-1');
- set_time_limit(0);
- $this->load->model('eqslmethods_model');
-
- $data['page_title'] = "eQSL QSO Upload";
- $custom_date_format = $this->session->userdata('user_date_format');
-
- if ((!($this->config->item('disable_manual_eqsl'))) && ($this->input->post('eqslexport') == "export")) {
- // Get credentials for eQSL
- $query = $this->user_model->get_by_id($this->session->userdata('user_id'));
- $q = $query->row();
- $data['user_eqsl_name'] = $q->user_eqsl_name;
- $data['user_eqsl_password'] = $q->user_eqsl_password;
-
- // Validate that eQSL credentials are not empty
- if ($data['user_eqsl_name'] == '' || $data['user_eqsl_password'] == '')
- {
- $this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!'); redirect('eqsl/import');
- }
-
- $rows = '';
- // Grab the list of QSOs to send information about
- // perform an HTTP get on each one, and grab the status back
- $qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
-
- foreach ($qslsnotsent->result_array() as $qsl) {
- $rows .= "
";
- // eQSL username changes for linked account.
- // i.e. when operating /P it must be callsign/p
- // the password, however, is always the same as the main account
- $data['user_eqsl_name'] = $qsl['station_callsign'];
- $adif = $this->generateAdif($qsl, $data);
-
- $status = $this->uploadQso($adif, $qsl);
-
- $timestamp = strtotime($qsl['COL_TIME_ON']);
- $rows .= "| ".date($custom_date_format, $timestamp)." | ";
- $rows .= "".date('H:i', $timestamp)." | ";
- $rows .= "".str_replace("0","Ø",$qsl['COL_CALL'])." | ";
- $rows .= "".$qsl['COL_MODE']." | ";
- if(isset($qsl['COL_SUBMODE'])) {
- $rows .= "".$qsl['COL_SUBMODE']." | ";
- } else {
- $rows .= " | ";
- }
- $rows .= "".$qsl['COL_BAND']." | ";
- $rows .= "".$status." | ";
- }
- $rows .= "
";
- $data['eqsl_table'] = $this->generateResultTable($custom_date_format, $rows);
- } else {
- $qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
- if ($qslsnotsent->num_rows() > 0) {
- $data['eqsl_table'] = $this->writeEqslNotSent($qslsnotsent->result_array(), $custom_date_format);
- }
- }
-
- $this->load->view('interface_assets/header', $data);
- $this->load->view('eqsl/export');
- $this->load->view('interface_assets/footer');
- }
-
- function uploadQso($adif, $qsl) {
+ ini_set('memory_limit', '-1');
+ set_time_limit(0);
$this->load->model('eqslmethods_model');
- $status = "";
-
- // begin script
- $ch = curl_init();
- // basic curl options for all requests
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_HEADER, 1);
-
- // use the URL we built
- curl_setopt($ch, CURLOPT_URL, $adif);
-
- $result = curl_exec($ch);
- $chi = curl_getinfo($ch);
- curl_close($ch);
+ $data['page_title'] = "eQSL QSO Upload";
+ $custom_date_format = $this->session->userdata('user_date_format');
- /* Time for some error handling
- Things we might get back
- Result: 0 out of 0 records added -> eQSL didn't understand the format
- Result: 1 out of 1 records added -> Fantastic
- Error: No match on eQSL_User/eQSL_Pswd -> eQSL credentials probably wrong
- Warning: Y=2013 M=08 D=11 F6ARS 15M JT65 Bad record: Duplicate
- Result: 0 out of 1 records added -> Dupe, OM!
- */
-
- if ($chi['http_code'] == "200") {
- if (stristr($result, "Result: 1 out of 1 records added")) {
- $status = "Sent";
- $this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
- } else {
- if (stristr($result, "Error: No match on eQSL_User/eQSL_Pswd")) {
- $this->session->set_flashdata('warning', 'Your eQSL username and/or password is incorrect.'); redirect('eqsl/export');
- } else {
- if (stristr($result, "Result: 0 out of 0 records added")) {
- $this->session->set_flashdata('warning', 'Something went wrong with eQSL.cc!'); redirect('eqsl/export');
- } else {
- if (stristr($result, "Bad record: Duplicate")) {
- $status = "Duplicate";
-
- # Mark the QSL as sent if this is a dupe.
- $this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
- }
- }
- }
+ if ((!($this->config->item('disable_manual_eqsl'))) && ($this->input->post('eqslexport') == "export")) {
+ // Get credentials for eQSL
+ $query = $this->user_model->get_by_id($this->session->userdata('user_id'));
+ $q = $query->row();
+ $data['user_eqsl_name'] = $q->user_eqsl_name;
+ $data['user_eqsl_password'] = $q->user_eqsl_password;
+
+ // Validate that eQSL credentials are not empty
+ if ($data['user_eqsl_name'] == '' || $data['user_eqsl_password'] == '') {
+ $this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
+ redirect('eqsl/import');
}
- } else {
- if ($chi['http_code'] == "500") {
- $this->session->set_flashdata('warning', 'eQSL.cc is experiencing issues. Please try exporting QSOs later.'); redirect('eqsl/export');
- } else {
- if ($chi['http_code'] == "400") {
- $this->session->set_flashdata('warning', 'There was an error in one of the QSOs. You might want to manually upload them.'); redirect('eqsl/export');
- $status = "Error";
+
+ $rows = '';
+ // Grab the list of QSOs to send information about
+ // perform an HTTP get on each one, and grab the status back
+ $qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
+
+ foreach ($qslsnotsent->result_array() as $qsl) {
+ $rows .= "";
+ // eQSL username changes for linked account.
+ // i.e. when operating /P it must be callsign/p
+ // the password, however, is always the same as the main account
+ $data['user_eqsl_name'] = $qsl['station_callsign'];
+ $adif = $this->eqslmethods_model->generateAdif($qsl, $data);
+
+ $status = $this->eqslmethods_model->uploadQso($adif, $qsl);
+
+ $timestamp = strtotime($qsl['COL_TIME_ON']);
+ $rows .= "| " . date($custom_date_format, $timestamp) . " | ";
+ $rows .= "" . date('H:i', $timestamp) . " | ";
+ $rows .= "" . str_replace("0", "Ø", $qsl['COL_CALL']) . " | ";
+ $rows .= "" . $qsl['COL_MODE'] . " | ";
+ if (isset($qsl['COL_SUBMODE'])) {
+ $rows .= "" . $qsl['COL_SUBMODE'] . " | ";
} else {
- if ($chi['http_code'] == "404") {
- $this->session->set_flashdata('warning', 'It seems that the eQSL site has changed. Please open up an issue on GitHub.'); redirect('eqsl/export');
- }
+ $rows .= " | ";
}
+ $rows .= "" . $qsl['COL_BAND'] . " | ";
+ $rows .= "" . $status . " | ";
+ }
+ $rows .= "
";
+ $data['eqsl_table'] = $this->generateResultTable($custom_date_format, $rows);
+ } else {
+ $qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
+ if ($qslsnotsent->num_rows() > 0) {
+ $data['eqsl_table'] = $this->writeEqslNotSent($qslsnotsent->result_array(), $custom_date_format);
}
}
- log_message('debug', $result);
- return $status;
+
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('eqsl/export');
+ $this->load->view('interface_assets/footer');
}
function generateResultTable($custom_date_format, $rows) {
$table = '';
- $table .= "";
- $table .= "| Date | ";
- $table .= "Time | ";
- $table .= "Call | ";
- $table .= "Mode | ";
- $table .= "Submode | ";
- $table .= "Band | ";
- $table .= "Status | ";
- $table .= "
";
-
+ $table .= "";
+ $table .= "| Date | ";
+ $table .= "Time | ";
+ $table .= "Call | ";
+ $table .= "Mode | ";
+ $table .= "Submode | ";
+ $table .= "Band | ";
+ $table .= "Status | ";
+ $table .= "
";
+
$table .= $rows;
$table .= "
";
return $table;
}
- // Build out the ADIF info string according to specs https://eqsl.cc/qslcard/ADIFContentSpecs.cfm
- function generateAdif($qsl, $data) {
- $COL_QSO_DATE = date('Ymd',strtotime($qsl['COL_TIME_ON']));
- $COL_TIME_ON = date('Hi',strtotime($qsl['COL_TIME_ON']));
-
- # Set up the single record file
- $adif = "https://www.eqsl.cc/qslcard/importADIF.cfm?";
- $adif .= "ADIFData=WavelogUpload%20";
-
- /* Handy reference of escaping chars
- "<" = 3C
- ">" = 3E
- ":" = 3A
- " " = 20
- "_" = 5F
- "-" = 2D
- "." = 2E
- "&" = 26
- */
-
- $adif .= "%3C";
- $adif .= "ADIF%5FVER";
- $adif .= "%3A";
- $adif .= "4";
- $adif .= "%3E";
- $adif .= "1%2E00 ";
- $adif .= "%20";
-
- $adif .= "%3C";
- $adif .= "EQSL%5FUSER";
- $adif .= "%3A";
- $adif .= strlen($data['user_eqsl_name']);
- $adif .= "%3E";
- $adif .= $data['user_eqsl_name'];
- $adif .= "%20";
-
- $adif .= "%3C";
- $adif .= "EQSL%5FPSWD";
- $adif .= "%3A";
- $adif .= strlen($data['user_eqsl_password']);
- $adif .= "%3E";
- $adif .= urlencode($data['user_eqsl_password']);
- $adif .= "%20";
-
- $adif .= "%3C";
- $adif .= "EOH";
- $adif .= "%3E";
-
- # Lay out the required fields
- $adif .= "%3C";
- $adif .= "QSO%5FDATE";
- $adif .= "%3A";
- $adif .= "8";
- $adif .= "%3E";
- $adif .= $COL_QSO_DATE;
- $adif .= "%20";
-
- $adif .= "%3C";
- $adif .= "TIME%5FON";
- $adif .= "%3A";
- $adif .= "4";
- $adif .= "%3E";
- $adif .= $COL_TIME_ON;
- $adif .= "%20";
-
- $adif .= "%3C";
- $adif .= "CALL";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_CALL']);
- $adif .= "%3E";
- $adif .= $qsl['COL_CALL'];
- $adif .= "%20";
-
- $adif .= "%3C";
- $adif .= "MODE";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_MODE']);
- $adif .= "%3E";
- $adif .= $qsl['COL_MODE'];
- $adif .= "%20";
-
- if(isset($qsl['COL_SUBMODE'])) {
- $adif .= "%3C";
- $adif .= "SUBMODE";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_SUBMODE']);
- $adif .= "%3E";
- $adif .= $qsl['COL_SUBMODE'];
- $adif .= "%20";
- }
-
- $adif .= "%3C";
- $adif .= "BAND";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_BAND']);
- $adif .= "%3E";
- $adif .= $qsl['COL_BAND'];
- $adif .= "%20";
-
- # End all the required fields
-
- // adding RST_Sent
- $adif .= "%3C";
- $adif .= "RST%5FSENT";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_RST_SENT']);
- $adif .= "%3E";
- $adif .= $qsl['COL_RST_SENT'];
- $adif .= "%20";
-
- // adding prop mode if it isn't blank
- if ($qsl['COL_PROP_MODE']){
- $adif .= "%3C";
- $adif .= "PROP%5FMODE";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_PROP_MODE']);
- $adif .= "%3E";
- $adif .= $qsl['COL_PROP_MODE'];
- $adif .= "%20";
- }
-
- // adding sat name if it isn't blank
- if ($qsl['COL_SAT_NAME'] != ''){
- $adif .= "%3C";
- $adif .= "SAT%5FNAME";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_SAT_NAME']);
- $adif .= "%3E";
- $adif .= str_replace('-', '%2D', $qsl['COL_SAT_NAME']);
- $adif .= "%20";
- }
-
- // adding sat mode if it isn't blank
- if ($qsl['COL_SAT_MODE'] != ''){
- $adif .= "%3C";
- $adif .= "SAT%5FMODE";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_SAT_MODE']);
- $adif .= "%3E";
- $adif .= $qsl['COL_SAT_MODE'];
- $adif .= "%20";
- }
-
- // adding qslmsg if it isn't blank
- if ($qsl['COL_QSLMSG'] != ''){
- $qsl['COL_QSLMSG'] = str_replace(array(chr(10),chr(13)),array(' ',' '),$qsl['COL_QSLMSG']);
- $adif .= "%3C";
- $adif .= "QSLMSG";
- $adif .= "%3A";
- $adif .= strlen($qsl['COL_QSLMSG']);
- $adif .= "%3E";
- $adif .= str_replace('&','%26',$qsl['COL_QSLMSG']);
- $adif .= "%20";
- }
-
- if ($qsl['eqslqthnickname'] != ''){
- $adif .= "%3C";
- $adif .= "APP%5FEQSL%5FQTH%5FNICKNAME";
- $adif .= "%3A";
- $adif .= strlen($qsl['eqslqthnickname']);
- $adif .= "%3E";
- $adif .= $qsl['eqslqthnickname'];
- $adif .= "%20";
- }
-
- // adding sat mode if it isn't blank
- if ($qsl['station_gridsquare'] != ''){
- $adif .= "%3C";
- $adif .= "MY%5FGRIDSQUARE";
- $adif .= "%3A";
- $adif .= strlen($qsl['station_gridsquare']);
- $adif .= "%3E";
- $adif .= $qsl['station_gridsquare'];
- $adif .= "%20";
- }
-
- # Tie a bow on it!
- $adif .= "%3C";
- $adif .= "EOR";
- $adif .= "%3E";
-
- # Make sure we don't have any spaces
- $adif = str_replace(" ", '%20', $adif);
-
- return $adif;
- }
-
function writeEqslNotSent($qslsnotsent, $custom_date_format) {
$table = '';
- $table .= "";
- $table .= "| Date | ";
- $table .= "Time | ";
- $table .= "Call | ";
- $table .= "Mode | ";
- $table .= "Submode | ";
- $table .= "Band | ";
- $table .= "eQSL QTH Nickname | ";
- $table .= "
";
-
- foreach ($qslsnotsent as $qsl)
- {
+ $table .= "";
+ $table .= "| Date | ";
+ $table .= "Time | ";
+ $table .= "Call | ";
+ $table .= "Mode | ";
+ $table .= "Submode | ";
+ $table .= "Band | ";
+ $table .= "eQSL QTH Nickname | ";
+ $table .= "
";
+
+ foreach ($qslsnotsent as $qsl) {
$table .= "";
- $timestamp = strtotime($qsl['COL_TIME_ON']);
- $table .= "| ".date($custom_date_format, $timestamp)." | ";
- $table .= "".date('H:i', $timestamp)." | ";
- $table .= "" . str_replace("0","Ø",strtoupper($qsl['COL_CALL'])) . " | ";
- $table .= "".$qsl['COL_MODE']." | ";
-
- if(isset($qsl['COL_SUBMODE'])) {
- $table .= "".$qsl['COL_SUBMODE']." | ";
- } else {
- $table .= " | ";
- }
- $table .= "".$qsl['COL_BAND']." | ";
- $table .= "".$qsl['eqslqthnickname']." | ";
+ $timestamp = strtotime($qsl['COL_TIME_ON']);
+ $table .= "" . date($custom_date_format, $timestamp) . " | ";
+ $table .= "" . date('H:i', $timestamp) . " | ";
+ $table .= "" . str_replace("0", "Ø", strtoupper($qsl['COL_CALL'])) . " | ";
+ $table .= "" . $qsl['COL_MODE'] . " | ";
+
+ if (isset($qsl['COL_SUBMODE'])) {
+ $table .= "" . $qsl['COL_SUBMODE'] . " | ";
+ } else {
+ $table .= " | ";
+ }
+ $table .= "" . $qsl['COL_BAND'] . " | ";
+ $table .= "" . $qsl['eqslqthnickname'] . " | ";
$table .= "
";
}
$table .= "
";
@@ -512,7 +264,7 @@ class eqsl extends CI_Controller {
$this->load->library('electronicqsl');
$this->load->model('Eqsl_images');
- if($this->Eqsl_images->get_image($id) == "No Image") {
+ if ($this->Eqsl_images->get_image($id) == "No Image") {
$this->load->model('logbook_model');
$this->load->model('user_model');
$qso_query = $this->logbook_model->get_qso($id);
@@ -533,38 +285,36 @@ class eqsl extends CI_Controller {
$password = $q->user_eqsl_password;
$image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute);
- $file = file_get_contents($image_url, true);
+ $file = file_get_contents($image_url, true); // TODO use curl instead
$dom = new domDocument;
$dom->loadHTML($file);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
- if(!isset($images) || count($images) == 0) {
+ if (!isset($images) || count($images) == 0) {
echo "Rate Limited";
exit;
}
- foreach ($images as $image)
- {
+ foreach ($images as $image) {
header('Content-Type: image/jpg');
- $content = file_get_contents("https://www.eqsl.cc".$image->getAttribute('src'));
+ $content = file_get_contents("https://www.eqsl.cc" . $image->getAttribute('src'));
if ($content === false) {
echo "No response";
exit;
}
echo $content;
- $filename = uniqid().'.jpg';
- if (file_put_contents($this->Eqsl_images->get_imagePath('p') .'/'. $filename, $content) !== false) {
+ $filename = uniqid() . '.jpg';
+ if (file_put_contents($this->Eqsl_images->get_imagePath('p') . '/' . $filename, $content) !== false) {
$this->Eqsl_images->save_image($id, $filename);
}
}
} else {
header('Content-Type: image/jpg');
- $image_url = base_url($this->Eqsl_images->get_imagePath() .'/'. $this->Eqsl_images->get_image($id));
+ $image_url = base_url($this->Eqsl_images->get_imagePath() . '/' . $this->Eqsl_images->get_image($id));
header('Location: ' . $image_url);
}
-
}
function bulk_download_image($id) {
@@ -603,33 +353,34 @@ class eqsl extends CI_Controller {
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
- if(!isset($images) || count($images) == 0) {
+ if (!isset($images) || count($images) == 0) {
$error = "Rate Limited";
return $error;
}
- foreach ($images as $image)
- {
- $content = file_get_contents("https://www.eqsl.cc".$image->getAttribute('src'));
+ foreach ($images as $image) {
+ $content = file_get_contents("https://www.eqsl.cc" . $image->getAttribute('src'));
if ($content === false) {
$error = "No response";
return $error;
}
- $filename = uniqid().'.jpg';
- if($this->Eqsl_images->get_image($id) == "No Image") {
- if (file_put_contents($this->Eqsl_images->get_imagePath('p') .'/'. $filename, $content) !== false) {
+ $filename = uniqid() . '.jpg';
+ if ($this->Eqsl_images->get_image($id) == "No Image") {
+ if (file_put_contents($this->Eqsl_images->get_imagePath('p') . '/' . $filename, $content) !== false) {
$this->Eqsl_images->save_image($id, $filename);
}
}
}
return $error;
-
}
public function tools() {
// Check logged in
$this->load->model('user_model');
- if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
+ if (!$this->user_model->authorize(2)) {
+ $this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
+ redirect('dashboard');
+ }
$data['page_title'] = "eQSL Tools";
@@ -642,8 +393,11 @@ class eqsl extends CI_Controller {
public function download() {
// Check logged in
$this->load->model('user_model');
- if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
- $errors=0;
+ if (!$this->user_model->authorize(2)) {
+ $this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
+ redirect('dashboard');
+ }
+ $errors = 0;
if ($this->input->post('eqsldownload') == 'download') {
$i = 0;
@@ -675,12 +429,13 @@ class eqsl extends CI_Controller {
}
}
$data['eqsl_results'] = $eqsl_results;
- $data['eqsl_stats'] = "Successfully downloaded: ".$i." / Errors: ".count($eqsl_results);
+ $data['eqsl_stats'] = "Successfully downloaded: " . $i . " / Errors: " . count($eqsl_results);
$data['page_title'] = "eQSL Download Information";
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/result');
$this->load->view('interface_assets/footer');
+
} else {
$data['page_title'] = "eQSL Card Image Download";
@@ -698,8 +453,11 @@ class eqsl extends CI_Controller {
public function mark_all_sent() {
// Check logged in
$this->load->model('user_model');
- if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
-
+ if (!$this->user_model->authorize(2)) {
+ $this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
+ redirect('dashboard');
+ }
+
// mark all eqsls as sent
$this->load->model('eqslmethods_model');
$this->eqslmethods_model->mark_all_as_sent();
@@ -713,57 +471,11 @@ class eqsl extends CI_Controller {
* Used for CRON job
*/
public function sync() {
-
// set the last run in cron table for the correct cron id
$this->load->model('cron_model');
- $this->cron_model->set_last_run($this->router->class.'_'.$this->router->method);
+ $this->cron_model->set_last_run($this->router->class . '_' . $this->router->method);
- ini_set('memory_limit', '-1');
- set_time_limit(0);
$this->load->model('eqslmethods_model');
-
- $users = $this->eqslmethods_model->get_eqsl_users();
-
- foreach ($users as $user) {
- $this->uploadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
- $this->downloadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
- }
+ $this->eqslmethods_model->sync();
}
-
- public function downloadUser($userid, $username, $password) {
- $this->load->library('EqslImporter');
- $this->load->model('eqslmethods_model');
-
- $config['upload_path'] = './uploads/';
- $eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined($userid);
-
- $eqsl_results = array();
-
- foreach ($eqsl_locations->result_array() as $eqsl_location) {
- $this->eqslimporter->from_callsign_and_QTH(
- $eqsl_location['station_callsign'],
- $eqsl_location['eqslqthnickname'],
- $config['upload_path'],
- $eqsl_location['station_id']
- );
-
- $eqsl_results[] = $this->eqslimporter->fetch($password);
- }
- }
-
- function uploadUser($userid, $username, $password) {
- $data['user_eqsl_name'] = $this->security->xss_clean($username);
- $data['user_eqsl_password'] = $this->security->xss_clean($password);
- $clean_userid = $this->security->xss_clean($userid);
-
- $qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent($clean_userid);
-
- foreach ($qslsnotsent->result_array() as $qsl) {
- $data['user_eqsl_name'] = $qsl['station_callsign'];
- $adif = $this->generateAdif($qsl, $data);
-
- $status = $this->uploadQso($adif, $qsl);
- }
- }
-
} // end class
diff --git a/application/models/Eqslmethods_model.php b/application/models/Eqslmethods_model.php
index 506710f2e..a9fc2dc82 100644
--- a/application/models/Eqslmethods_model.php
+++ b/application/models/Eqslmethods_model.php
@@ -2,32 +2,337 @@
class Eqslmethods_model extends CI_Model {
- function mark_all_as_sent() {
- $data = array(
- 'COL_EQSL_QSL_SENT' => 'Y',
- 'COL_EQSL_QSLSDATE' => date('Y-m-d')." 00:00:00",
- );
+ function sync() {
- $userid=$this->session->userdata('user_id');
- if ($userid ?? '' != '') {
- $stations = $this->get_all_user_locations($userid);
- $logbooks_locations_array = array();
- foreach ($stations->result() as $row) {
- array_push($logbooks_locations_array, $row->station_id);
- }
- if (count($logbooks_locations_array)>0) {
- $this->db->where_in('station_id', $logbooks_locations_array);
- $this->db->group_start();
- $this->db->where('COL_EQSL_QSL_SENT', 'N');
- $this->db->or_where('COL_EQSL_QSL_SENT', 'R');
- $this->db->or_where('COL_EQSL_QSL_SENT', 'Q');
- $this->db->or_where('COL_EQSL_QSL_SENT', null);
- $this->db->group_end();
+ ini_set('memory_limit', '-1');
+ set_time_limit(0);
- $this->db->update($this->config->item('table_name'), $data);
- }
- }
- }
+ $users = $this->get_eqsl_users();
+
+ foreach ($users as $user) {
+ $this->uploadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
+ $this->downloadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
+ }
+ }
+
+ function downloadUser($userid, $username, $password) {
+ $this->load->library('EqslImporter');
+
+ $config['upload_path'] = './uploads/';
+ $eqsl_locations = $this->all_of_user_with_eqsl_nick_defined($userid);
+
+ $eqsl_results = array();
+
+ foreach ($eqsl_locations->result_array() as $eqsl_location) {
+ $this->eqslimporter->from_callsign_and_QTH(
+ $eqsl_location['station_callsign'],
+ $eqsl_location['eqslqthnickname'],
+ $config['upload_path'],
+ $eqsl_location['station_id']
+ );
+
+ $eqsl_results[] = $this->eqslimporter->fetch($password); // Hint: for debugging add YYYYMMDD as second argument to force from older date
+ }
+ }
+
+ function uploadUser($userid, $username, $password) {
+ $data['user_eqsl_name'] = $this->security->xss_clean($username);
+ $data['user_eqsl_password'] = $this->security->xss_clean($password);
+ $clean_userid = $this->security->xss_clean($userid);
+
+ $qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent($clean_userid);
+
+ foreach ($qslsnotsent->result_array() as $qsl) {
+ $data['user_eqsl_name'] = $qsl['station_callsign'];
+ $adif = $this->generateAdif($qsl, $data);
+
+ $status = $this->uploadQso($adif, $qsl);
+ }
+ }
+
+ // Build out the ADIF info string according to specs https://eqsl.cc/qslcard/ADIFContentSpecs.cfm
+ function generateAdif($qsl, $data) {
+ $COL_QSO_DATE = date('Ymd', strtotime($qsl['COL_TIME_ON']));
+ $COL_TIME_ON = date('Hi', strtotime($qsl['COL_TIME_ON']));
+
+ # Set up the single record file
+ $adif = "https://www.eqsl.cc/qslcard/importADIF.cfm?";
+ $adif .= "ADIFData=WavelogUpload%20";
+
+ /* Handy reference of escaping chars
+ "<" = 3C
+ ">" = 3E
+ ":" = 3A
+ " " = 20
+ "_" = 5F
+ "-" = 2D
+ "." = 2E
+ "&" = 26
+ */
+
+ $adif .= "%3C";
+ $adif .= "ADIF%5FVER";
+ $adif .= "%3A";
+ $adif .= "4";
+ $adif .= "%3E";
+ $adif .= "1%2E00 ";
+ $adif .= "%20";
+
+ $adif .= "%3C";
+ $adif .= "EQSL%5FUSER";
+ $adif .= "%3A";
+ $adif .= strlen($data['user_eqsl_name']);
+ $adif .= "%3E";
+ $adif .= $data['user_eqsl_name'];
+ $adif .= "%20";
+
+ $adif .= "%3C";
+ $adif .= "EQSL%5FPSWD";
+ $adif .= "%3A";
+ $adif .= strlen($data['user_eqsl_password']);
+ $adif .= "%3E";
+ $adif .= urlencode($data['user_eqsl_password']);
+ $adif .= "%20";
+
+ $adif .= "%3C";
+ $adif .= "EOH";
+ $adif .= "%3E";
+
+ # Lay out the required fields
+ $adif .= "%3C";
+ $adif .= "QSO%5FDATE";
+ $adif .= "%3A";
+ $adif .= "8";
+ $adif .= "%3E";
+ $adif .= $COL_QSO_DATE;
+ $adif .= "%20";
+
+ $adif .= "%3C";
+ $adif .= "TIME%5FON";
+ $adif .= "%3A";
+ $adif .= "4";
+ $adif .= "%3E";
+ $adif .= $COL_TIME_ON;
+ $adif .= "%20";
+
+ $adif .= "%3C";
+ $adif .= "CALL";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_CALL']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_CALL'];
+ $adif .= "%20";
+
+ $adif .= "%3C";
+ $adif .= "MODE";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_MODE']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_MODE'];
+ $adif .= "%20";
+
+ if (isset($qsl['COL_SUBMODE'])) {
+ $adif .= "%3C";
+ $adif .= "SUBMODE";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_SUBMODE']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_SUBMODE'];
+ $adif .= "%20";
+ }
+
+ $adif .= "%3C";
+ $adif .= "BAND";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_BAND']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_BAND'];
+ $adif .= "%20";
+
+ # End all the required fields
+
+ // adding RST_Sent
+ $adif .= "%3C";
+ $adif .= "RST%5FSENT";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_RST_SENT']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_RST_SENT'];
+ $adif .= "%20";
+
+ // adding prop mode if it isn't blank
+ if ($qsl['COL_PROP_MODE']) {
+ $adif .= "%3C";
+ $adif .= "PROP%5FMODE";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_PROP_MODE']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_PROP_MODE'];
+ $adif .= "%20";
+ }
+
+ // adding sat name if it isn't blank
+ if ($qsl['COL_SAT_NAME'] != '') {
+ $adif .= "%3C";
+ $adif .= "SAT%5FNAME";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_SAT_NAME']);
+ $adif .= "%3E";
+ $adif .= str_replace('-', '%2D', $qsl['COL_SAT_NAME']);
+ $adif .= "%20";
+ }
+
+ // adding sat mode if it isn't blank
+ if ($qsl['COL_SAT_MODE'] != '') {
+ $adif .= "%3C";
+ $adif .= "SAT%5FMODE";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_SAT_MODE']);
+ $adif .= "%3E";
+ $adif .= $qsl['COL_SAT_MODE'];
+ $adif .= "%20";
+ }
+
+ // adding qslmsg if it isn't blank
+ if ($qsl['COL_QSLMSG'] != '') {
+ $qsl['COL_QSLMSG'] = str_replace(array(chr(10), chr(13)), array(' ', ' '), $qsl['COL_QSLMSG']);
+ $adif .= "%3C";
+ $adif .= "QSLMSG";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['COL_QSLMSG']);
+ $adif .= "%3E";
+ $adif .= str_replace('&', '%26', $qsl['COL_QSLMSG']);
+ $adif .= "%20";
+ }
+
+ if ($qsl['eqslqthnickname'] != '') {
+ $adif .= "%3C";
+ $adif .= "APP%5FEQSL%5FQTH%5FNICKNAME";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['eqslqthnickname']);
+ $adif .= "%3E";
+ $adif .= $qsl['eqslqthnickname'];
+ $adif .= "%20";
+ }
+
+ // adding sat mode if it isn't blank
+ if ($qsl['station_gridsquare'] != '') {
+ $adif .= "%3C";
+ $adif .= "MY%5FGRIDSQUARE";
+ $adif .= "%3A";
+ $adif .= strlen($qsl['station_gridsquare']);
+ $adif .= "%3E";
+ $adif .= $qsl['station_gridsquare'];
+ $adif .= "%20";
+ }
+
+ # Tie a bow on it!
+ $adif .= "%3C";
+ $adif .= "EOR";
+ $adif .= "%3E";
+
+ # Make sure we don't have any spaces
+ $adif = str_replace(" ", '%20', $adif);
+
+ return $adif;
+ }
+
+ function uploadQso($adif, $qsl) {
+ $this->load->model('eqslmethods_model');
+ $status = "";
+
+ // begin script
+ $ch = curl_init();
+
+ // basic curl options for all requests
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_HEADER, 1);
+
+ // use the URL we built
+ curl_setopt($ch, CURLOPT_URL, $adif);
+
+ $result = curl_exec($ch);
+ $chi = curl_getinfo($ch);
+ curl_close($ch);
+
+ /* Time for some error handling
+ Things we might get back
+ Result: 0 out of 0 records added -> eQSL didn't understand the format
+ Result: 1 out of 1 records added -> Fantastic
+ Error: No match on eQSL_User/eQSL_Pswd -> eQSL credentials probably wrong
+ Warning: Y=2013 M=08 D=11 F6ARS 15M JT65 Bad record: Duplicate
+ Result: 0 out of 1 records added -> Dupe, OM!
+ */
+
+ if ($chi['http_code'] == "200") {
+ if (stristr($result, "Result: 1 out of 1 records added")) {
+ $status = "Sent";
+ $this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
+ } else {
+ if (stristr($result, "Error: No match on eQSL_User/eQSL_Pswd")) {
+ $this->session->set_flashdata('warning', 'Your eQSL username and/or password is incorrect.');
+ redirect('eqsl/export');
+ } else {
+ if (stristr($result, "Result: 0 out of 0 records added")) {
+ $this->session->set_flashdata('warning', 'Something went wrong with eQSL.cc!');
+ redirect('eqsl/export');
+ } else {
+ if (stristr($result, "Bad record: Duplicate")) {
+ $status = "Duplicate";
+
+ # Mark the QSL as sent if this is a dupe.
+ $this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
+ }
+ }
+ }
+ }
+ } else {
+ if ($chi['http_code'] == "500") {
+ $this->session->set_flashdata('warning', 'eQSL.cc is experiencing issues. Please try exporting QSOs later.');
+ redirect('eqsl/export');
+ } else {
+ if ($chi['http_code'] == "400") {
+ $this->session->set_flashdata('warning', 'There was an error in one of the QSOs. You might want to manually upload them.');
+ redirect('eqsl/export');
+ $status = "Error";
+ } else {
+ if ($chi['http_code'] == "404") {
+ $this->session->set_flashdata('warning', 'It seems that the eQSL site has changed. Please open up an issue on GitHub.');
+ redirect('eqsl/export');
+ }
+ }
+ }
+ }
+ log_message('debug', $result);
+ return $status;
+ }
+
+ function mark_all_as_sent() {
+ $data = array(
+ 'COL_EQSL_QSL_SENT' => 'Y',
+ 'COL_EQSL_QSLSDATE' => date('Y-m-d') . " 00:00:00",
+ );
+
+ $userid = $this->session->userdata('user_id');
+ if ($userid ?? '' != '') {
+ $stations = $this->get_all_user_locations($userid);
+ $logbooks_locations_array = array();
+ foreach ($stations->result() as $row) {
+ array_push($logbooks_locations_array, $row->station_id);
+ }
+ if (count($logbooks_locations_array) > 0) {
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->group_start();
+ $this->db->where('COL_EQSL_QSL_SENT', 'N');
+ $this->db->or_where('COL_EQSL_QSL_SENT', 'R');
+ $this->db->or_where('COL_EQSL_QSL_SENT', 'Q');
+ $this->db->or_where('COL_EQSL_QSL_SENT', null);
+ $this->db->group_end();
+
+ $this->db->update($this->config->item('table_name'), $data);
+ }
+ }
+ }
function get_eqsl_users() {
$this->db->select('user_eqsl_name, user_eqsl_password, user_id');
@@ -41,38 +346,37 @@ class Eqslmethods_model extends CI_Model {
* Gets all station location for user, for use in cron where we don't have any login
*/
function get_all_user_locations($userid) {
- $this->db->select('station_profile.*, dxcc_entities.name as station_country, dxcc_entities.end as dxcc_end');
- $this->db->where('user_id', $userid);
- $this->db->join('dxcc_entities','station_profile.station_dxcc = dxcc_entities.adif','left outer');
- return $this->db->get('station_profile');
- }
+ $this->db->select('station_profile.*, dxcc_entities.name as station_country, dxcc_entities.end as dxcc_end');
+ $this->db->where('user_id', $userid);
+ $this->db->join('dxcc_entities', 'station_profile.station_dxcc = dxcc_entities.adif', 'left outer');
+ return $this->db->get('station_profile');
+ }
// Show all QSOs we need to send to eQSL
function eqsl_not_yet_sent($userid = null) {
- $CI =& get_instance();
if ($userid == null) {
- $CI->load->model('logbooks_model');
- $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
} else {
$stations = $this->get_all_user_locations($userid);
$logbooks_locations_array = array();
foreach ($stations->result() as $row) {
array_push($logbooks_locations_array, $row->station_id);
}
- array_push($logbooks_locations_array, -9999);
+ array_push($logbooks_locations_array, -9999);
}
- $this->db->select('station_profile.*, '.$this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_MODE, '.$this->config->item('table_name').'.COL_SUBMODE, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_COMMENT, '.$this->config->item('table_name').'.COL_RST_SENT, '.$this->config->item('table_name').'.COL_PROP_MODE, '.$this->config->item('table_name').'.COL_SAT_NAME, '.$this->config->item('table_name').'.COL_SAT_MODE, '.$this->config->item('table_name').'.COL_QSLMSG');
+ $this->db->select('station_profile.*, ' . $this->config->item('table_name') . '.COL_PRIMARY_KEY, ' . $this->config->item('table_name') . '.COL_TIME_ON, ' . $this->config->item('table_name') . '.COL_CALL, ' . $this->config->item('table_name') . '.COL_MODE, ' . $this->config->item('table_name') . '.COL_SUBMODE, ' . $this->config->item('table_name') . '.COL_BAND, ' . $this->config->item('table_name') . '.COL_COMMENT, ' . $this->config->item('table_name') . '.COL_RST_SENT, ' . $this->config->item('table_name') . '.COL_PROP_MODE, ' . $this->config->item('table_name') . '.COL_SAT_NAME, ' . $this->config->item('table_name') . '.COL_SAT_MODE, ' . $this->config->item('table_name') . '.COL_QSLMSG');
$this->db->from('station_profile');
- $this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
+ $this->db->join($this->config->item('table_name'), 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id');
$this->db->where("coalesce(station_profile.eqslqthnickname, '') <> ''");
- $this->db->where($this->config->item('table_name').'.COL_CALL !=', '');
+ $this->db->where($this->config->item('table_name') . '.COL_CALL !=', '');
$this->db->group_start();
- $this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_SENT is null');
- $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', '');
- $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'R');
- $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'Q');
- $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'N');
+ $this->db->where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT is null');
+ $this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', '');
+ $this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', 'R');
+ $this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', 'Q');
+ $this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', 'N');
$this->db->group_end();
$this->db->where_in('station_profile.station_id', $logbooks_locations_array);
@@ -81,26 +385,25 @@ class Eqslmethods_model extends CI_Model {
// Show all QSOs whose eQSL card images we did not download yet
function eqsl_not_yet_downloaded($userid = null) {
- $CI =& get_instance();
if ($userid == null) {
- $CI->load->model('logbooks_model');
- $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
} else {
$stations = $this->get_all_user_locations($userid);
$logbooks_locations_array = array();
foreach ($stations->result() as $row) {
array_push($logbooks_locations_array, $row->station_id);
}
- array_push($logbooks_locations_array, -9999);
+ array_push($logbooks_locations_array, -9999);
}
- $this->db->select('station_profile.station_id, '.$this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_MODE, '.$this->config->item('table_name').'.COL_SUBMODE, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_PROP_MODE, '.$this->config->item('table_name').'.COL_SAT_NAME, '.$this->config->item('table_name').'.COL_SAT_MODE, '.$this->config->item('table_name').'.COL_QSLMSG, eQSL_images.qso_id');
+ $this->db->select('station_profile.station_id, ' . $this->config->item('table_name') . '.COL_PRIMARY_KEY, ' . $this->config->item('table_name') . '.COL_TIME_ON, ' . $this->config->item('table_name') . '.COL_CALL, ' . $this->config->item('table_name') . '.COL_MODE, ' . $this->config->item('table_name') . '.COL_SUBMODE, ' . $this->config->item('table_name') . '.COL_BAND, ' . $this->config->item('table_name') . '.COL_PROP_MODE, ' . $this->config->item('table_name') . '.COL_SAT_NAME, ' . $this->config->item('table_name') . '.COL_SAT_MODE, ' . $this->config->item('table_name') . '.COL_QSLMSG, eQSL_images.qso_id');
$this->db->from('station_profile');
- $this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
- $this->db->join('eQSL_images','eQSL_images.qso_id = '.$this->config->item('table_name').'.COL_PRIMARY_KEY','left outer');
+ $this->db->join($this->config->item('table_name'), 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id');
+ $this->db->join('eQSL_images', 'eQSL_images.qso_id = ' . $this->config->item('table_name') . '.COL_PRIMARY_KEY', 'left outer');
//$this->db->where("coalesce(station_profile.eqslqthnickname, '') <> ''");
- $this->db->where($this->config->item('table_name').'.COL_CALL !=', '');
- $this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_RCVD', 'Y');
+ $this->db->where($this->config->item('table_name') . '.COL_CALL !=', '');
+ $this->db->where($this->config->item('table_name') . '.COL_EQSL_QSL_RCVD', 'Y');
$this->db->where('qso_id', NULL);
$this->db->where_in('station_profile.station_id', $logbooks_locations_array);
$this->db->order_by("COL_TIME_ON", "desc");
@@ -123,29 +426,31 @@ class Eqslmethods_model extends CI_Model {
}
// Returns all the distinct callsign, eqsl nick pair for the current user/supplied user
- function all_of_user_with_eqsl_nick_defined($userid = null) {
+ function all_of_user_with_eqsl_nick_defined($userid = null) {
if ($userid == null) {
$this->db->where('user_id', $this->session->userdata('user_id'));
} else {
$this->db->where('user_id', $userid);
}
- $this->db->where('eqslqthnickname IS NOT NULL');
- $this->db->where('eqslqthnickname !=', '');
- $this->db->from('station_profile');
- $this->db->select('station_callsign, eqslqthnickname, station_id');
- $this->db->distinct(TRUE);
+ $this->db->where('eqslqthnickname IS NOT NULL');
+ $this->db->where('eqslqthnickname !=', '');
+ $this->db->from('station_profile');
+ $this->db->select('station_callsign, eqslqthnickname, station_id');
+ $this->db->distinct(TRUE);
- return $this->db->get();
- }
+ return $this->db->get();
+ }
// Get the last date we received an eQSL
function eqsl_last_qsl_rcvd_date($callsign, $nickname) {
$qso_table_name = $this->config->item('table_name');
$this->db->from($qso_table_name);
- $this->db->join('station_profile',
- 'station_profile.station_id = '.$qso_table_name.'.station_id AND station_profile.eqslqthnickname != ""');
+ $this->db->join(
+ 'station_profile',
+ 'station_profile.station_id = ' . $qso_table_name . '.station_id AND station_profile.eqslqthnickname != ""'
+ );
$this->db->where('station_profile.station_callsign', $callsign);
$this->db->where('station_profile.eqslqthnickname', $nickname);
@@ -157,7 +462,7 @@ class Eqslmethods_model extends CI_Model {
$query = $this->db->get();
$row = $query->row();
- if (isset($row->COL_EQSL_QSLRDATE)){
+ if (isset($row->COL_EQSL_QSLRDATE)) {
return $row->COL_EQSL_QSLRDATE;
} else {
// No previous date (first time import has run?), so choose UNIX EPOCH!
@@ -176,10 +481,10 @@ class Eqslmethods_model extends CI_Model {
'COL_EQSL_QSL_RCVD' => $qsl_status
);
- $this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
- $this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
+ $this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
+ $this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
$this->db->where('COL_CALL', $callsign);
- $this->db->where('COL_STATION_CALLSIGN', $station_callsign);
+ $this->db->where('COL_STATION_CALLSIGN', $station_callsign);
$this->db->where('COL_BAND', $band);
$this->db->where('COL_MODE', $mode);
$this->db->where('station_id', $station_id);
@@ -192,25 +497,22 @@ class Eqslmethods_model extends CI_Model {
// Determine if we've already received an eQSL for this QSO
function eqsl_dupe_check($datetime, $callsign, $band, $mode, $qsl_status, $station_callsign, $station_id) {
$this->db->select('COL_EQSL_QSLRDATE');
- $this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
- $this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
+ $this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
+ $this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
$this->db->where('COL_CALL', $callsign);
$this->db->where('COL_BAND', $band);
$this->db->where('COL_MODE', $mode);
- $this->db->where('COL_STATION_CALLSIGN', $station_callsign);
+ $this->db->where('COL_STATION_CALLSIGN', $station_callsign);
$this->db->where('COL_EQSL_QSL_RCVD', $qsl_status);
$this->db->where('station_id', $station_id);
$this->db->limit(1);
-
+
$query = $this->db->get($this->config->item('table_name'));
$row = $query->row();
-
+
if ($row != null) {
return true;
- }
+ }
return false;
}
-
}
-
-?>