diff --git a/application/controllers/Eqsl.php b/application/controllers/Eqsl.php index f34a27ba7..7d6a43442 100644 --- a/application/controllers/Eqsl.php +++ b/application/controllers/Eqsl.php @@ -140,7 +140,7 @@ class eqsl extends CI_Controller { // Build URL for eQSL inbox file $eqsl_url .= "?"; $eqsl_url .= "UserName=" . $data['user_eqsl_name']; - $eqsl_url .= "&Password=" . $data['user_eqsl_password']; + $eqsl_url .= "&Password=" . urlencode($data['user_eqsl_password']); $eqsl_url .= "&RcvdSince=" . $eqsl_last_qsl_date; $eqsl_url .= "&QTHNickname=" . urlencode($active_station_info->eqslqthnickname); @@ -172,11 +172,15 @@ class eqsl extends CI_Controller { // "Your ADIF log file has been built" -> We've got an ADIF file we need to grab. if ($chi['http_code'] == "200") - { + { if (stristr($input, "You have no log entries")) { $this->session->set_flashdata('success', 'There are no QSLs waiting for download at eQSL.cc.'); redirect('eqsl/import'); - + } + else if (stristr($input, "Error: No such Username/Password found")) + { + $this->session->set_flashdata('warning', 'No such Username/Password found This could mean the wrong callsign or the wrong password, or the user does not exist.'); + redirect('eqsl/import'); } else { @@ -318,7 +322,7 @@ class eqsl extends CI_Controller { $adif .= "%3A"; $adif .= strlen($data['user_eqsl_password']); $adif .= "%3E"; - $adif .= $data['user_eqsl_password']; + $adif .= urlencode($data['user_eqsl_password']); $adif .= "%20"; $adif .= "%3C"; @@ -579,8 +583,7 @@ class eqsl extends CI_Controller { $username = $q->user_eqsl_name; $password = $q->user_eqsl_password; - - $image_url = $this->electronicqsl->card_image($username, $password, $callsign, $band, $mode, $year, $month, $day, $hour, $minute); + $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; diff --git a/application/controllers/Logbook.php b/application/controllers/Logbook.php index acb8f8703..dffe896be 100755 --- a/application/controllers/Logbook.php +++ b/application/controllers/Logbook.php @@ -428,9 +428,15 @@ class Logbook extends CI_Controller { case "Y": $html .= "green"; break; + case "Q": + $html .= "yellow"; + break; case "R": $html .= "yellow"; break; + case "I": + echo "grey"; + break; default: $html .= "red"; } @@ -440,9 +446,15 @@ class Logbook extends CI_Controller { case "Y": $html .= "green"; break; + case "Q": + $html .= "yellow"; + break; case "R": $html .= "yellow"; break; + case "I": + echo "grey"; + break; default: $html .= "red"; } diff --git a/application/models/Adif_data.php b/application/models/Adif_data.php index 7d0427304..008af8a09 100644 --- a/application/models/Adif_data.php +++ b/application/models/Adif_data.php @@ -24,7 +24,7 @@ class adif_data extends CI_Model { $active_station_id = $this->stations->find_active(); $this->db->where('station_id', $active_station_id); - $this->db->where('COL_QSL_SENT', 'R'); + $this->db->where_in('COL_QSL_SENT', array('R', 'Q')); $this->db->order_by("COL_TIME_ON", "ASC"); $query = $this->db->get($this->config->item('table_name')); diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index 5deeedfcd..c132b7ff9 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -801,7 +801,7 @@ class Logbook_model extends CI_Model { ENTITY FROM '.$this->config->item('table_name').', dxcc_prefixes, station_profile WHERE - COL_QSL_SENT LIKE \'R\' + COL_QSL_SENT in (\'R\', \'Q\') and (CASE WHEN COL_QSL_VIA != \'\' THEN COL_QSL_VIA ELSE COL_CALL END) like CONCAT(dxcc_prefixes.call,\'%\') and (end is null or end > now()) and '.$this->config->item('table_name').'.station_id = '.$station_id.' diff --git a/application/models/Qslprint_model.php b/application/models/Qslprint_model.php index 736c0c616..1eb6f7a2b 100644 --- a/application/models/Qslprint_model.php +++ b/application/models/Qslprint_model.php @@ -18,7 +18,7 @@ class Qslprint_model extends CI_Model { 'COL_QSL_SENT_VIA' => "B", ); - $this->db->where("COL_QSL_SENT", "R"); + $this->db->where_in("COL_QSL_SENT", array("R","Q")); $this->db->where("station_id", $station_id); $this->db->update($this->config->item('table_name'), $data); } diff --git a/application/views/eqsl/analysis.php b/application/views/eqsl/analysis.php index 91956b775..83ac05036 100644 --- a/application/views/eqsl/analysis.php +++ b/application/views/eqsl/analysis.php @@ -5,10 +5,10 @@
diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index f8453f9bc..faecb8a09 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -20,21 +20,18 @@ -uri->segment(1) == "notes" && ($this->uri->segment(2) == "add" || $this->uri->segment(2) == "edit") ) { ?> - - + uri->segment(1) == "notes" && ($this->uri->segment(2) == "add" || $this->uri->segment(2) == "edit") ) { ?> + + -uri->segment(1) == "qrz") { ?> - - - + uri->segment(1) == "qrz") { ?> + + + - uri->segment(1) == "qso") { ?> - - - uri->segment(1) == "adif") { ?> - - + uri->segment(1) == "adif") { ?> + + <?php if(isset($page_title)) { echo $page_title; } ?> - Cloudlog diff --git a/application/views/interface_assets/mini_header.php b/application/views/interface_assets/mini_header.php index 9d185004b..8684f26b8 100644 --- a/application/views/interface_assets/mini_header.php +++ b/application/views/interface_assets/mini_header.php @@ -9,7 +9,7 @@ - + diff --git a/application/views/qslprint/index.php b/application/views/qslprint/index.php index 077344b3d..8e8d28904 100644 --- a/application/views/qslprint/index.php +++ b/application/views/qslprint/index.php @@ -16,7 +16,7 @@

- Here you can export requested QSLs as CSV-file or ADIF and mark them as sent via buro in a mass transaction if you like. The considered QSOs for this functions would be those of the active station profile. + Here you can export requested QSLs as CSV-file or ADIF and mark them as sent via buro in a mass transaction if you like. Requested QSOs are QSOs marked as "Requested" or "Queued" in the QSL-sent-field. The considered QSOs for this functions would be those of the active station profile.

diff --git a/application/views/search/result_search.php b/application/views/search/result_search.php index 3c5ddff2b..722f43391 100644 --- a/application/views/search/result_search.php +++ b/application/views/search/result_search.php @@ -33,7 +33,7 @@ '; ?> COL_TIME_ON); echo date('d/m/y', $timestamp); ?> COL_TIME_ON); echo date('H:i', $timestamp); ?> - COL_PRIMARY_KEY; ?>">COL_CALL)); ?> + COL_PRIMARY_KEY; ?>" href="javascript:;">COL_CALL)); ?> COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; ?> COL_RST_SENT; ?> COL_STX_STRING) { ?>COL_STX_STRING;?> COL_RST_RCVD; ?> COL_SRX_STRING) { ?>COL_SRX_STRING;?> @@ -100,4 +100,4 @@ TD.lotw{ font-size: 1.1em; } - \ No newline at end of file + diff --git a/application/views/view_log/partial/log.php b/application/views/view_log/partial/log.php index 5b1ef2c88..498b12fc8 100644 --- a/application/views/view_log/partial/log.php +++ b/application/views/view_log/partial/log.php @@ -49,6 +49,9 @@ case "Y": echo "green"; break; + case "Q": + echo "yellow"; + break; case "R": echo "yellow"; break; @@ -64,6 +67,9 @@ case "Y": echo "green"; break; + case "Q": + echo "yellow"; + break; case "R": echo "yellow"; break; diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 9c64468ef..3c625dbd8 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -1,18 +1,15 @@ -
+num_rows() > 0) { foreach ($query->result() as $row) { ?> +
+
- num_rows() > 0) { foreach ($query->result() as $row) { ?> - config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?> -

QSO with COL_CALL)); ?> on the COL_TIME_ON); echo date('d/m/y', $timestamp); $timestamp = strtotime($row->COL_TIME_ON); echo " at ".date('H:i', $timestamp); ?>

