diff --git a/application/controllers/Search.php b/application/controllers/Search.php index 2a0fc3cc..2bf9946b 100644 --- a/application/controllers/Search.php +++ b/application/controllers/Search.php @@ -32,6 +32,7 @@ class Search extends CI_Controller { $this->load->model('Search_filter'); $data['get_table_names'] = $this->Search_filter->get_table_columns(); + $data['stored_queries'] = $this->Search_filter->get_stored_queries(); //print_r($this->Search_filter->get_table_columns()); @@ -51,16 +52,31 @@ class Search extends CI_Controller { function json_result() { if(isset($_POST['search'])) { - $result = $this->fetchQueryResult($_POST['search']); + $result = $this->fetchQueryResult($_POST['search'], false); echo json_encode($result->result_array()); } else { echo "Noooooooob"; } } + function get_stored_queries() { + $this->load->model('Search_filter'); + $data['result'] = $this->Search_filter->get_stored_queries(); + $this->load->view('search/stored_queries', $data); + } + + function search_result() { + if(isset($_POST['search'])) { + $data['results'] = $this->fetchQueryResult($_POST['search'], false); + $this->load->view('search/search_result_ajax', $data); + } else { + echo "Noooooooob"; + } + } + function export_to_adif() { if(isset($_POST['search'])) { - $data['qsos'] = $this->fetchQueryResult($_POST['search']); + $data['qsos'] = $this->fetchQueryResult($_POST['search'], false); $this->load->view('adif/data/exportall', $data); } else { @@ -68,7 +84,58 @@ class Search extends CI_Controller { } } - function fetchQueryResult($json) { + function export_stored_query_to_adif() { + $this->db->where('id', xss_clean($this->input->post('id'))); + $sql = $this->db->get('queries')->result(); + + $data['qsos'] = $this->db->query($sql[0]->query); + $this->load->view('adif/data/exportall', $data); + } + + function run_query() { + $this->db->where('id', xss_clean($this->input->post('id'))); + $sql = $this->db->get('queries')->result(); + + $data['results'] = $this->db->query($sql[0]->query); + + $this->load->view('search/search_result_ajax', $data); + } + + function save_query() { + if(isset($_POST['search'])) { + $query = $this->fetchQueryResult($_POST['search'], true); + + $data = array( + 'userid' => xss_clean($this->session->userdata('user_id')), + 'query' => $query, + 'description' => xss_clean($_POST['description']) + ); + + $this->db->insert('queries', $data); + + } else { + echo "Noooooooob"; + } + } + + function delete_query() { + $id = xss_clean($this->input->post('id')); + $this->load->model('search_filter'); + $this->search_filter->delete_query($id); + } + + function edit_query() { + $data = array( + 'cat' => xss_clean($this->input->post('category')), + 'title' => xss_clean($this->input->post('title')), + 'note' => xss_clean($this->input->post('content')) + ); + + $this->db->where('id', xss_clean($this->input->post('id'))); + $this->db->update('notes', $data); + } + + function fetchQueryResult($json, $returnquery) { $search_items = json_decode($json, true); @@ -316,9 +383,15 @@ class Search extends CI_Controller { } } } + $this->db->order_by('COL_TIME_ON', 'DESC'); $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); - $query = $this->db->get($this->config->item('table_name')); + + if ($returnquery) { + $query = $this->db->get_compiled_select($this->config->item('table_name')); + } else { + $query = $this->db->get($this->config->item('table_name')); + } return $query; } } diff --git a/application/models/Search_filter.php b/application/models/Search_filter.php index c215c780..d6d4c835 100644 --- a/application/models/Search_filter.php +++ b/application/models/Search_filter.php @@ -13,6 +13,15 @@ class Search_filter extends CI_Model { return $query; } + function get_stored_queries() { + $this->db->where('userid', $this->session->userdata('user_id')); + return $this->db->get('queries')->result(); + } + + function delete_query($id) { + $this->db->delete('queries', array('id' => xss_clean($id), 'userid' =>$this->session->userdata('user_id'))); + } + } -?> \ No newline at end of file +?> diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index 431c3dea..da1924e3 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -86,15 +86,9 @@ $(".search-results-box").hide(); }); -$("#btn-export").on("click", function(){ - +function export_search_result(){ var result = $('#builder').queryBuilder('getRules'); if (!$.isEmptyObject(result)) { - // Data to post - data = { - search: JSON.stringify(result, null, 2), temp: "testvar" - }; - xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { var a; @@ -116,45 +110,186 @@ $("#btn-export").on("click", function(){ xhttp.responseType = 'blob'; xhttp.send("search=" + JSON.stringify(result, null, 2)); } +} +function export_stored_query(id){ + xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + var a; + if (xhttp.readyState === 4 && xhttp.status === 200) { + // Trick for making downloadable link + a = document.createElement('a'); + a.href = window.URL.createObjectURL(xhttp.response); + // Give filename you wish to download + a.download = "advanced_search_export.adi"; + a.style.display = 'none'; + document.body.appendChild(a); + a.click(); + } + }; + // Post data to URL which handles post request + xhttp.open("POST", "", true); + xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + // You should set responseType as blob for binary responses + xhttp.responseType = 'blob'; + xhttp.send("id=" + id); +} +$('#btn-save').on('click', function() { + var resultquery = $('#builder').queryBuilder('getRules'); + if (!$.isEmptyObject(resultquery)) { + let message = 'Description: ' + + BootstrapDialog.confirm({ + title: 'Query description', + size: BootstrapDialog.SIZE_NORMAL, + cssClass: 'description-dialog', + closable: true, + nl2br: false, + message: message, + btnCancelLabel: 'Cancel', + btnOKLabel: 'Save', + callback: function(result) { + if(result) { + $.post( "", { search: JSON.stringify(resultquery, null, 2), description: $(".getqueryname").val() }) + .done(function( data ) { + alert('Query saved!'); + }); + } + }, + }); + + } + else{ + alert('Make a query first'); + } }); - $('#btn-get').on('click', function() { - var result = $('#builder').queryBuilder('getRules'); - if (!$.isEmptyObject(result)) { - //alert(JSON.stringify(result, null, 2)); +function run_query() { + $(".runbutton").addClass('running'); + $(".runbutton").prop('disabled', true); + let id = $('#querydropdown').val(); + $.post( "", { id: id}) + .done(function( data ) { - $.post( "", { search: JSON.stringify(result, null, 2), temp: "testvar" }) - .done(function( data ) { - //console.log(data) - //alert( "Data Loaded: " + data ); - $('.qso').remove(); - $(".search-results-box").show(); + $('.exportbutton').html(''); + $('.card-body.result').empty(); + $(".search-results-box").show(); - $.each(JSON.parse(data), function(i, item) { + $('.card-body.result').append(data); + $('.table').DataTable({ + "pageLength": 25, + responsive: false, + ordering: false, + "scrollY": "400px", + "scrollCollapse": true, + "paging": false, + "scrollX": true, + dom: 'Bfrtip', + buttons: [ + 'csv' + ] + }); + // change color of csv-button if dark mode is chosen + if (isDarkModeTheme()) { + $(".buttons-csv").css("color", "white"); + } + $(".runbutton").removeClass('running'); + $(".runbutton").prop('disabled', false); + }); +} - var band = ""; - if(item.COL_SAT_NAME != "") { - band = item.COL_SAT_NAME; - } else { - band = item.COL_BAND; - } - var callsign = '' + item.COL_CALL + ''; - if (item.COL_SUBMODE == '' || item.COL_SUBMODE == null) { - $('#results').append('
- + - - - +
++ - Info You can find out how to use the search filter functions in the wiki. + +
+ + +| Date/Time | -Call | -Mode | -Sent | -Recv'd | -Band | -Country | -- |
| lang->line('general_word_date'); ?> | + config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?> +lang->line('general_word_time'); ?> | + +lang->line('gen_hamradio_call'); ?> | +'; + switch($this->session->userdata('user_column1')==""?'Mode':$this->session->userdata('user_column1')) { + case 'Mode': echo $this->lang->line('gen_hamradio_mode'); break; + case 'RSTS': echo $this->lang->line('gen_hamradio_rsts'); break; + case 'RSTR': echo $this->lang->line('gen_hamradio_rstr'); break; + case 'Country': echo $this->lang->line('general_word_country'); break; + case 'IOTA': echo $this->lang->line('gen_hamradio_iota'); break; + case 'SOTA': echo $this->lang->line('gen_hamradio_sota'); break; + case 'State': echo $this->lang->line('gen_hamradio_state'); break; + case 'Grid': echo $this->lang->line('gen_hamradio_gridsquare'); break; + case 'Band': echo $this->lang->line('gen_hamradio_band'); break; + } + echo ''; + echo ''; + switch($this->session->userdata('user_column2')==""?'RSTS':$this->session->userdata('user_column2')) { + case 'Mode': echo $this->lang->line('gen_hamradio_mode'); break; + case 'RSTS': echo $this->lang->line('gen_hamradio_rsts'); break; + case 'RSTR': echo $this->lang->line('gen_hamradio_rstr'); break; + case 'Country': echo $this->lang->line('general_word_country'); break; + case 'IOTA': echo $this->lang->line('gen_hamradio_iota'); break; + case 'State': echo $this->lang->line('gen_hamradio_state'); break; + case 'SOTA': echo $this->lang->line('gen_hamradio_sota'); break; + case 'Grid': echo $this->lang->line('gen_hamradio_gridsquare'); break; + case 'Band': echo $this->lang->line('gen_hamradio_band'); break; + } + echo ' | '; + echo ''; + switch($this->session->userdata('user_column3')==""?'RSTR':$this->session->userdata('user_column3')) { + case 'Mode': echo $this->lang->line('gen_hamradio_mode'); break; + case 'RSTS': echo $this->lang->line('gen_hamradio_rsts'); break; + case 'RSTR': echo $this->lang->line('gen_hamradio_rstr'); break; + case 'Country': echo $this->lang->line('general_word_country'); break; + case 'IOTA': echo $this->lang->line('gen_hamradio_iota'); break; + case 'SOTA': echo $this->lang->line('gen_hamradio_sota'); break; + case 'State': echo $this->lang->line('gen_hamradio_state'); break; + case 'Grid': echo $this->lang->line('gen_hamradio_gridsquare'); break; + case 'Band': echo $this->lang->line('gen_hamradio_band'); break; + } + echo ' | '; + echo ''; + switch($this->session->userdata('user_column4')==""?'Band':$this->session->userdata('user_column4')) { + case 'Mode': echo $this->lang->line('gen_hamradio_mode'); break; + case 'RSTS': echo $this->lang->line('gen_hamradio_rsts'); break; + case 'RSTR': echo $this->lang->line('gen_hamradio_rstr'); break; + case 'Country': echo $this->lang->line('general_word_country'); break; + case 'IOTA': echo $this->lang->line('gen_hamradio_iota'); break; + case 'SOTA': echo $this->lang->line('gen_hamradio_sota'); break; + case 'State': echo $this->lang->line('gen_hamradio_state'); break; + case 'Grid': echo $this->lang->line('gen_hamradio_gridsquare'); break; + case 'Band': echo $this->lang->line('gen_hamradio_band'); break; + } + echo ' | '; + echo ''; + switch($this->session->userdata('user_column5')==""?'Country':$this->session->userdata('user_column5')) { + case 'Mode': echo $this->lang->line('gen_hamradio_mode'); break; + case 'RSTS': echo $this->lang->line('gen_hamradio_rsts'); break; + case 'RSTR': echo $this->lang->line('gen_hamradio_rstr'); break; + case 'Country': echo $this->lang->line('general_word_country'); break; + case 'IOTA': echo $this->lang->line('gen_hamradio_iota'); break; + case 'SOTA': echo $this->lang->line('gen_hamradio_sota'); break; + case 'State': echo $this->lang->line('gen_hamradio_state'); break; + case 'Grid': echo $this->lang->line('gen_hamradio_gridsquare'); break; + case 'Band': echo $this->lang->line('gen_hamradio_band'); break; + } + echo ' | '; + + if(($this->config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> +QSL | + session->userdata('user_eqsl_name') != "") { ?> +eQSL | + + session->userdata('user_lotw_name') != "") { ?> +LoTW | + + +lang->line('gen_hamradio_station'); ?> | + config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> ++ + | COL_TIME_ON); echo date($custom_date_format, $timestamp); ?> | + config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?> +COL_TIME_ON); echo date('H:i', $timestamp); ?> | + ++ COL_CALL)); ?> + | + session->userdata('user_column1')==""?'Mode':$this->session->userdata('user_column1')) { + case 'Mode': echo ''; echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; break; + case 'RSTS': echo ' | ' . $row->COL_RST_SENT; if ($row->COL_STX) { echo '' . $row->COL_STX . '';}if ($row->COL_STX_STRING) { echo '' . $row->COL_STX_STRING . '';}; break; + case 'RSTR': echo ' | ' . $row->COL_RST_RCVD; if ($row->COL_SRX) { echo '' . $row->COL_SRX . '';}if ($row->COL_SRX_STRING) { echo '' . $row->COL_SRX_STRING . '';}; break; + case 'Country': echo ' | ' . ucwords(strtolower(($row->COL_COUNTRY)));; break; + case 'IOTA': echo ' | ' . ($row->COL_IOTA); break; + case 'SOTA': echo ' | ' . ($row->COL_SOTA_REF); break; + case 'Grid': echo ' | '; echo strlen($row->COL_GRIDSQUARE)==0?$row->COL_VUCC_GRIDS:$row->COL_GRIDSQUARE; break; + case 'Band': echo ' | '; if($row->COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); }; break; + case 'State': echo ' | ' . ($row->COL_STATE); break; + } + echo ' | '; + switch($this->session->userdata('user_column2')==""?'RSTS':$this->session->userdata('user_column2')) { + case 'Mode': echo ''; echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; break; + case 'RSTS': echo ' | ' . $row->COL_RST_SENT; if ($row->COL_STX) { echo '' . $row->COL_STX . '';}if ($row->COL_STX_STRING) { echo '' . $row->COL_STX_STRING . '';}; break; + case 'RSTR': echo ' | ' . $row->COL_RST_RCVD; if ($row->COL_SRX) { echo '' . $row->COL_SRX . '';}if ($row->COL_SRX_STRING) { echo '' . $row->COL_SRX_STRING . '';}; break; + case 'Country': echo ' | ' . ucwords(strtolower(($row->COL_COUNTRY)));; break; + case 'IOTA': echo ' | ' . ($row->COL_IOTA); break; + case 'SOTA': echo ' | ' . ($row->COL_SOTA_REF); break; + case 'Grid': echo ' | '; echo strlen($row->COL_GRIDSQUARE)==0?$row->COL_VUCC_GRIDS:$row->COL_GRIDSQUARE; break; + case 'Band': echo ' | '; if($row->COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); }; break; + case 'State': echo ' | ' . ($row->COL_STATE); break; + } + echo ' | '; + + switch($this->session->userdata('user_column3')==""?'RSTR':$this->session->userdata('user_column3')) { + case 'Mode': echo ''; echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; break; + case 'RSTS': echo ' | ' . $row->COL_RST_SENT; if ($row->COL_STX) { echo '' . $row->COL_STX . '';}if ($row->COL_STX_STRING) { echo '' . $row->COL_STX_STRING . '';}; break; + case 'RSTR': echo ' | ' . $row->COL_RST_RCVD; if ($row->COL_SRX) { echo '' . $row->COL_SRX . '';}if ($row->COL_SRX_STRING) { echo '' . $row->COL_SRX_STRING . '';}; break; + case 'Country': echo ' | ' . ucwords(strtolower(($row->COL_COUNTRY)));; break; + case 'IOTA': echo ' | ' . ($row->COL_IOTA); break; + case 'SOTA': echo ' | ' . ($row->COL_SOTA_REF); break; + case 'Grid': echo ' | '; echo strlen($row->COL_GRIDSQUARE)==0?$row->COL_VUCC_GRIDS:$row->COL_GRIDSQUARE; break; + case 'Band': echo ' | '; if($row->COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); }; break; + case 'State': echo ' | ' . ($row->COL_STATE); break; + } + echo ' | '; + switch($this->session->userdata('user_column4')==""?'Band':$this->session->userdata('user_column4')) { + case 'Mode': echo ''; echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; break; + case 'RSTS': echo ' | ' . $row->COL_RST_SENT; if ($row->COL_STX) { echo '' . $row->COL_STX . '';}if ($row->COL_STX_STRING) { echo '' . $row->COL_STX_STRING . '';}; break; + case 'RSTR': echo ' | ' . $row->COL_RST_RCVD; if ($row->COL_SRX) { echo '' . $row->COL_SRX . '';}if ($row->COL_SRX_STRING) { echo '' . $row->COL_SRX_STRING . '';}; break; + case 'Country': echo ' | ' . ucwords(strtolower(($row->COL_COUNTRY)));; break; + case 'IOTA': echo ' | ' . ($row->COL_IOTA); break; + case 'SOTA': echo ' | ' . ($row->COL_SOTA_REF); break; + case 'Grid': echo ' | '; echo strlen($row->COL_GRIDSQUARE)==0?$row->COL_VUCC_GRIDS:$row->COL_GRIDSQUARE; break; + case 'Band': echo ' | '; if($row->COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); }; break; + case 'State': echo ' | ' . ($row->COL_STATE); break; + } + echo ' | '; + switch($this->session->userdata('user_column5')==""?'Country':$this->session->userdata('user_column5')) { + case 'Mode': echo ''; echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; break; + case 'RSTS': echo ' | ' . $row->COL_RST_SENT; if ($row->COL_STX) { echo '' . $row->COL_STX . '';}if ($row->COL_STX_STRING) { echo '' . $row->COL_STX_STRING . '';}; break; + case 'RSTR': echo ' | ' . $row->COL_RST_RCVD; if ($row->COL_SRX) { echo '' . $row->COL_SRX . '';}if ($row->COL_SRX_STRING) { echo '' . $row->COL_SRX_STRING . '';}; break; + case 'Country': echo ' | ' . ucwords(strtolower(($row->COL_COUNTRY)));; break; + case 'IOTA': echo ' | ' . ($row->COL_IOTA); break; + case 'SOTA': echo ' | ' . ($row->COL_SOTA_REF); break; + case 'Grid': echo ' | '; echo strlen($row->COL_GRIDSQUARE)==0?$row->COL_VUCC_GRIDS:$row->COL_GRIDSQUARE; break; + case 'Band': echo ' | '; if($row->COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); }; break; + case 'State': echo ' | ' . ($row->COL_STATE); break; + } + echo ' | '; + if(($this->config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> ++ ">▲ + ">▼ + | + + session->userdata('user_eqsl_name') != ""){ ?> ++ ▲ + + COL_EQSL_QSL_RCVD =='Y') { ?> + COL_PRIMARY_KEY); ?>" data-fancybox="images" data-width="528" data-height="336">▼ + + ▼ + + + | + + + session->userdata('user_lotw_name') != "") { ?> ++ COL_LOTW_QSL_SENT != ''){ ?> + ▲ + ▼ + + | + + + + + station_callsign)) { ?> ++ station_callsign; ?> + | + + + config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> +
+
+
+
+
+
+
+ |
+
+
+
+
+
| # | +Description | +Query | ++ | + | ' . $i++ . ' | '; + echo '' . $q->description . ' | '; + echo '' . $q->query . ' | '; + echo 'Edit>'; + echo ' | Delete | '; + echo ''; + } + ?> + +
|---|