diff --git a/application/controllers/Clublog.php b/application/controllers/Clublog.php
index c68bd6f7d..94e9e8a1f 100644
--- a/application/controllers/Clublog.php
+++ b/application/controllers/Clublog.php
@@ -1,221 +1,87 @@
-session->userdata('user_id') == '') {
- echo "Maintenance Mode is active. Try again later.\n";
- redirect('user/login');
+ echo "Maintenance Mode is active. Try again later.\n";
+ redirect('dashboard');
}
}
// Show frontend if there is one
- public function index() {
- $this->config->load('config');
+ public function index()
+ {
+ // nothing to display
+ redirect('dashboard');
}
// Upload ADIF to Clublog
- public function upload() {
+ public function upload()
+ {
+
$this->load->model('clublog_model');
// 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);
$users = $this->clublog_model->get_clublog_users();
- foreach ($users as $user) {
- $this->uploadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
+ if (!empty($users)) {
+ foreach ($users as $user) {
+ $r = $this->clublog_model->uploadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
+ }
+ } else {
+ $r = "No user has configured Clublog.";
}
+
+ echo $r;
}
// Download ADIF from Clublog
- public function download() {
+ public function download()
+ {
$this->load->model('clublog_model');
// 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);
$users = $this->clublog_model->get_clublog_users();
- foreach ($users as $user) {
- $this->downloadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
- }
- }
-
- function downloadUser($userid, $username, $password) {
- $clean_username = $this->security->xss_clean($username);
- $clean_password = $this->security->xss_clean($password);
- $clean_userid = $this->security->xss_clean($userid);
-
- $this->config->load('config');
- ini_set('memory_limit', '-1');
- ini_set('display_errors', 1);
- ini_set('display_startup_errors', 1);
- error_reporting(E_ALL);
-
- $this->load->helper('file');
-
- $this->load->model('clublog_model');
- $this->load->model('logbook_model');
-
- $station_profiles = $this->clublog_model->all_enabled($clean_userid); // Fetch unique Calls per User with aggregated station_ids
- if ($station_profiles->num_rows()) {
- foreach ($station_profiles->result() as $station_row) {
- $lastrec=$this->clublog_model->clublog_last_qsl_rcvd_date($station_row->station_callsign);
- $url='https://clublog.org/getmatches.php?api=608df94896cb9c5421ae748235492b43815610c9&email='.$clean_username.'&password='.$clean_password.'&callsign='.$station_row->station_callsign.'&startyear='.substr($lastrec,0,4).'&startmonth='.substr($lastrec,4,2).'&startday='.substr($lastrec,6,2);
- $request = curl_init($url);
-
- // recieve a file
- curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
- $response = curl_exec($request);
- $info = curl_getinfo($request);
- curl_close ($request);
- if(curl_errno($request)) {
- echo curl_error($request);
- } elseif (preg_match_all('/Invalid callsign/',$response)) { // We're trying to download calls for a station we're not granted. Disable Clublog-Transfer for that station(s)
- $this->clublog_model->disable_sync4call($station_row->station_callsign,$station_row->station_ids);
- } else {
- try {
- $cl_qsls=json_decode($response);
- foreach ($cl_qsls as $oneqsl) {
- $this->logbook_model->clublog_update($oneqsl[2], $oneqsl[0], $oneqsl[3], 'Y', $station_row->station_callsign, $station_row->station_ids);
- }
- } catch (Exception $e) {
- log_message("Error","Something gone wrong while trying to Download for station(s) ".$station_row->station_ids." / Call: ".$station_row->station_callsign);
- }
- }
-
+ if (!empty($users)) {
+ foreach ($users as $user) {
+ $r = $this->clublog_model->downloadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
}
+ } else {
+ $r = "No user has configured Clublog.";
}
+
+ echo $r;
}
- function uploadUser($userid, $username, $password) {
- $clean_username = $this->security->xss_clean($username);
- $clean_passord = $this->security->xss_clean($password);
- $clean_userid = $this->security->xss_clean($userid);
-
- $this->config->load('config');
- ini_set('memory_limit', '-1');
- ini_set('display_errors', 1);
- ini_set('display_startup_errors', 1);
- error_reporting(E_ALL);
-
- $this->load->helper('file');
-
- $this->load->model('clublog_model');
-
- $station_profiles = $this->clublog_model->all_with_count($clean_userid);
-
- if($station_profiles->num_rows()){
- foreach ($station_profiles->result() as $station_row)
- {
- if($station_row->qso_total > 0) {
- $data['qsos'] = $this->clublog_model->get_clublog_qsos($station_row->station_id);
-
- if($data['qsos']->num_rows()){
- $string = $this->load->view('adif/data/clublog', $data, TRUE);
-
- $ranid = uniqid();
-
- if ( ! write_file('uploads/clublog'.$ranid.$station_row->station_id.'.adi', $string)) {
- echo 'Unable to write the file - Make the folder Upload folder has write permissions.';
- }
- else {
-
- $file_info = get_file_info('uploads/clublog'.$ranid.$station_row->station_id.'.adi');
-
- // initialise the curl request
- $request = curl_init('https://clublog.org/putlogs.php');
-
- if($this->config->item('directory') != "") {
- $filepath = $_SERVER['DOCUMENT_ROOT']."/".$this->config->item('directory')."/".$file_info['server_path'];
- } else {
- $filepath = $_SERVER['DOCUMENT_ROOT']."/".$file_info['server_path'];
- }
-
- if (function_exists('curl_file_create')) { // php 5.5+
- $cFile = curl_file_create($filepath);
- } else { //
- $cFile = '@' . realpath($filepath);
- }
-
- // send a file
- curl_setopt($request, CURLOPT_POST, true);
- curl_setopt(
- $request,
- CURLOPT_POSTFIELDS,
- array(
- 'email' => $clean_username,
- 'password' => $clean_passord,
- 'callsign' => $station_row->station_callsign,
- 'api' => "608df94896cb9c5421ae748235492b43815610c9",
- 'file' => $cFile
- ));
-
- // output the response
- curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
- $response = curl_exec($request);
- $info = curl_getinfo($request);
-
- if(curl_errno($request)) {
- echo curl_error($request);
- }
- curl_close ($request);
-
-
- // If Clublog Accepts mark the QSOs
- if (preg_match('/\baccepted\b/', $response)) {
- echo "QSOs uploaded and Logbook QSOs marked as sent to Clublog"."
";
- $this->load->model('clublog_model');
- $this->clublog_model->mark_qsos_sent($station_row->station_id);
- echo "Clublog upload for ".$station_row->station_callsign."
";
- log_message('info', 'Clublog upload for '.$station_row->station_callsign.' successfully sent.');
- } else if (preg_match('/checksum duplicate/',$response)) {
- echo "QSOs uploaded (asduplicate!) and Logbook QSOs marked as sent to Clublog"."
";
- $this->load->model('clublog_model');
- $this->clublog_model->mark_qsos_sent($station_row->station_id);
- echo "Clublog upload for ".$station_row->station_callsign."
";
- log_message('info', 'Clublog DUPLICATE upload for '.$station_row->station_callsign.' successfully sent.');
- } else {
- echo "Error ".$response."
";
- log_message('error', 'Clublog upload for '.$station_row->station_callsign.' failed reason '.$response);
- }
-
- // Delete the ADIF file used for clublog
- unlink('uploads/clublog'.$ranid.$station_row->station_id.'.adi');
-
- }
-
- } else {
- echo "Nothing awaiting upload to clublog for ".$station_row->station_callsign."
";
-
- log_message('info', 'Nothing awaiting upload to clublog for '.$station_row->station_callsign);
- }
- }
- }
- }
- }
-
- function markqso($station_id) {
+ function markqso($station_id)
+ {
$clean_station_id = $this->security->xss_clean($station_id);
$this->load->model('clublog_model');
$this->clublog_model->mark_qsos_sent($clean_station_id);
}
// Find DXCC
- function find_dxcc($callsign) {
+ function find_dxcc($callsign)
+ {
$clean_callsign = $this->security->xss_clean($callsign);
// Live lookup against Clublogs API
- $url = "https://clublog.org/dxcc?call=".$clean_callsign."&api=608df94896cb9c5421ae748235492b43815610c9&full=1";
+ $url = "https://clublog.org/dxcc?call=" . $clean_callsign . "&api=608df94896cb9c5421ae748235492b43815610c9&full=1";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
diff --git a/application/models/Clublog_model.php b/application/models/Clublog_model.php
index dee198086..326121fc6 100644
--- a/application/models/Clublog_model.php
+++ b/application/models/Clublog_model.php
@@ -1,8 +1,10 @@
db->select('user_clublog_name, user_clublog_password, user_id');
$this->db->where('coalesce(user_clublog_name, "") != ""');
$this->db->where('coalesce(user_clublog_password, "") != ""');
@@ -10,50 +12,221 @@ class Clublog_model extends CI_Model {
return $query->result();
}
- function mark_qsos_sent($station_id) {
+ function uploadUser($userid, $username, $password)
+ {
+ $clean_username = $this->security->xss_clean($username);
+ $clean_passord = $this->security->xss_clean($password);
+ $clean_userid = $this->security->xss_clean($userid);
+
+ $return = "No QSO's to upload";
+
+ $this->config->load('config');
+
+ ini_set('memory_limit', '-1');
+ ini_set('display_errors', 1);
+ ini_set('display_startup_errors', 1);
+ error_reporting(E_ALL);
+
+ $this->load->helper('file');
+
+ $station_profiles = $this->all_with_count($clean_userid);
+
+ if ($station_profiles->num_rows()) {
+ foreach ($station_profiles->result() as $station_row) {
+ if ($station_row->qso_total > 0) {
+ $data['qsos'] = $this->get_clublog_qsos($station_row->station_id);
+
+ if ($data['qsos']->num_rows()) {
+ $string = $this->load->view('adif/data/clublog', $data, TRUE);
+
+ $ranid = uniqid();
+
+ if (!write_file('uploads/clublog' . $ranid . $station_row->station_id . '.adi', $string)) {
+ $return = 'Unable to write the file - Make the folder Upload folder has write permissions.';
+ } else {
+
+ $file_info = get_file_info('uploads/clublog' . $ranid . $station_row->station_id . '.adi');
+
+ // initialise the curl request
+ $request = curl_init('https://clublog.org/putlogs.php');
+
+ if ($this->config->item('directory') != "") {
+ $filepath = $_SERVER['DOCUMENT_ROOT'] . "/" . $this->config->item('directory') . "/" . $file_info['server_path'];
+ } else {
+ $filepath = $_SERVER['DOCUMENT_ROOT'] . "/" . $file_info['server_path'];
+ }
+
+ if (function_exists('curl_file_create')) { // php 5.5+
+ $cFile = curl_file_create($filepath);
+ } else { //
+ $cFile = '@' . realpath($filepath);
+ }
+
+ // send a file
+ curl_setopt($request, CURLOPT_POST, true);
+ curl_setopt(
+ $request,
+ CURLOPT_POSTFIELDS,
+ array(
+ 'email' => $clean_username,
+ 'password' => $clean_passord,
+ 'callsign' => $station_row->station_callsign,
+ 'api' => "608df94896cb9c5421ae748235492b43815610c9",
+ 'file' => $cFile
+ )
+ );
+
+ // output the response
+ curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
+ $response = curl_exec($request);
+ $info = curl_getinfo($request);
+
+ if (curl_errno($request)) {
+ $return = curl_error($request);
+ }
+ curl_close($request);
+
+
+ // If Clublog Accepts mark the QSOs
+ if (preg_match('/\baccepted\b/', $response)) {
+ $return = "QSOs uploaded and Logbook QSOs marked as sent to Clublog";
+ $this->mark_qsos_sent($station_row->station_id);
+ $return = "Clublog upload for " . $station_row->station_callsign;
+ log_message('info', 'Clublog upload for ' . $station_row->station_callsign . ' successfully sent.');
+ } else if (preg_match('/checksum duplicate/', $response)) {
+ $return = "QSOs uploaded (asduplicate!) and Logbook QSOs marked as sent to Clublog";
+ $this->mark_qsos_sent($station_row->station_id);
+ $return = "Clublog upload for " . $station_row->station_callsign;
+ log_message('info', 'Clublog DUPLICATE upload for ' . $station_row->station_callsign . ' successfully sent.');
+ } else {
+ $return = "Error " . $response;
+ log_message('error', 'Clublog upload for ' . $station_row->station_callsign . ' failed reason ' . $response);
+ }
+
+ // Delete the ADIF file used for clublog
+ unlink('uploads/clublog' . $ranid . $station_row->station_id . '.adi');
+ }
+ } else {
+
+ $return = "Nothing awaiting upload to clublog for " . $station_row->station_callsign;
+ log_message('info', 'Nothing awaiting upload to clublog for ' . $station_row->station_callsign);
+ }
+ }
+ }
+ }
+ log_message('info', $return);
+ return $return . "\n";
+ }
+
+ function downloadUser($userid, $username, $password)
+ {
+ $clean_username = $this->security->xss_clean($username);
+ $clean_password = $this->security->xss_clean($password);
+ $clean_userid = $this->security->xss_clean($userid);
+
+ $return = "Nothing to download";
+
+ $this->config->load('config');
+
+ ini_set('memory_limit', '-1');
+ ini_set('display_errors', 1);
+ ini_set('display_startup_errors', 1);
+ error_reporting(E_ALL);
+
+ $this->load->helper('file');
+ $this->load->model('logbook_model');
+
+ $station_profiles = $this->all_enabled($clean_userid); // Fetch unique Calls per User with aggregated station_ids
+
+ if ($station_profiles->num_rows()) {
+ foreach ($station_profiles->result() as $station_row) {
+ $lastrec = $this->clublog_last_qsl_rcvd_date($station_row->station_callsign);
+ $url = 'https://clublog.org/getmatches.php?api=608df94896cb9c5421ae748235492b43815610c9&email=' . $clean_username . '&password=' . $clean_password . '&callsign=' . $station_row->station_callsign . '&startyear=' . substr($lastrec, 0, 4) . '&startmonth=' . substr($lastrec, 4, 2) . '&startday=' . substr($lastrec, 6, 2);
+ $request = curl_init($url);
+
+ // recieve a file
+ curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
+ $response = curl_exec($request);
+ $info = curl_getinfo($request);
+ curl_close($request);
+
+ if (curl_errno($request)) {
+ $return = curl_error($request);
+ } elseif (preg_match_all('/Login rejected/', $response)) {
+ $return = "Wrong Clublog username and password for Callsign: '" . $station_row->station_callsign . "'. 'LOGIN REJECTED'.";
+ log_message('error', $return);
+ } elseif (preg_match_all('/Invalid callsign/', $response)) { // We're trying to download calls for a station we're not granted. Disable Clublog-Transfer for that station(s)
+ $this->disable_sync4call($station_row->station_callsign, $station_row->station_ids);
+ $return = "The callsign '" . $station_row->station_callsign . "' does not match the user account at Clublog. 'INVALID CALLSIGN'.";
+ log_message('debug', $return);
+ } else {
+ try {
+ $cl_qsls = json_decode($response);
+ foreach ($cl_qsls as $oneqsl) {
+ $this->logbook_model->clublog_update($oneqsl[2], $oneqsl[0], $oneqsl[3], 'Y', $station_row->station_callsign, $station_row->station_ids);
+ }
+ } catch (Exception $e) {
+ $return = "Something gone wrong while trying to Download for station(s) " . $station_row->station_ids . " / Call: " . $station_row->station_callsign;
+ log_message("error", $return);
+ }
+
+ $return = "QSO's for Callsign: '" . $station_row->station_callsign . "' were successfully downloaded";
+ log_message('info', $return);
+ }
+ }
+ }
+
+ return $return . "\n";
+ }
+
+ function mark_qsos_sent($station_id)
+ {
$data = array(
- 'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
- 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
+ 'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
+ 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
);
$this->db->where("station_id", $station_id);
$this->db->group_start();
$this->db->where("COL_CLUBLOG_QSO_UPLOAD_STATUS", null);
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "");
- $this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
- $this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "M");
+ $this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
+ $this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "M");
$this->db->group_end();
$this->db->update($this->config->item('table_name'), $data);
}
- function mark_qso_sent($qso_id) {
+ function mark_qso_sent($qso_id)
+ {
$data = array(
- 'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
- 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
+ 'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
+ 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
);
$this->db->where("COL_PRIMARY_KEY", $qso_id);
$this->db->update($this->config->item('table_name'), $data);
}
- function get_last_five($station_id) {
+ function get_last_five($station_id)
+ {
$this->db->where('station_id', $station_id);
$this->db->group_start();
$this->db->where("COL_CLUBLOG_QSO_UPLOAD_STATUS", null);
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
$this->db->group_end();
- $this->db->limit(5);
+ $this->db->limit(5);
$query = $this->db->get($this->config->item('table_name'));
return $query;
}
- function mark_all_qsos_notsent($station_id) {
+ function mark_all_qsos_notsent($station_id)
+ {
$data = array(
- 'COL_CLUBLOG_QSO_UPLOAD_DATE' => null,
- 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "M",
- 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "N",
+ 'COL_CLUBLOG_QSO_UPLOAD_DATE' => null,
+ 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "M",
+ 'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "N",
);
$this->db->where("station_id", $station_id);
@@ -61,11 +234,12 @@ class Clublog_model extends CI_Model {
$this->db->update($this->config->item('table_name'), $data);
}
- function get_clublog_qsos($station_id){
+ function get_clublog_qsos($station_id)
+ {
$this->db->select('*, dxcc_entities.name as station_country');
- $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
+ $this->db->join('station_profile', 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id');
$this->db->join('dxcc_entities', 'station_profile.station_dxcc = dxcc_entities.adif', 'left outer');
- $this->db->where($this->config->item('table_name').'.station_id', $station_id);
+ $this->db->where($this->config->item('table_name') . '.station_id', $station_id);
$this->db->where('station_profile.clublogignore', 0);
$this->db->group_start();
$this->db->where("COL_CLUBLOG_QSO_UPLOAD_STATUS", null);
@@ -73,17 +247,18 @@ class Clublog_model extends CI_Model {
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "M");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
$this->db->group_end();
-
+
$query = $this->db->get($this->config->item('table_name'));
return $query;
- }
+ }
- function clublog_last_qsl_rcvd_date($callsign) {
+ function clublog_last_qsl_rcvd_date($callsign)
+ {
$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');
+ $this->db->join('station_profile', 'station_profile.station_id = ' . $qso_table_name . '.station_id');
$this->db->where('station_profile.station_callsign', $callsign);
$this->db->select("DATE_FORMAT(COL_CLUBLOG_QSO_DOWNLOAD_DATE,'%Y%m%d') AS COL_CLUBLOG_QSO_DOWNLOAD_DATE", FALSE);
@@ -95,7 +270,7 @@ class Clublog_model extends CI_Model {
$query = $this->db->get();
$row = $query->row();
- if (isset($row->COL_CLUBLOG_QSO_DOWNLOAD_DATE)){
+ if (isset($row->COL_CLUBLOG_QSO_DOWNLOAD_DATE)) {
return $row->COL_CLUBLOG_QSO_DOWNLOAD_DATE;
} else {
// No previous date (first time import has run?), so choose UNIX EPOCH!
@@ -104,24 +279,27 @@ class Clublog_model extends CI_Model {
}
}
- function disable_sync4call($call, $stations) {
- $sql="update station_profile set clublogignore=1 where station_callsign=? and station_id in (".$stations.")";
- $query = $this->db->query($sql,$call);
+ function disable_sync4call($call, $stations)
+ {
+ $sql = "update station_profile set clublogignore=1 where station_callsign=? and station_id in (" . $stations . ")";
+ $query = $this->db->query($sql, $call);
}
- function all_enabled($userid) {
- $sql="select sp.station_callsign, group_concat(sp.station_id) as station_ids from station_profile sp
+ function all_enabled($userid)
+ {
+ $sql = "select sp.station_callsign, group_concat(sp.station_id) as station_ids from station_profile sp
inner join users u on (u.user_id=sp.user_id)
where u.user_clublog_name is not null and u.user_clublog_password is not null and sp.clublogignore=0 and u.user_id=?
group by sp.station_callsign";
- $query = $this->db->query($sql,$userid);
+ $query = $this->db->query($sql, $userid);
return $query;
}
- function all_with_count($userid) {
- $this->db->select('station_profile.station_id, station_profile.station_callsign, count('.$this->config->item('table_name').'.station_id) as qso_total');
+ function all_with_count($userid)
+ {
+ $this->db->select('station_profile.station_id, station_profile.station_callsign, count(' . $this->config->item('table_name') . '.station_id) as qso_total');
$this->db->from('station_profile');
- $this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id','left');
+ $this->db->join($this->config->item('table_name'), 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id', 'left');
$this->db->group_by('station_profile.station_id');
$this->db->where('station_profile.user_id', $userid);
$this->db->where('station_profile.clublogignore', 0);
@@ -135,5 +313,3 @@ class Clublog_model extends CI_Model {
return $this->db->get();
}
}
-
-?>