- -

QSO with COL_CALL)); ?> on the COL_TIME_ON); echo date('d/m/y', $timestamp);?>

- +

QSO Details

- +
- + @@ -25,7 +22,7 @@ - + @@ -230,18 +227,17 @@ - - config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE) { ?> - - - -
Date/Time:
Callsign:COL_CALL)); ?>COL_CALL)); ?>
COL_TX_PWR; ?>w
Edit QSO
+
+ + config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE) { ?> +
+

Edit QSO

+ -
diff --git a/assets/css/datepicker.css b/assets/css/datepicker.css new file mode 100644 index 000000000..a4239d8c7 --- /dev/null +++ b/assets/css/datepicker.css @@ -0,0 +1,206 @@ +/*@preserve + * Tempus Dominus Bootstrap4 v5.0.1 (https://tempusdominus.github.io/bootstrap-4/) + * Copyright 2016-2018 Jonathan Peterson + * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE) + */ + +.sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +.bootstrap-datetimepicker-widget { + list-style: none; } + .bootstrap-datetimepicker-widget.dropdown-menu { + display: block; + margin: 2px 0; + padding: 4px; + width: 14rem; } + @media (min-width: 576px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; } } + @media (min-width: 768px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; } } + @media (min-width: 992px) { + .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { + width: 38em; } } + .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after { + content: ''; + display: inline-block; + position: absolute; } + .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + top: -7px; + left: 7px; } + .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + top: -6px; + left: 8px; } + .bootstrap-datetimepicker-widget.dropdown-menu.top:before { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + bottom: -7px; + left: 6px; } + .bootstrap-datetimepicker-widget.dropdown-menu.top:after { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid white; + bottom: -6px; + left: 7px; } + .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before { + left: auto; + right: 6px; } + .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after { + left: auto; + right: 7px; } + .bootstrap-datetimepicker-widget.dropdown-menu.wider { + width: 16rem; } + .bootstrap-datetimepicker-widget .list-unstyled { + margin: 0; } + .bootstrap-datetimepicker-widget a[data-action] { + padding: 6px 0; } + .bootstrap-datetimepicker-widget a[data-action]:active { + box-shadow: none; } + .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second { + width: 54px; + font-weight: bold; + font-size: 1.2em; + margin: 0; } + .bootstrap-datetimepicker-widget button[data-action] { + padding: 6px; } + .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after { + content: "Increment Hours"; } + .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after { + content: "Increment Minutes"; } + .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after { + content: "Decrement Hours"; } + .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after { + content: "Decrement Minutes"; } + .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after { + content: "Show Hours"; } + .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after { + content: "Show Minutes"; } + .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after { + content: "Toggle AM/PM"; } + .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after { + content: "Clear the picker"; } + .bootstrap-datetimepicker-widget .btn[data-action="today"]::after { + content: "Set the date to today"; } + .bootstrap-datetimepicker-widget .picker-switch { + text-align: center; } + .bootstrap-datetimepicker-widget .picker-switch::after { + content: "Toggle Date and Time Screens"; } + .bootstrap-datetimepicker-widget .picker-switch td { + padding: 0; + margin: 0; + height: auto; + width: auto; + line-height: inherit; } + .bootstrap-datetimepicker-widget .picker-switch td span { + line-height: 2.5; + height: 2.5em; + width: 100%; } + .bootstrap-datetimepicker-widget table { + width: 100%; + margin: 0; } + .bootstrap-datetimepicker-widget table td, + .bootstrap-datetimepicker-widget table th { + text-align: center; + border-radius: 0.25rem; } + .bootstrap-datetimepicker-widget table th { + height: 20px; + line-height: 20px; + width: 20px; } + .bootstrap-datetimepicker-widget table th.picker-switch { + width: 145px; } + .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover { + background: none; + color: #6c757d; + cursor: not-allowed; } + .bootstrap-datetimepicker-widget table th.prev::after { + content: "Previous Month"; } + .bootstrap-datetimepicker-widget table th.next::after { + content: "Next Month"; } + .bootstrap-datetimepicker-widget table thead tr:first-child th { + cursor: pointer; } + .bootstrap-datetimepicker-widget table thead tr:first-child th:hover { + background: #e9ecef; } + .bootstrap-datetimepicker-widget table td { + height: 54px; + line-height: 54px; + width: 54px; } + .bootstrap-datetimepicker-widget table td.cw { + font-size: .8em; + height: 20px; + line-height: 20px; + color: #6c757d; } + .bootstrap-datetimepicker-widget table td.day { + height: 20px; + line-height: 20px; + width: 20px; } + .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover { + background: #e9ecef; + cursor: pointer; } + .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new { + color: #6c757d; } + .bootstrap-datetimepicker-widget table td.today { + position: relative; } + .bootstrap-datetimepicker-widget table td.today:before { + content: ''; + display: inline-block; + border: solid transparent; + border-width: 0 0 7px 7px; + border-bottom-color: #007bff; + border-top-color: rgba(0, 0, 0, 0.2); + position: absolute; + bottom: 4px; + right: 4px; } + .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover { + background-color: #007bff; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } + .bootstrap-datetimepicker-widget table td.active.today:before { + border-bottom-color: #fff; } + .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover { + background: none; + color: #6c757d; + cursor: not-allowed; } + .bootstrap-datetimepicker-widget table td span { + display: inline-block; + width: 54px; + height: 54px; + line-height: 54px; + margin: 2px 1.5px; + cursor: pointer; + border-radius: 0.25rem; } + .bootstrap-datetimepicker-widget table td span:hover { + background: #e9ecef; } + .bootstrap-datetimepicker-widget table td span.active { + background-color: #007bff; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } + .bootstrap-datetimepicker-widget table td span.old { + color: #6c757d; } + .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover { + background: none; + color: #6c757d; + cursor: not-allowed; } + .bootstrap-datetimepicker-widget.usetwentyfour td.hour { + height: 27px; + line-height: 27px; } + +.input-group [data-toggle="datetimepicker"] { + cursor: pointer; } \ No newline at end of file