diff --git a/application/controllers/eqsl.php b/application/controllers/eqsl.php index fbf2c792..3bcf2c07 100644 --- a/application/controllers/eqsl.php +++ b/application/controllers/eqsl.php @@ -206,7 +206,10 @@ class eqsl extends CI_Controller { $table = ""; $table .= ""; - $table .= ""; + $table .= ""; + $table .= ""; + $table .= ""; + $table .= ""; $table .= ""; $table .= ""; // Build out the ADIF info string according to specs http://eqsl.cc/qslcard/ADIFContentSpecs.cfm @@ -306,30 +309,100 @@ class eqsl extends CI_Controller { $adif .= "EOR"; $adif .= "%3E"; + # Make sure we don't have any spaces + $adif = str_replace(" ", '%20', $adif); + + $status = "Unknown"; + + // 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->logbook_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->logbook_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'); + } + } + } + } $table .= ""; - $table .= ""; - //$result = http_parse_message(http_get($adif))->body; - $table .= ""; + $table .= ""; + $table .= ""; + $table .= ""; + $table .= ""; + $table .= ""; $table .= ""; - } - // Perform a big HTTP POST with the ADIF information at the back - // http://www.eqsl.cc/qslcard/ImportADIF.txt + $table .= "
StringDateCallModeBandResult
".$adif."Result".$qsl['COL_TIME_ON']."".$qsl['COL_CALL']."".$qsl['COL_MODE']."".$qsl['COL_BAND']."".$status."
"; // Dump out a table with the results - $data['eqsl_table'] = $table; - - - // 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! - - $this->load->view('layout/header', $data); - $this->load->view('eqsl/analysis'); - $this->load->view('layout/footer'); + $data['eqsl_results_table'] = $table; } else { @@ -363,110 +436,6 @@ class eqsl extends CI_Controller { $this->load->view('layout/header', $data); $this->load->view('eqsl/export'); $this->load->view('layout/footer'); - - /* OLD STUFF from LOTW - $data = array('upload_data' => $this->upload->data()); - - // Figure out how we should be marking QSLs confirmed via LoTW - $query = $query = $this->db->query('SELECT lotw_login_url FROM config'); - $q = $query->row(); - $config['lotw_login_url'] = $q->lotw_login_url; - - // Set some fields that we're going to need for ARRL login - $query = $this->user_model->get_by_id($this->session->userdata('user_id')); - $q = $query->row(); - $fields['login'] = $q->user_lotw_name; - $fields['password'] = $q->user_lotw_password; - $fields['acct_sel'] = ""; - - if ($fields['login'] == '' || $fields['password'] == '') - { - $this->session->set_flashdata('warning', 'You have not defined your ARRL LoTW credentials!'); redirect('lotw/status'); - } - - // Curl stuff goes here - - // First we need to get a cookie - - // options - $cookie_file_path = "./uploads/cookies.txt"; - $agent = "Mozilla/4.0 (compatible;)"; - - // begin script - $ch = curl_init(); - - // extra headers - $headers[] = "Connection: Keep-Alive"; - - // basic curl options for all requests - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($ch, CURLOPT_HEADER, 0); - - // TODO: These SSL things should probably be set to true :) - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($ch, CURLOPT_USERAGENT, $agent); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); - curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); - curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); - - // Set login URL - curl_setopt($ch, CURLOPT_URL, $config['lotw_login_url']); - - // set postfields using what we extracted from the form - $POSTFIELDS = http_build_query($fields); - - // set post options - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); - - // perform login - $result = curl_exec($ch); - if (stristr($result, "Username/password incorrect")) - { - $this->session->set_flashdata('warning', 'Your ARRL username and/or password is incorrect.'); redirect('lotw/status'); - } - - - // Now we need to use that cookie and upload the file - // change URL to upload destination URL - curl_setopt($ch, CURLOPT_URL, $config['lotw_login_url']); - - // Grab the file - $postfile = array( - "upfile"=>"@./uploads/".$data['upload_data']['file_name'], - ); - - //Upload it - curl_setopt($ch, CURLOPT_POSTFIELDS, $postfile); - $response = curl_exec($ch); - if (stristr($response, "accepted")) - { - $this->session->set_flashdata('lotw_status', 'accepted'); - $data['page_title'] = "eQSL Logs Sent"; - } - elseif (stristr($response, "rejected")) - { - $this->session->set_flashdata('lotw_status', 'rejected'); - $data['page_title'] = "LoTW .TQ8 Sent"; - } - else - { - // If we're here, we didn't find what we're looking for in the ARRL response - // and LoTW is probably down or broken. - $this->session->set_flashdata('warning', 'Did not receive proper response from LoTW. Try again later.'); - $data['page_title'] = "LoTW .TQ8 Not Sent"; - } - - // Now we need to clean up - unlink($cookie_file_path); - unlink('./uploads/'.$data['upload_data']['file_name']); - - $this->load->view('layout/header', $data); - $this->load->view('eqsl/status'); - $this->load->view('layout/footer'); - */ } } // end class \ No newline at end of file diff --git a/application/models/logbook_model.php b/application/models/logbook_model.php index 45e0d9d7..ce773717 100644 --- a/application/models/logbook_model.php +++ b/application/models/logbook_model.php @@ -619,6 +619,20 @@ class Logbook_model extends CI_Model { return "Updated"; } + // Mark the QSO as sent to eQSL + function eqsl_mark_sent($primarykey) { + $data = array( + 'COL_EQSL_QSLSDATE' => 'CURRENT_TIMESTAMP', // eQSL doesn't give us a date, so let's use current + 'COL_EQSL_QSL_SENT' => 'Y', + ); + + $this->db->where('COL_PRIMARY_KEY', $primarykey); + + $this->db->update($this->config->item('table_name'), $data); + + return "eQSL Sent"; + } + // Get the last date we received an eQSL function eqsl_last_qsl_rcvd_date() { $this->db->select("DATE_FORMAT(COL_EQSL_QSLRDATE,'%Y%m%d') AS COL_EQSL_QSLRDATE", FALSE); diff --git a/application/views/eqsl/export.php b/application/views/eqsl/export.php index 727ec2e4..4d3c4ecc 100644 --- a/application/views/eqsl/export.php +++ b/application/views/eqsl/export.php @@ -15,7 +15,15 @@ } else { - echo "

There are no QSOs that need to be sent to eQSL.cc at this time. Go log some more QSOs!

"; + if (isset($eqsl_results_table)) + { + echo "

The following QSOs were sent to eQSL.cc

"; + echo $eqsl_results_table; + } + else + { + echo "

There are no QSOs that need to be sent to eQSL.cc at this time. Go log some more QSOs!

"; + } } ?>