Merge pull request #2350 from int2001/secfix

This commit is contained in:
Andreas Kristiansen
2023-08-01 07:19:29 +02:00
committed by GitHub
8 changed files with 330 additions and 310 deletions

View File

@@ -16,15 +16,15 @@ class Cabrillo extends CI_Controller {
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";
public function index() {
$data['page_title'] = "Export Cabrillo";
$this->load->model('Contesting_model');
$this->load->model('stations');
$this->load->model('Contesting_model');
$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['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();
@@ -32,93 +32,107 @@ class Cabrillo extends CI_Controller {
$footerData['scripts'] = [
'assets/js/sections/cabrillo.js'
];
$this->load->view('interface_assets/header', $data);
$this->load->view('interface_assets/header', $data);
$this->load->view('cabrillo/index');
$this->load->view('interface_assets/footer', $footerData);
}
}
public function getContests() {
public function getContests() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$year = $this->security->xss_clean($this->input->post('year'));
$result = $this->Contesting_model->get_logged_contests($station_id, $year);
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($station_id)) {
$year = $this->security->xss_clean($this->input->post('year'));
$result = $this->Contesting_model->get_logged_contests($station_id, $year);
header('Content-Type: application/json');
echo json_encode($result);
}
header('Content-Type: application/json');
echo json_encode($result);
} else {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard');
}
}
public function getYears() {
public function getYears() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$result = $this->Contesting_model->get_logged_years($station_id);
header('Content-Type: application/json');
echo json_encode($result);
}
}
public function getContestDates() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$year = $this->security->xss_clean($this->input->post('year'));
$contestid = $this->security->xss_clean($this->input->post('contestid'));
public function getContestDates() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($station_id)) {
$year = $this->security->xss_clean($this->input->post('year'));
$contestid = $this->security->xss_clean($this->input->post('contestid'));
$result = $this->Contesting_model->get_contest_dates($station_id, $year, $contestid);
$result = $this->Contesting_model->get_contest_dates($station_id, $year, $contestid);
header('Content-Type: application/json');
echo json_encode($result);
}
header('Content-Type: application/json');
echo json_encode($result);
} else {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard');
}
}
public function export() {
// Set memory limit to unlimited to allow heavy usage
public function export() {
// Set memory limit to unlimited to allow heavy usage
ini_set('memory_limit', '-1');
$this->load->model('Contesting_model');
$this->load->model('Contesting_model');
$this->load->model('stations');
$this->load->model('stations');
$this->load->model('user_model');
$this->load->model('user_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$contest_id = $this->security->xss_clean($this->input->post('contestid'));
$station_id = $this->security->xss_clean($this->input->post('station_id'));
if ($this->stations->check_station_is_accessible($station_id)) {
$contest_id = $this->security->xss_clean($this->input->post('contestid'));
$from = $this->security->xss_clean($this->input->post('contestdatesfrom'));
$to = $this->security->xss_clean($this->input->post('contestdatesto'));
$from = $this->security->xss_clean($this->input->post('contestdatesfrom'));
$to = $this->security->xss_clean($this->input->post('contestdatesto'));
$station = $this->stations->profile($station_id);
$station = $this->stations->profile($station_id);
$station = $station->row();
$station = $station->row();
$userinfo = $this->user_model->get_by_id($this->session->userdata('user_id'));
$userinfo = $this->user_model->get_by_id($this->session->userdata('user_id'));
$userinfo = $userinfo->row();
$userinfo = $userinfo->row();
$data['qsos'] = $this->Contesting_model->export_custom($from, $to, $contest_id, $station_id);
$data['qsos'] = $this->Contesting_model->export_custom($from, $to, $contest_id, $station_id);
$data['contest_id'] = $contest_id;
$data['callsign'] = $station->station_callsign;
$data['claimed_score'] = '';
$data['categoryoperator'] = $this->security->xss_clean($this->input->post('categoryoperator'));
$data['categoryassisted'] = $this->security->xss_clean($this->input->post('categoryassisted'));
$data['categoryband'] = $this->security->xss_clean($this->input->post('categoryband'));
$data['categorymode'] = $this->security->xss_clean($this->input->post('categorymode'));
$data['categorypower'] = $this->security->xss_clean($this->input->post('categorypower'));
$data['categorystation'] = $this->security->xss_clean($this->input->post('categorystation'));
$data['categorytransmitter'] = $this->security->xss_clean($this->input->post('categorytransmitter'));
$data['categoryoverlay'] = $this->security->xss_clean($this->input->post('categoryoverlay'));
$data['operators'] = $this->security->xss_clean($this->input->post('operators'));
$data['club'] = $this->security->xss_clean($this->input->post('club'));
$data['name'] = $userinfo->user_firstname . ' ' . $userinfo->user_lastname;
$data['email'] = $userinfo->user_email;
$data['address'] = $this->security->xss_clean($this->input->post('address'));
$data['addresscity'] = $this->security->xss_clean($this->input->post('addresscity'));
$data['addressstateprovince'] = $this->security->xss_clean($this->input->post('addressstateprovince'));
$data['addresspostalcode'] = $this->security->xss_clean($this->input->post('addresspostalcode'));
$data['addresscountry'] = $this->security->xss_clean($this->input->post('addresscountry'));
$data['soapbox'] = $this->security->xss_clean($this->input->post('soapbox'));
$data['gridlocator'] = $station->station_gridsquare;
$data['contest_id'] = $contest_id;
$data['callsign'] = $station->station_callsign;
$data['claimed_score'] = '';
$data['categoryoperator'] = $this->security->xss_clean($this->input->post('categoryoperator'));
$data['categoryassisted'] = $this->security->xss_clean($this->input->post('categoryassisted'));
$data['categoryband'] = $this->security->xss_clean($this->input->post('categoryband'));
$data['categorymode'] = $this->security->xss_clean($this->input->post('categorymode'));
$data['categorypower'] = $this->security->xss_clean($this->input->post('categorypower'));
$data['categorystation'] = $this->security->xss_clean($this->input->post('categorystation'));
$data['categorytransmitter'] = $this->security->xss_clean($this->input->post('categorytransmitter'));
$data['categoryoverlay'] = $this->security->xss_clean($this->input->post('categoryoverlay'));
$data['operators'] = $this->security->xss_clean($this->input->post('operators'));
$data['club'] = $this->security->xss_clean($this->input->post('club'));
$data['name'] = $userinfo->user_firstname . ' ' . $userinfo->user_lastname;
$data['email'] = $userinfo->user_email;
$data['address'] = $this->security->xss_clean($this->input->post('address'));
$data['addresscity'] = $this->security->xss_clean($this->input->post('addresscity'));
$data['addressstateprovince'] = $this->security->xss_clean($this->input->post('addressstateprovince'));
$data['addresspostalcode'] = $this->security->xss_clean($this->input->post('addresspostalcode'));
$data['addresscountry'] = $this->security->xss_clean($this->input->post('addresscountry'));
$data['soapbox'] = $this->security->xss_clean($this->input->post('soapbox'));
$data['gridlocator'] = $station->station_gridsquare;
$this->load->view('cabrillo/export', $data);
}
}
$this->load->view('cabrillo/export', $data);
}else {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard');
}
}
}

