diff --git a/application/controllers/Clublog.php b/application/controllers/Clublog.php index 394b6610a..cacabfc49 100644 --- a/application/controllers/Clublog.php +++ b/application/controllers/Clublog.php @@ -36,9 +36,24 @@ class Clublog extends CI_Controller { } } + // Download ADIF to Clublog + 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); + + $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_passord = $this->security->xss_clean($password); + $clean_password = $this->security->xss_clean($password); $clean_userid = $this->security->xss_clean($userid); $this->config->load('config'); @@ -51,94 +66,29 @@ class Clublog extends CI_Controller { $this->load->model('clublog_model'); - $station_profiles = $this->clublog_model->all_with_count($clean_userid); + $station_profiles = $this->clublog_model->all_enabled($clean_userid); if($station_profiles->num_rows()){ - foreach ($station_profiles->result() as $station_row) - { + 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); + $lastrec=$this->clublog_model->clublog_last_qsl_rcvd_date($station_row->station_callsign); + // $string = $this->load->view('adif/data/clublog_down', $data, TRUE); - if($data['qsos']->num_rows()){ - $string = $this->load->view('adif/data/clublog', $data, TRUE); + $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); - $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 - // New: https://clublog.org/getmatches.php?api=[key]&email=$clean_username&password=$clean_password&callsign=$station_row->station_callsign&startyear=2024&startmonth=4&startday=17 - $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'); - - } + // 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); } 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); + log_message("Error",$response); } + } } } diff --git a/application/models/Clublog_model.php b/application/models/Clublog_model.php index be33b8519..73713ca5f 100644 --- a/application/models/Clublog_model.php +++ b/application/models/Clublog_model.php @@ -10,13 +10,6 @@ class Clublog_model extends CI_Model { return $query->result(); } - function get_clublog_auth_info($username) { - $this->db->select('user_name, user_clublog_name, user_clublog_password'); - $this->db->where('user_name', $username); - $query = $this->db->get($this->config->item('auth_table')); - return $row = $query->row_array(); - } - function mark_qsos_sent($station_id) { $data = array( 'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'), @@ -86,11 +79,46 @@ class Clublog_model extends CI_Model { return $query; } - function all_with_count($userid) { + 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->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); + $this->db->where('COL_CLUBLOG_QSO_DOWNLOAD_DATE IS NOT NULL'); + $this->db->where('station_profile.clublogignore', 0); + $this->db->order_by("COL_CLUBLOG_QSO_DOWNLOAD_DATE", "desc"); + $this->db->limit(1); + + $query = $this->db->get(); + $row = $query->row(); + + 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! + // Note: date is yyyy/mm/dd format + return '19700101'; + } + } + + function all_enabled($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->group_by('station_profile.station_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','left'); + $this->db->group_by('station_profile.station_id'); + $this->db->where('station_profile.user_id', $userid); + $this->db->where('station_profile.clublogignore', 0); + return $this->db->get(); + } + + 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->group_by('station_profile.station_id'); $this->db->where('station_profile.user_id', $userid); $this->db->where('station_profile.clublogignore', 0); $this->db->group_start(); @@ -99,8 +127,8 @@ 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(); - - return $this->db->get(); + + return $this->db->get(); } }