diff --git a/application/controllers/Eqsl.php b/application/controllers/Eqsl.php index 5f9715cb..05d70fbf 100644 --- a/application/controllers/Eqsl.php +++ b/application/controllers/Eqsl.php @@ -182,16 +182,16 @@ class eqsl extends CI_Controller { $status = ""; // begin script - $ch = curl_init(); + $ch = curl_init(); // basic curl options for all requests - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + 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); + $result = curl_exec($ch); $chi = curl_getinfo($ch); curl_close($ch); @@ -507,8 +507,8 @@ class eqsl extends CI_Controller { $image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute); $file = file_get_contents($image_url, true); - $dom = new domDocument; - $dom->loadHTML($file); + $dom = new domDocument; + $dom->loadHTML($file); $dom->preserveWhiteSpace = false; $images = $dom->getElementsByTagName('img'); @@ -517,7 +517,7 @@ class eqsl extends CI_Controller { 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')); @@ -539,6 +539,63 @@ class eqsl extends CI_Controller { } + function bulk_download_image($id) { + $this->load->library('electronicqsl'); + $this->load->model('Eqsl_images'); + + $this->load->model('logbook_model'); + $this->load->model('user_model'); + $qso_query = $this->logbook_model->get_qso($id); + $qso = $qso_query->row(); + $qso_timestamp = strtotime($qso->COL_TIME_ON); + $callsign = $qso->COL_CALL; + $band = $qso->COL_BAND; + $mode = $qso->COL_MODE; + $year = date('Y', $qso_timestamp); + $month = date('m', $qso_timestamp); + $day = date('d', $qso_timestamp); + $hour = date('H', $qso_timestamp); + $minute = date('i', $qso_timestamp); + + $query = $this->user_model->get_by_id($this->session->userdata('user_id')); + $q = $query->row(); + $username = $q->user_eqsl_name; + $password = $q->user_eqsl_password; + $error = ''; + + $image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute); + $file = file_get_contents($image_url, true); + if (strpos($file, 'Error') !== false) { + $error = rtrim(preg_replace('/^\s*Error: /', '', $file)); + return $error; + } + + $dom = new domDocument; + $dom->loadHTML($file); + $dom->preserveWhiteSpace = false; + $images = $dom->getElementsByTagName('img'); + + 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')); + if ($content === false) { + $error = "No response"; + return $error; + } + $filename = uniqid().'.jpg'; + if (file_put_contents('images/eqsl_card_images/' . '/'.$filename, $content) !== false) { + $this->Eqsl_images->save_image($id, $filename); + } + } + return $error; + + } + public function tools() { // Check logged in $this->load->model('user_model'); @@ -557,15 +614,54 @@ class eqsl extends CI_Controller { $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'); } - $data['page_title'] = "eQSL Card Image Download"; - $this->load->model('eqslmethods_model'); + if ($this->input->post('eqsldownload') == 'download') { + $i = 0; + $this->load->model('eqslmethods_model'); + $qslsnotdownloaded = $this->eqslmethods_model->eqsl_not_yet_downloaded(); + $eqsl_results = array(); + foreach ($qslsnotdownloaded->result_array() as $qsl) { + $result = $this->bulk_download_image($qsl['COL_PRIMARY_KEY']); + if ($result != '') { + $errors++; + if ($result == 'Rate Limited') { + break; + } else { + $eqsl_results[] = array( + 'date' => $qsl['COL_TIME_ON'], + 'call' => $qsl['COL_CALL'], + 'mode' => $qsl['COL_MODE'], + 'submode' => $qsl['COL_SUBMODE'], + 'status' => $result, + 'qsoid' => $qsl['COL_PRIMARY_KEY'] + ); + continue; + } + } else { + $i++; + } + if ($i > 0) { + sleep(15); + } + } + $data['eqsl_results'] = $eqsl_results; + $data['eqsl_stats'] = "Successfully downloaded: ".$i." / Errors: ".count($eqsl_results); + $data['page_title'] = "eQSL Download Information"; - $data['custom_date_format'] = $this->session->userdata('user_date_format'); - $data['qslsnotdownloaded'] = $this->eqslmethods_model->eqsl_not_yet_downloaded(); + $this->load->view('interface_assets/header', $data); + $this->load->view('eqsl/result'); + $this->load->view('interface_assets/footer'); + } else { - $this->load->view('interface_assets/header', $data); - $this->load->view('eqsl/download'); - $this->load->view('interface_assets/footer'); + $data['page_title'] = "eQSL Card Image Download"; + $this->load->model('eqslmethods_model'); + + $data['custom_date_format'] = $this->session->userdata('user_date_format'); + $data['qslsnotdownloaded'] = $this->eqslmethods_model->eqsl_not_yet_downloaded(); + + $this->load->view('interface_assets/header', $data); + $this->load->view('eqsl/download'); + $this->load->view('interface_assets/footer'); + } } public function mark_all_sent() { diff --git a/application/controllers/Lotw.php b/application/controllers/Lotw.php index 1c415fe9..01cb8f7d 100644 --- a/application/controllers/Lotw.php +++ b/application/controllers/Lotw.php @@ -156,7 +156,7 @@ class Lotw extends CI_Controller { } else { // Certificate is in the system time to update - $this->LotwCert->update_certificate($this->session->userdata('user_id'), $info['issued_callsign'], $info['dxcc-id'], $info['validFrom'], $info['validTo_Date'], $info['pem_key'], $info['general_cert']); + $this->LotwCert->update_certificate($this->session->userdata('user_id'), $info['issued_callsign'], $info['dxcc-id'], $info['validFrom'], $info['validTo_Date'], $info['qso-first-date'], $info['qso-end-date'], $info['pem_key'], $info['general_cert']); // Cert success flash message $this->session->set_flashdata('Success', $info['issued_callsign'].' Certificate Updated.'); diff --git a/application/language/english/account_lang.php b/application/language/english/account_lang.php index f73f79bb..a5172c94 100644 --- a/application/language/english/account_lang.php +++ b/application/language/english/account_lang.php @@ -23,7 +23,7 @@ $lang['account_user_role'] = 'User Role'; $lang['account_theme'] = 'Theme'; $lang['account_stylesheet'] = 'Stylesheet'; -$lang['account_personal_iformation'] = 'Personal Information'; +$lang['account_personal_information'] = 'Personal Information'; $lang['account_first_name'] = 'First Name'; $lang['account_last_name'] = 'Last Name'; $lang['account_callsign'] = 'Callsign'; diff --git a/application/language/german/account_lang.php b/application/language/german/account_lang.php index df1878b9..d0400d8e 100644 --- a/application/language/german/account_lang.php +++ b/application/language/german/account_lang.php @@ -8,3 +8,84 @@ $lang['account_column2_text'] = 'Wähle Spalte 2'; $lang['account_column3_text'] = 'Wähle Spalte 3'; $lang['account_column4_text'] = 'Wähle Spalte 4'; $lang['account_column5_text'] = 'Wähle Spalte 5 (nur für Logbuch)'; + +$lang['account_create_user_account'] = 'Benutzerkonto anlegen'; +$lang['account_edit_account'] = 'Benutzerkonto editieren'; + +$lang['account_account_information'] = 'Bnutzerkonto Informationen'; +$lang['account_username'] = 'Benutzername'; +$lang['account_email_address'] = 'Emailadresse'; +$lang['account_password'] = 'Passwort'; + +$lang['account_roles'] = 'Rollen'; +$lang['account_user_role'] = 'Benutzerrolle'; + +$lang['account_theme'] = 'Thema'; +$lang['account_stylesheet'] = 'Stylesheet'; + +$lang['account_personal_information'] = 'Informationen'; +$lang['account_first_name'] = 'Vorname'; +$lang['account_last_name'] = 'Nachname'; +$lang['account_callsign'] = 'Rufzeichen'; +$lang['account_gridsquare'] = 'Planquadrat'; + +$lang['account_cloudlog_preferences'] = 'Cloudlog Einstellungen'; +$lang['account_timezone'] = 'Zeitzone'; +$lang['account_date_format'] = 'Datumsformat'; +$lang['account_measurement_preference'] = 'Entfernungsformat'; +$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = 'Wähle, wie Datumsfelder angezeigt werden sollen, wenn du eingeloggt bist.'; +$lang['account_choose_which_unit_distances_will_be_shown_in'] = 'Wähle, in welcher Einheit Entfernungen angezeigt werden sollen.'; + +$lang['account_main_menu'] = 'Hauptmenü'; +$lang['account_show_notes_in_the_main_menu'] = 'Zeige Notizen im Hauptmenü'; + +$lang['account_gridsquare_and_location_autocomplete'] = 'Vervollständigung von Planquadrat und Lokation'; +$lang['account_location_auto_lookup'] = 'Automatische Ermittlung der Lokation.'; +$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = 'Wenn aktiviert, wird das Planquadrat basierend auf der Lokation ermittelt.'; +$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = 'Automatische Ermittlung von Planquadrat und Lokation anhand des SOTA Gipfels.'; +$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = 'Automatische Ermittlung von Planquadrat und Lokation andhand der WWFF Referenz.'; +$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = 'Automatische Ermuttlung des Parknamens anhand der POTA Referenz.'; +$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = 'Wenn aktiviert, werden Name und Planquadrat über die API ermittelt und gesetzt.'; + +$lang['account_previous_qsl_type'] = 'QSL Typ der vorherigen QSOs'; +$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = 'Wähle den QSL-Typ für die Anzeige der bereits getätigten QSOs.'; + +$lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com Bilder'; +$lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = 'Zeige das Profilbild des QSO-Partners aus seinem qrz.com/hamqth.com Profil in der QSO Loggen Sektion.'; +$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = 'Bitte qrz.com/hamqth.com Zugangsdaten in der Basiskonfigurationsdatei ablegen.'; + +$lang['account_amsat_status_upload'] = 'AMSAT Status Upload'; +$lang['account_upload_status_of_sat_qsos_to'] = 'Status von SAT QSOs hochladen auf'; + +$lang['account_logbook_of_the_world'] = 'Logbook of the World'; +$lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) Benutzername'; +$lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) Passwort'; +$lang['account_leave_blank_to_keep_existing_password'] = 'Leer lassen um das existierende Passwort zu übernehmen'; + +$lang['account_clublog'] = 'Club Log'; +$lang['account_clublog_email_callsign'] = 'Club Log Email/Rufzeichen'; +$lang['account_clublog_password'] = 'Club Log Passwort'; +$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = 'Die Emailadresse oder Rufzeichen, das für den Club Log Login verwendet wird'; + +$lang['account_eqsl'] = 'eQSL'; +$lang['account_eqsl_username'] = 'eQSL.cc Benutzername'; +$lang['account_eqsl_password'] = 'eQSL.cc Passwort'; + +$lang['account_save_account_changes'] = 'Speichere Kontoänderungen'; +$lang['account_create_account'] = 'Konto anlegen'; + +$lang['account_delete_user_account'] = 'Benutzerkonto löschen'; +$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = 'Bist du sicher, dass du das Benutzerkonto löschen willst'; +$lang['account_yes_delete_this_user'] = 'Ja, Benutzerkonto löschen'; +$lang['account_no_do_not_delete_this_user'] = 'Nein, Benutzerkonto nicht löschen'; + +$lang['account_forgot_password'] = 'Passwort vergessen?'; +$lang['account_you_can_reset_your_password_here'] = 'Du kannst dein Passwort hier zurücksetzen.'; +$lang['account_reset_password'] = 'Passwort zurücksetzen'; +$lang['account_the_email_field_is_required'] = 'Die Emailadresse ist erforderlich'; +$lang['account_confirm_password'] = 'Bestätige Passwort'; + +$lang['account_forgot_your_password'] = 'Passwort vergessen?'; + +$lang['account_login_to_cloudlog'] = 'Anmeldung bei Cloudlog'; +$lang['account_login'] = 'Anmeldung'; diff --git a/application/language/german/admin_lang.php b/application/language/german/admin_lang.php new file mode 100644 index 00000000..ece3d85b --- /dev/null +++ b/application/language/german/admin_lang.php @@ -0,0 +1,18 @@ +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"); return $this->db->get(); } diff --git a/application/models/LotwCert.php b/application/models/LotwCert.php index 228ea6d1..1d1fd03d 100644 --- a/application/models/LotwCert.php +++ b/application/models/LotwCert.php @@ -54,11 +54,13 @@ class LotwCert extends CI_Model { $this->db->insert('lotw_certs', $data); } - function update_certificate($user_id, $callsign, $dxcc, $date_created, $date_expires, $cert_key, $general_cert) { + function update_certificate($user_id, $callsign, $dxcc, $date_created, $date_expires, $qso_start_date, $qso_end_date, $cert_key, $general_cert) { $data = array( 'cert_dxcc_id' => $dxcc, 'date_created' => $date_created, 'date_expires' => $date_expires, + 'qso_start_date' => $qso_start_date, + 'qso_end_date' => $qso_end_date, 'cert_key' => $cert_key, 'cert' => $general_cert ); diff --git a/application/views/eqsl/analysis.php b/application/views/eqsl/analysis.php index ab3246e4..fb802483 100644 --- a/application/views/eqsl/analysis.php +++ b/application/views/eqsl/analysis.php @@ -17,7 +17,7 @@ $custom_date_format = $this->session->userdata('user_date_format'); Tools diff --git a/application/views/eqsl/download.php b/application/views/eqsl/download.php index 6da35457..d4c2319b 100644 --- a/application/views/eqsl/download.php +++ b/application/views/eqsl/download.php @@ -15,7 +15,7 @@ Tools @@ -58,6 +58,18 @@ foreach ($qslsnotdownloaded->result_array() as $qsl) { echo ""; ?> +

+ + +
+ +

Cloudlog will use the eQSL credentials from your Cloudlog user profile to connect to eQSL and download confirmations.

+
+

+ + + + ">Tools diff --git a/application/views/eqsl/import.php b/application/views/eqsl/import.php index d745e1b4..1808f11e 100644 --- a/application/views/eqsl/import.php +++ b/application/views/eqsl/import.php @@ -15,7 +15,7 @@ Tools diff --git a/application/views/eqsl/result.php b/application/views/eqsl/result.php new file mode 100644 index 00000000..9f7bb2bc --- /dev/null +++ b/application/views/eqsl/result.php @@ -0,0 +1,55 @@ + +session->userdata('user_date_format'); +?> +
+
+
+
+ +
+ +
+ load->view('layout/messages'); ?> + + + + + + + + + + + + + + + + + + + + + + +
DateTimeCallModeSubmodeeQSL Status
+
+
+ +
diff --git a/application/views/eqsl/tools.php b/application/views/eqsl/tools.php index d099525c..7982aaa1 100644 --- a/application/views/eqsl/tools.php +++ b/application/views/eqsl/tools.php @@ -17,7 +17,7 @@ diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index 6b723293..e7936563 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -1255,9 +1255,12 @@ $(document).on('keypress',function(e) { } } else { $(".radio_timeout_error" ).remove(); - text = 'TX: '+(Math.round(parseInt(data.frequency)/1000)/1000).toFixed(3)+' MHz'; + text = 'TX: '+(Math.round(parseInt(data.frequency)/100)/10000).toFixed(4)+' MHz'; + if(data.mode != null) { + text = text+''+data.mode; + } if(data.power != null && data.power != 0) { - text = text+''+data.power+'W'; + text = text+''+data.power+' W'; } if(data.prop_mode != null && data.prop_mode != '') { text = text+'('+data.prop_mode;