View File

@@ -212,42 +212,4 @@ class Dashboard extends CI_Controller {
}
function todays_map() {
$this->load->library('qra');
$this->load->model('logbook_model');
// TODO: Auth
$qsos = $this->logbook_model->get_todays_qsos('');
echo "{\"markers\": [";
foreach ($qsos->result() as $row) {
//print_r($row);
if($row->COL_GRIDSQUARE != null) {
$stn_loc = $this->qra->qra2latlong($row->COL_GRIDSQUARE);
echo "{\"point\":new GLatLng(".$stn_loc[0].",".$stn_loc[1]."), \"html\":\"Callsign: ".$row->COL_CALL."<br />Date/Time: ".$row->COL_TIME_ON."<br />Band: ".$row->COL_BAND."<br />Mode: ";
echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE;
echo "\",\"label\":\"".$row->COL_CALL."\"},";
} else {
$query = $this->db->query('
SELECT *
FROM dxcc_entities
WHERE prefix = SUBSTRING( \''.$row->COL_CALL.'\', 1, LENGTH( prefix ) )
ORDER BY LENGTH( prefix ) DESC
LIMIT 1
');
foreach ($query->result() as $dxcc) {
echo "{\"point\":new GLatLng(".$dxcc->lat.",".$dxcc->long."), \"html\":\"Callsign: ".$row->COL_CALL."<br />Date/Time: ".$row->COL_TIME_ON."<br />Band: ".$row->COL_BAND."<br />Mode: ";
echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE;
echo "\",\"label\":\"".$row->COL_CALL."\"},";
}
}
}
echo "]";
echo "}";
}
}

View File

@@ -99,11 +99,15 @@ class Labels extends CI_Controller {
public function print($station_id) {
$clean_id = xss_clean($station_id);
$offset = xss_clean($this->input->post('startat'));
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($station_id)) {
$this->load->model('labels_model');
$result = $this->labels_model->export_printrequested($clean_id);
$this->load->model('labels_model');
$result = $this->labels_model->export_printrequested($clean_id);
$this->prepareLabel($result, false, $offset);
$this->prepareLabel($result, false, $offset);
} else {
redirect('labels');
}
}
function prepareLabel($qsos, $jscall = false, $offset = 1) {

View File

@@ -26,7 +26,7 @@ class Qrz extends CI_Controller {
if ($station_ids) {
foreach ($station_ids as $station) {
$qrz_api_key = $station->qrzapikey;
if($this->mass_upload_qsos($station->station_id, $qrz_api_key)) {
if($this->mass_upload_qsos($station->station_id, $qrz_api_key, true)) {
echo "QSOs have been uploaded to QRZ.com.";
log_message('info', 'QSOs have been uploaded to QRZ.com.');
} else{
@@ -53,9 +53,9 @@ class Qrz extends CI_Controller {
* Function gets all QSOs from given station_id, that are not previously uploaded to qrz.
* Adif is build for each qso, and then uploaded, one at a time
*/
function mass_upload_qsos($station_id, $qrz_api_key) {
function mass_upload_qsos($station_id, $qrz_api_key, $trusted = false) {
$i = 0;
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id);
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id, $trusted);
$errormessages=array();
$CI =& get_instance();

View File

@@ -290,13 +290,13 @@ class QSO extends CI_Controller {
function delete($id) {
$this->load->model('logbook_model');
$this->logbook_model->delete($id);
$this->session->set_flashdata('notice', 'QSO Deleted Successfully');
$data['message_title'] = "Deleted";
$data['message_contents'] = "QSO Deleted Successfully";
$this->load->view('messages/message', $data);
if ($this->logbook_model->check_qso_is_accessible($id)) {
$this->logbook_model->delete($id);
$this->session->set_flashdata('notice', 'QSO Deleted Successfully');
$data['message_title'] = "Deleted";
$data['message_contents'] = "QSO Deleted Successfully";
$this->load->view('messages/message', $data);
}
// If deletes from /logbook dropdown redirect
if (strpos($_SERVER['HTTP_REFERER'], '/logbook') !== false) {
@@ -309,10 +309,14 @@ class QSO extends CI_Controller {
$id = str_replace('"', "", $this->input->post("id"));
$this->load->model('logbook_model');
$this->logbook_model->delete($id);
header('Content-Type: application/json');
echo json_encode(array('message' => 'OK'));
if ($this->logbook_model->check_qso_is_accessible($id)) {
$this->logbook_model->delete($id);
header('Content-Type: application/json');
echo json_encode(array('message' => 'OK'));
} else {
header('Content-Type: application/json');
echo json_encode(array('message' => 'not allowed'));
}
return;
}

View File

@@ -31,14 +31,13 @@ class Station extends CI_Controller {
$this->load->view('interface_assets/footer');
}
public function create()
{
public function create() {
$this->load->model('stations');
$this->load->model('dxcc');
$data['dxcc_list'] = $this->dxcc->list();
$this->load->model('logbook_model');
$data['iota_list'] = $this->logbook_model->fetchIota();
$this->load->model('logbook_model');
$data['iota_list'] = $this->logbook_model->fetchIota();
$this->load->library('form_validation');
@@ -59,50 +58,57 @@ class Station extends CI_Controller {
}
}
public function edit($id)
{
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Edit Station Location: {$data['my_station_profile']->station_profile_name}";
public function edit($id) {
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($id)) {
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Edit Station Location: {$data['my_station_profile']->station_profile_name}";
if ($this->form_validation->run() == FALSE) {
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
if ($this->form_validation->run() == FALSE) {
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
} else {
$this->stations->edit();
$data['notice'] = "Station Profile " . $this->security->xss_clean($this->input->post('station_profile_name', true)) . " Updated";
redirect('station');
}
} else {
$this->stations->edit();
$data['notice'] = "Station Profile " . $this->security->xss_clean($this->input->post('station_profile_name', true)) . " Updated";
redirect('station');
}
}
public function copy($id)
{
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Duplicate Station Location: {$data['my_station_profile']->station_profile_name}";
public function copy($id) {
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($id)) {
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Duplicate Station Location: {$data['my_station_profile']->station_profile_name}";
// we NULLify station_id and station_profile_name to make sure we are creating a new station
$data['copy_from'] = $data['my_station_profile']->station_id;
$data['my_station_profile']->station_id = NULL;
$data['my_station_profile']->station_profile_name = '';
// we NULLify station_id and station_profile_name to make sure we are creating a new station
$data['copy_from'] = $data['my_station_profile']->station_id;
$data['my_station_profile']->station_id = NULL;
$data['my_station_profile']->station_profile_name = '';
if ($this->form_validation->run() == FALSE)
{
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
}
else
{
$this->stations->add();
if ($this->form_validation->run() == FALSE)
{
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
}
else
{
$this->stations->add();
redirect('station');
}
} else {
redirect('station');
}
}
function load_station_for_editing($id): array
{
function load_station_for_editing($id): array {
$this->load->library('form_validation');
$this->load->model('stations');
@@ -159,15 +165,17 @@ class Station extends CI_Controller {
public function delete($id) {
$this->load->model('stations');
$this->stations->delete($id);
if ($this->stations->check_station_is_accessible($id)) {
$this->stations->delete($id);
}
redirect('station');
}
public function deletelog($id) {
$this->load->model('stations');
$this->stations->deletelog($id);
if ($this->stations->check_station_is_accessible($id)) {
$this->stations->deletelog($id);
}
redirect('station');
}

View File

@@ -21,7 +21,7 @@ class Webadif extends CI_Controller {
foreach ($station_ids as $station) {
$webadif_api_key = $station->webadifapikey;
$webadif_api_url = $station->webadifapiurl;
if ($this->mass_upload_qsos($station->station_id, $webadif_api_key, $webadif_api_url)) {
if ($this->mass_upload_qsos($station->station_id, $webadif_api_key, $webadif_api_url, true)) { // When called via cron it is trusted
echo "QSOs have been uploaded to QO-100 Dx Club.";
log_message('info', 'QSOs have been uploaded to QO-100 Dx Club.');
} else {
@@ -47,9 +47,9 @@ class Webadif extends CI_Controller {
* Function gets all QSOs from given station_id, that are not previously uploaded to webADIF consumer.
* Adif is build for each qso, and then uploaded, one at a time
*/
function mass_upload_qsos($station_id, $webadif_api_key, $webadif_api_url) {
function mass_upload_qsos($station_id, $webadif_api_key, $webadif_api_url, $trusted = false) {
$i = 0;
$data['qsos'] = $this->logbook_model->get_webadif_qsos($station_id);
$data['qsos'] = $this->logbook_model->get_webadif_qsos($station_id, null, null, $trusted);
$errormessages=array();
$CI =& get_instance();
@@ -91,7 +91,7 @@ class Webadif extends CI_Controller {
$data['page_title'] = "QO-100 Dx Club Upload";
$data['station_profiles'] = $this->stations->stations_with_webadif_api_key();
$data['station_profiles'] = $this->stations->stations_with_webadif_api_key();
$data['station_profile'] = $this->stations->stations_with_webadif_api_key();
$this->load->view('interface_assets/header', $data);
@@ -103,32 +103,34 @@ class Webadif extends CI_Controller {
* Used for ajax-function when selecting log for upload to webADIF consumer
*/
public function upload_station() {
$this->setOptions();
$this->load->model('stations');
$this->setOptions();
$postData = $this->input->post();
$this->load->model('stations');
if (!$this->stations->check_station_is_accessible($postData['station_id'])) {
return;
}
$postData = $this->input->post();
$this->load->model('logbook_model');
$result = $this->logbook_model->exists_webadif_api_key($postData['station_id']);
$webadif_api_key = $result->webadifapikey;
$webadif_api_url = $result->webadifapiurl;
header('Content-type: application/json');
$result = $this->mass_upload_qsos($postData['station_id'], $webadif_api_key, $webadif_api_url);
if ($result['status'] == 'OK') {
$stationinfo = $this->stations->stations_with_webadif_api_key();
$info = $stationinfo->result();
$this->load->model('logbook_model');
$result = $this->logbook_model->exists_webadif_api_key($postData['station_id']);
$webadif_api_key = $result->webadifapikey;
$webadif_api_url = $result->webadifapiurl;
header('Content-type: application/json');
$result = $this->mass_upload_qsos($postData['station_id'], $webadif_api_key, $webadif_api_url);
if ($result['status'] == 'OK') {
$stationinfo = $this->stations->stations_with_webadif_api_key();
$info = $stationinfo->result();
$data['status'] = 'OK';
$data['info'] = $info;
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to QO-100 Dx Club";
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
} else {
$data['status'] = 'Error';
$data['info'] = 'Error: No QSOs found to upload.';
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
}
$data['status'] = 'OK';
$data['info'] = $info;
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to QO-100 Dx Club";
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
} else {
$data['status'] = 'Error';
$data['info'] = 'Error: No QSOs found to upload.';
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
}
}
public function mark_webadif() {

View File

@@ -237,10 +237,17 @@ class Logbook_model extends CI_Model {
if($station_id == "" || $station_id == "0") {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();
$CI->load->model('stations');
$station_id = $CI->stations->find_active();
}
$CI =& get_instance();
$CI->load->model('stations');
if (!$CI->stations->check_station_is_accessible($station_id)) { // Hard Exit if station_profile not accessible
return 'Station not accessible<br>';
}
// If station profile has been provided fill in the fields
if($station_id != "0") {
$station = $this->check_station($station_id);
@@ -874,8 +881,8 @@ class Logbook_model extends CI_Model {
// be sure that station belongs to user
$CI =& get_instance();
$CI->load->model('Stations');
if (!$CI->Stations->check_station_is_accessible($stationId)) {
$CI->load->model('stations');
if (!$CI->stations->check_station_is_accessible($stationId)) {
return;
}
@@ -1282,75 +1289,95 @@ class Logbook_model extends CI_Model {
return $name;
}
/* Return QSO Info */
function qso_info($id) {
$this->db->where('COL_PRIMARY_KEY', $id);
function qso_info($id) {
if ($this->logbook_model->check_qso_is_accessible($id)) {
$this->db->where('COL_PRIMARY_KEY', $id);
return $this->db->get($this->config->item('table_name'));
}
return $this->db->get($this->config->item('table_name'));
} else {
return;
}
}
// Set Paper to received
function paperqsl_update($qso_id, $method) {
function paperqsl_update($qso_id, $method) {
if ($this->logbook_model->check_qso_is_accessible($qso_id)) {
$data = array(
'COL_QSLRDATE' => date('Y-m-d H:i:s'),
'COL_QSL_RCVD' => 'Y',
'COL_QSL_RCVD_VIA' => $method
);
$data = array(
'COL_QSLRDATE' => date('Y-m-d H:i:s'),
'COL_QSL_RCVD' => 'Y',
'COL_QSL_RCVD_VIA' => $method
);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->update($this->config->item('table_name'), $data);
}
$this->db->update($this->config->item('table_name'), $data);
} else {
return;
}
}
// Set Paper to sent
function paperqsl_update_sent($qso_id, $method) {
if ($this->logbook_model->check_qso_is_accessible($qso_id)) {
$data = array(
'COL_QSLSDATE' => date('Y-m-d H:i:s'),
'COL_QSL_SENT' => 'Y',
'COL_QSL_SENT_VIA' => $method
);
$data = array(
'COL_QSLSDATE' => date('Y-m-d H:i:s'),
'COL_QSL_SENT' => 'Y',
'COL_QSL_SENT_VIA' => $method
);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->update($this->config->item('table_name'), $data);
$this->db->update($this->config->item('table_name'), $data);
} else {
return;
}
}
// Set Paper to requested
function paperqsl_requested($qso_id, $method) {
if ($this->logbook_model->check_qso_is_accessible($qso_id)) {
$data = array(
'COL_QSLSDATE' => date('Y-m-d H:i:s'),
'COL_QSL_SENT' => 'R',
'COL_QSL_SENT_VIA' => $method
);
$data = array(
'COL_QSLSDATE' => date('Y-m-d H:i:s'),
'COL_QSL_SENT' => 'R',
'COL_QSL_SENT_VIA' => $method
);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->update($this->config->item('table_name'), $data);
$this->db->update($this->config->item('table_name'), $data);
} else {
return;
}
}
function paperqsl_ignore($qso_id, $method) {
if ($this->logbook_model->check_qso_is_accessible($qso_id)) {
$data = array(
'COL_QSLSDATE' => date('Y-m-d H:i:s'),
'COL_QSL_SENT' => 'I'
);
$data = array(
'COL_QSLSDATE' => date('Y-m-d H:i:s'),
'COL_QSL_SENT' => 'I'
);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->where('COL_PRIMARY_KEY', $qso_id);
$this->db->update($this->config->item('table_name'), $data);
$this->db->update($this->config->item('table_name'), $data);
} else {
return;
}
}
function get_qsos_for_printing($station_id2 = null) {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();
$CI->load->model('stations');
$station_id = $CI->stations->find_active();
$sql = 'SELECT
STATION_CALLSIGN,
@@ -1420,16 +1447,20 @@ class Logbook_model extends CI_Model {
}
function get_qso($id) {
$this->db->select($this->config->item('table_name').'.*, station_profile.*, dxcc_entities.*, coalesce(dxcc_entities_2.name, "- NONE -") as station_country, dxcc_entities_2.end as station_end, eQSL_images.image_file as eqsl_image_file, lotw_users.callsign as lotwuser, lotw_users.lastupload');
$this->db->from($this->config->item('table_name'));
$this->db->join('dxcc_entities', $this->config->item('table_name').'.col_dxcc = dxcc_entities.adif', 'left');
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id', 'left');
$this->db->join('dxcc_entities as dxcc_entities_2', 'station_profile.station_dxcc = dxcc_entities_2.adif', 'left outer');
$this->db->join('eQSL_images', $this->config->item('table_name').'.COL_PRIMARY_KEY = eQSL_images.qso_id', 'left outer');
$this->db->join('lotw_users', $this->config->item('table_name').'.COL_CALL = lotw_users.callsign', 'left outer');
$this->db->where('COL_PRIMARY_KEY', $id);
if ($this->logbook_model->check_qso_is_accessible($id)) {
$this->db->select($this->config->item('table_name').'.*, station_profile.*, dxcc_entities.*, coalesce(dxcc_entities_2.name, "- NONE -") as station_country, dxcc_entities_2.end as station_end, eQSL_images.image_file as eqsl_image_file, lotw_users.callsign as lotwuser, lotw_users.lastupload');
$this->db->from($this->config->item('table_name'));
$this->db->join('dxcc_entities', $this->config->item('table_name').'.col_dxcc = dxcc_entities.adif', 'left');
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id', 'left');
$this->db->join('dxcc_entities as dxcc_entities_2', 'station_profile.station_dxcc = dxcc_entities_2.adif', 'left outer');
$this->db->join('eQSL_images', $this->config->item('table_name').'.COL_PRIMARY_KEY = eQSL_images.qso_id', 'left outer');
$this->db->join('lotw_users', $this->config->item('table_name').'.COL_CALL = lotw_users.callsign', 'left outer');
$this->db->where('COL_PRIMARY_KEY', $id);
return $this->db->get();
return $this->db->get();
} else {
return;
}
}
/*
@@ -1452,62 +1483,72 @@ class Logbook_model extends CI_Model {
/*
* Function returns the QSOs from the logbook, which have not been either marked as uploaded to qrz, or has been modified with an edit
*/
function get_qrz_qsos($station_id){
$sql = 'select *, dxcc_entities.name as station_country from ' . $this->config->item('table_name') . ' thcv ' .
' left join station_profile on thcv.station_id = station_profile.station_id' .
' left outer join dxcc_entities on thcv.col_my_dxcc = dxcc_entities.adif' .
' where thcv.station_id = ' . $station_id .
' and (COL_QRZCOM_QSO_UPLOAD_STATUS is NULL
or COL_QRZCOM_QSO_UPLOAD_STATUS = ""
or COL_QRZCOM_QSO_UPLOAD_STATUS = "M"
or COL_QRZCOM_QSO_UPLOAD_STATUS = "N")';
function get_qrz_qsos($station_id, $trusted = false){
$CI =& get_instance();
$CI->load->model('stations');
if ((!$trusted) && (!$CI->stations->check_station_is_accessible($station_id))) {
return;
}
$sql = 'select *, dxcc_entities.name as station_country from ' . $this->config->item('table_name') . ' thcv ' .
' left join station_profile on thcv.station_id = station_profile.station_id' .
' left outer join dxcc_entities on thcv.col_my_dxcc = dxcc_entities.adif' .
' where thcv.station_id = ' . $station_id .
' and (COL_QRZCOM_QSO_UPLOAD_STATUS is NULL
or COL_QRZCOM_QSO_UPLOAD_STATUS = ""
or COL_QRZCOM_QSO_UPLOAD_STATUS = "M"
or COL_QRZCOM_QSO_UPLOAD_STATUS = "N")';
$query = $this->db->query($sql);
return $query;
}
$query = $this->db->query($sql);
return $query;
}
/*
* Function returns the QSOs from the logbook, which have not been either marked as uploaded to webADIF
*/
function get_webadif_qsos($station_id,$from = null, $to = null){
$sql = "
function get_webadif_qsos($station_id,$from = null, $to = null,$trusted = false){
$CI =& get_instance();
$CI->load->model('stations');
if ((!$trusted) && (!$CI->stations->check_station_is_accessible($station_id))) {
return;
}
$sql = "
SELECT qsos.*, station_profile.*, dxcc_entities.name as station_country
FROM %s qsos
INNER JOIN station_profile ON qsos.station_id = station_profile.station_id
LEFT JOIN dxcc_entities on qsos.col_my_dxcc = dxcc_entities.adif
LEFT OUTER JOIN webadif ON qsos.COL_PRIMARY_KEY = webadif.qso_id
WHERE qsos.station_id = %d
AND qsos.COL_SAT_NAME = 'QO-100'
AND qsos.COL_SAT_NAME = 'QO-100'
AND webadif.upload_date IS NULL
";
$sql = sprintf(
$sql,
$this->config->item('table_name'),
$station_id
);
if ($from) {
$from = DateTime::createFromFormat('d/m/Y', $from);
$from = $from->format('Y-m-d');
$sql = sprintf(
$sql,
$this->config->item('table_name'),
$station_id
);
if ($from) {
$from = DateTime::createFromFormat('d/m/Y', $from);
$from = $from->format('Y-m-d');
$sql.=" AND qsos.COL_TIME_ON >= %s";
$sql=sprintf(
$sql,
$this->db->escape($from)
);
}
if ($to) {
$to = DateTime::createFromFormat('d/m/Y', $to);
$to = $to->format('Y-m-d');
$sql.=" AND qsos.COL_TIME_ON >= %s";
$sql=sprintf(
$sql,
$this->db->escape($from)
);
}
if ($to) {
$to = DateTime::createFromFormat('d/m/Y', $to);
$to = $to->format('Y-m-d');
$sql.=" AND qsos.COL_TIME_ON <= %s";
$sql=sprintf(
$sql,
$this->db->escape($to)
);
}
$sql.=" AND qsos.COL_TIME_ON <= %s";
$sql=sprintf(
$sql,
$this->db->escape($to)
);
}
return $this->db->query($sql);
}
return $this->db->query($sql);
}
/*
* Function returns all the station_id's with HRDLOG Code
@@ -1706,26 +1747,7 @@ class Logbook_model extends CI_Model {
return $query;
}
function get_date_qsos($date) {
$this->db->select('COL_CALL, COL_BAND, COL_TIME_ON, COL_RST_RCVD, COL_RST_SENT, COL_MODE, COL_SUBMODE, COL_NAME, COL_COUNTRY, COL_PRIMARY_KEY, COL_SAT_NAME');
$this->db->order_by("COL_TIME_ON", "desc");
$start = $date." 00:00:00";
$end = $date." 23:59:59";
$this->db->where("COL_TIME_ON BETWEEN '".$start."' AND '".$end."'");
$query = $this->db->get($this->config->item('table_name'));
return $query;
}
function get_todays_qsos() {
$morning = date('Y-m-d 00:00:00');
$night = date('Y-m-d 23:59:59');
$query = $this->db->query('SELECT * FROM '.$this->config->item('table_name').' WHERE COL_TIME_ON between \''.$morning.'\' AND \''.$night.'\'');
return $query;
}
function totals_year() {
function totals_year() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -1951,8 +1973,8 @@ class Logbook_model extends CI_Model {
/* Return QSOs for the year for the active profile */
function map_all_qsos_for_active_station_profile() {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();
$CI->load->model('stations');
$station_id = $CI->stations->find_active();
$this->db->where("station_id", $station_id);
$this->db->order_by("COL_TIME_ON", "ASC");
@@ -2620,10 +2642,14 @@ class Logbook_model extends CI_Model {
}
/* Delete QSO based on the QSO ID */
function delete($id) {
$this->db->where('COL_PRIMARY_KEY', $id);
$this->db->delete($this->config->item('table_name'));
}
function delete($id) {
if ($this->check_qso_is_accessible($id)) {
$this->db->where('COL_PRIMARY_KEY', $id);
$this->db->delete($this->config->item('table_name'));
} else {
return;
}
}
/* Used to check if the qso is already in the database */
function import_check($datetime, $callsign, $band, $mode, $station_callsign) {
@@ -2741,12 +2767,12 @@ class Logbook_model extends CI_Model {
function import($record, $station_id = "0", $skipDuplicate = false, $markLotw = false, $dxccAdif = false, $markQrz = false, $markHrd = false,$skipexport = false, $operatorName = false, $apicall = false) {
// be sure that station belongs to user
$CI =& get_instance();
$CI->load->model('Stations');
if (!$CI->Stations->check_station_is_accessible($station_id) && $apicall == false ) {
$CI->load->model('stations');
if (!$CI->stations->check_station_is_accessible($station_id) && $apicall == false ) {
return 'Station not accessible<br>';
}
$station_profile=$CI->Stations->profile_clean($station_id);
$station_profile=$CI->stations->profile_clean($station_id);
$station_profile_call=$station_profile->station_callsign;
if (($station_id !=0 ) && (!(isset($record['station_callsign'])))) {
@@ -3057,8 +3083,8 @@ class Logbook_model extends CI_Model {
// Get active station_id from station profile if one hasn't been provided
if($station_id == "" || $station_id == "0") {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();
$CI->load->model('stations');
$station_id = $CI->stations->find_active();
}
// Check if QSO is already in the database