From f3ad81fef865854ff2cd464d7595fad243668cf3 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 28 Jun 2023 23:43:34 +0200 Subject: [PATCH 01/10] Basics for public search via slug --- application/controllers/Visitor.php | 17 +++++++++++++++++ application/views/visitor/index.php | 4 +++- application/views/visitor/layout/footer.php | 15 ++++++++++++++- application/views/visitor/layout/header.php | 9 +++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/application/controllers/Visitor.php b/application/controllers/Visitor.php index c7dd7f1d..2dace02b 100644 --- a/application/controllers/Visitor.php +++ b/application/controllers/Visitor.php @@ -20,6 +20,9 @@ class Visitor extends CI_Controller { elseif($method == "satellites") { $this->satellites($method); } + elseif($method == "search") { + $this->search($method); + } else { $this->index($method); } @@ -452,4 +455,18 @@ class Visitor extends CI_Controller { return false; } } + + public function search() { + $slug = $this->security->xss_clean($this->uri->segment(3)); + $data['slug'] = $slug; + $callsign = $this->security->xss_clean($this->uri->segment(4)); + $data['callsign'] = $callsign; + $this->search_result($data); + } + + private function search_result($data) { + echo "TEST".$data['slug']."
"; + echo "CALL".strtoupper($data['callsign']); + } + } diff --git a/application/views/visitor/index.php b/application/views/visitor/index.php index c34b6935..0a6425a7 100644 --- a/application/views/visitor/index.php +++ b/application/views/visitor/index.php @@ -50,7 +50,7 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
-
+
@@ -231,3 +231,5 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
+ +
diff --git a/application/views/visitor/layout/footer.php b/application/views/visitor/layout/footer.php index 23689ee2..5fb71200 100644 --- a/application/views/visitor/layout/footer.php +++ b/application/views/visitor/layout/footer.php @@ -47,12 +47,25 @@ var grid = "No"; - console.log("lets go"); initmap(grid); }); + + uri->segment(2) == "satellites") { ?> diff --git a/application/views/visitor/layout/header.php b/application/views/visitor/layout/header.php index 8cef7e98..fa57e0f9 100644 --- a/application/views/visitor/layout/header.php +++ b/application/views/visitor/layout/header.php @@ -71,6 +71,15 @@ + +
+ optionslib->get_option('global_search') != "false" || $this->session->userdata('user_type') >= 2) { ?> +
+ + + +
+
From 41239df4c47e68c99fcc29de8ccc6c741f51bfeb Mon Sep 17 00:00:00 2001 From: phl0 Date: Mon, 10 Jul 2023 13:57:16 +0200 Subject: [PATCH 02/10] PoC for public search --- application/controllers/Visitor.php | 17 +++++++++++------ application/models/Publicsearch.php | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 application/models/Publicsearch.php diff --git a/application/controllers/Visitor.php b/application/controllers/Visitor.php index 2dace02b..b00d2cda 100644 --- a/application/controllers/Visitor.php +++ b/application/controllers/Visitor.php @@ -458,15 +458,20 @@ class Visitor extends CI_Controller { public function search() { $slug = $this->security->xss_clean($this->uri->segment(3)); - $data['slug'] = $slug; $callsign = $this->security->xss_clean($this->uri->segment(4)); - $data['callsign'] = $callsign; - $this->search_result($data); + $this->load->model('publicsearch'); + $result = $this->publicsearch->search($slug, $callsign); + $this->search_result($result); } - private function search_result($data) { - echo "TEST".$data['slug']."
"; - echo "CALL".strtoupper($data['callsign']); + private function search_result($search_results) { + if ($search_results->num_rows() > 0) { + echo "Result found"; + $data['results'] = $search_results; + $this->load->view('view_log/partial/log_ajax.php', $data); + } else { + echo "No results found"; + } } } diff --git a/application/models/Publicsearch.php b/application/models/Publicsearch.php new file mode 100644 index 00000000..24c7d9d2 --- /dev/null +++ b/application/models/Publicsearch.php @@ -0,0 +1,26 @@ +get_userid_for_slug($slug); + $this->db->where('COL_CALL', $callsign); + $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); + $this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer'); + $this->db->where('station_profile.user_id', $userid); + $query = $this->db->get($this->config->item('table_name')); + + return $query; + } + + function get_userid_for_slug($slug) { + $this->db->select('user_id'); + $this->db->where('public_slug', $slug); + $query = $this->db->get('station_logbooks'); + + return $query->result_array()[0]['user_id']; + } + +} + +?> From e2ef6c2b203dca882f8eae6479663e33e7f7e613 Mon Sep 17 00:00:00 2001 From: phl0 Date: Mon, 10 Jul 2023 17:11:40 +0200 Subject: [PATCH 03/10] Add logbook setting for public search --- application/config/migration.php | 2 +- application/controllers/Logbooks.php | 6 ++++ application/controllers/Visitor.php | 10 +++++++ .../129_add_public_search_option.php | 28 +++++++++++++++++++ application/models/Logbooks_model.php | 19 +++++++++++++ application/views/logbooks/edit.php | 12 ++++++++ application/views/logbooks/index.php | 8 ++++++ application/views/visitor/layout/header.php | 13 +++++---- 8 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 application/migrations/129_add_public_search_option.php diff --git a/application/config/migration.php b/application/config/migration.php index 7c4aa6b1..937c6cbd 100644 --- a/application/config/migration.php +++ b/application/config/migration.php @@ -21,7 +21,7 @@ $config['migration_enabled'] = TRUE; | be upgraded / downgraded to. | */ -$config['migration_version'] = 128; +$config['migration_version'] = 129; /* |-------------------------------------------------------------------------- diff --git a/application/controllers/Logbooks.php b/application/controllers/Logbooks.php index ed7a2d1a..a5f021c3 100644 --- a/application/controllers/Logbooks.php +++ b/application/controllers/Logbooks.php @@ -129,6 +129,12 @@ class Logbooks extends CI_Controller { $this->load->view('logbooks/components/publicSlugInputValidation', $data); } + public function save_publicsearch() { + $this->load->model('logbooks_model'); + $returndata = $this->logbooks_model->save_public_search($this->input->post('public_search'), $this->input->post('logbook_id')); + echo "
Public Search Setttings Saved
"; + } + public function save_publicslug() { $this->load->model('logbooks_model'); diff --git a/application/controllers/Visitor.php b/application/controllers/Visitor.php index b00d2cda..cf42ffe3 100644 --- a/application/controllers/Visitor.php +++ b/application/controllers/Visitor.php @@ -456,6 +456,16 @@ class Visitor extends CI_Controller { } } + public function public_search_enabled($slug) { + $this->load->model('Logbooks_model'); + $logbook_id = $this->Logbooks_model->public_slug_exists_logbook_id($slug); + if ($this->Logbooks_model->public_search_enabled($logbook_id) == 1) { + return true; + } else { + return false; + } + } + public function search() { $slug = $this->security->xss_clean($this->uri->segment(3)); $callsign = $this->security->xss_clean($this->uri->segment(4)); diff --git a/application/migrations/129_add_public_search_option.php b/application/migrations/129_add_public_search_option.php new file mode 100644 index 00000000..c98841fb --- /dev/null +++ b/application/migrations/129_add_public_search_option.php @@ -0,0 +1,28 @@ +db->field_exists('public_search', 'station_logbooks')) { + $fields = array( + 'public_search integer DEFAULT 0 AFTER public_slug', + ); + + $this->dbforge->add_column('station_logbooks', $fields); + } + } + + public function down() + { + if ($this->db->field_exists('public_search', 'logbooks')) { + $this->dbforge->drop_column('logbooks', 'public_search'); + } + } +} diff --git a/application/models/Logbooks_model.php b/application/models/Logbooks_model.php index 87753953..8b4ce1c3 100644 --- a/application/models/Logbooks_model.php +++ b/application/models/Logbooks_model.php @@ -210,6 +210,16 @@ class Logbooks_model extends CI_Model { } } + function save_public_search($public_search, $logbook_id) { + $data = array( + 'public_search' => xss_clean($public_search), + ); + + $this->db->where('user_id', $this->session->userdata('user_id')); + $this->db->where('logbook_id', xss_clean($logbook_id)); + $this->db->update('station_logbooks', $data); + } + function save_public_slug($public_slug, $logbook_id) { $data = array( 'public_slug' => xss_clean($public_slug), @@ -322,5 +332,14 @@ class Logbooks_model extends CI_Model { return 0; } } + + function public_search_enabled($logbook_id) { + $this->db->select('public_search'); + $this->db->where('logbook_id', $logbook_id); + + $query = $this->db->get('station_logbooks'); + + return $query->result_array()[0]['public_search']; + } } ?> diff --git a/application/views/logbooks/edit.php b/application/views/logbooks/edit.php index 81811052..092e5bc4 100644 --- a/application/views/logbooks/edit.php +++ b/application/views/logbooks/edit.php @@ -68,6 +68,18 @@ Visit Public Page /public_slug; ?> +
+ +

Enabling public search function offers a search input box on the public logbook page accessed via public slug. Search only covers this logbook.

+ + +
+

+

+
diff --git a/application/views/logbooks/index.php b/application/views/logbooks/index.php index d9e0f07f..c510b2b5 100644 --- a/application/views/logbooks/index.php +++ b/application/views/logbooks/index.php @@ -36,6 +36,7 @@ Edit Delete Link + Public Search @@ -65,6 +66,13 @@ public_slug; ?>" class="btn btn-outline-primary btn-sm" > + + public_search == 1) { + echo "Enabled"; + } else { + echo "Disabled"; + } ?> + diff --git a/application/views/visitor/layout/header.php b/application/views/visitor/layout/header.php index fa57e0f9..d245128c 100644 --- a/application/views/visitor/layout/header.php +++ b/application/views/visitor/layout/header.php @@ -73,13 +73,14 @@
- optionslib->get_option('global_search') != "false" || $this->session->userdata('user_type') >= 2) { ?> -
- + CI =& get_instance(); + if ($this->CI->public_search_enabled($slug) || $this->session->userdata('user_type') >= 2) { ?> + + - -
- + + + From d5f98da321b4c30a237ffc95342c933bb349c658 Mon Sep 17 00:00:00 2001 From: phl0 Date: Mon, 10 Jul 2023 18:15:36 +0200 Subject: [PATCH 04/10] Use separate view for public search --- application/controllers/Visitor.php | 2 +- application/views/public_search/result.php | 65 ++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 application/views/public_search/result.php diff --git a/application/controllers/Visitor.php b/application/controllers/Visitor.php index cf42ffe3..ad9bc541 100644 --- a/application/controllers/Visitor.php +++ b/application/controllers/Visitor.php @@ -478,7 +478,7 @@ class Visitor extends CI_Controller { if ($search_results->num_rows() > 0) { echo "Result found"; $data['results'] = $search_results; - $this->load->view('view_log/partial/log_ajax.php', $data); + $this->load->view('public_search/result.php', $data); } else { echo "No results found"; } diff --git a/application/views/public_search/result.php b/application/views/public_search/result.php new file mode 100644 index 00000000..f168f5fa --- /dev/null +++ b/application/views/public_search/result.php @@ -0,0 +1,65 @@ + + +
+ + + + + + + + + + + + result() as $row) { + echo ''; ?> + + + + + + + +
COL_TIME_ON); echo date($this->config->item('qso_date_format'), $timestamp); ?> + COL_CALL)); ?> + + COL_SUBMODE==null ? $row->COL_MODE : $row->COL_SUBMODE; ?> + + COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); } ?> +
+ + + pagination)){ ?> + '; + $config['full_tag_close'] = ''; + $config['attributes'] = ['class' => 'page-link']; + $config['first_link'] = false; + $config['last_link'] = false; + $config['first_tag_open'] = '
  • '; + $config['first_tag_close'] = '
  • '; + $config['prev_link'] = '«'; + $config['prev_tag_open'] = '
  • '; + $config['prev_tag_close'] = '
  • '; + $config['next_link'] = '»'; + $config['next_tag_open'] = '
  • '; + $config['next_tag_close'] = '
  • '; + $config['last_tag_open'] = '
  • '; + $config['last_tag_close'] = '
  • '; + $config['cur_tag_open'] = '
  • '; + $config['cur_tag_close'] = '(current)
  • '; + $config['num_tag_open'] = '
  • '; + $config['num_tag_close'] = '
  • '; + $this->pagination->initialize($config); + ?> + + pagination->create_links(); ?> + + + + + From a7c0435740bec42983830caa01c13ba1aa1072b8 Mon Sep 17 00:00:00 2001 From: phl0 Date: Mon, 10 Jul 2023 18:40:55 +0200 Subject: [PATCH 05/10] Add station callsign and order by time desc --- application/models/Publicsearch.php | 1 + application/views/public_search/result.php | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/application/models/Publicsearch.php b/application/models/Publicsearch.php index 24c7d9d2..40396d6a 100644 --- a/application/models/Publicsearch.php +++ b/application/models/Publicsearch.php @@ -8,6 +8,7 @@ class Publicsearch extends CI_Model { $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); $this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer'); $this->db->where('station_profile.user_id', $userid); + $this->db->order_by('COL_TIME_ON', 'DESC'); $query = $this->db->get($this->config->item('table_name')); return $query; diff --git a/application/views/public_search/result.php b/application/views/public_search/result.php index f168f5fa..c32f07a4 100644 --- a/application/views/public_search/result.php +++ b/application/views/public_search/result.php @@ -10,6 +10,7 @@ if ($results) { ?> + Station Callsign @@ -27,6 +28,9 @@ if ($results) { ?> COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); } ?> + + station_callsign; ?> + From 98e83ee5113a272346f0dc7594ed4ab1827aa045 Mon Sep 17 00:00:00 2001 From: phl0 Date: Mon, 10 Jul 2023 19:14:08 +0200 Subject: [PATCH 06/10] Reformat result table and also handle empty results --- application/controllers/Visitor.php | 8 ++++---- application/views/public_search/result.php | 7 +++++++ application/views/visitor/layout/header.php | 2 +- assets/css/general.css | 5 +++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/application/controllers/Visitor.php b/application/controllers/Visitor.php index ad9bc541..0f922d31 100644 --- a/application/controllers/Visitor.php +++ b/application/controllers/Visitor.php @@ -471,16 +471,16 @@ class Visitor extends CI_Controller { $callsign = $this->security->xss_clean($this->uri->segment(4)); $this->load->model('publicsearch'); $result = $this->publicsearch->search($slug, $callsign); - $this->search_result($result); + $this->search_result($result, $callsign); } - private function search_result($search_results) { + private function search_result($search_results, $callsign) { + $data['callsign'] = $callsign; if ($search_results->num_rows() > 0) { - echo "Result found"; $data['results'] = $search_results; $this->load->view('public_search/result.php', $data); } else { - echo "No results found"; + $this->load->view('public_search/empty.php', $data); } } diff --git a/application/views/public_search/result.php b/application/views/public_search/result.php index c32f07a4..b8ae2102 100644 --- a/application/views/public_search/result.php +++ b/application/views/public_search/result.php @@ -1,3 +1,7 @@ +
    +

    Results Searching for

    +
    +
    @@ -67,3 +71,6 @@ if ($results) { ?>
    +
    + + diff --git a/application/views/visitor/layout/header.php b/application/views/visitor/layout/header.php index d245128c..cdde72d6 100644 --- a/application/views/visitor/layout/header.php +++ b/application/views/visitor/layout/header.php @@ -76,7 +76,7 @@ CI =& get_instance(); if ($this->CI->public_search_enabled($slug) || $this->session->userdata('user_type') >= 2) { ?>
    - +
    diff --git a/assets/css/general.css b/assets/css/general.css index edfa24c7..70bfbfa1 100644 --- a/assets/css/general.css +++ b/assets/css/general.css @@ -42,6 +42,11 @@ thead > tr > td { padding-top: 15px; } +.publicsearch { + padding-top: 15px; + max-width: 540px; +} + .search { padding-top: 15px; } From 23c75017ec2bc938b722e6667d69aa67bb361284 Mon Sep 17 00:00:00 2001 From: phl0 Date: Mon, 10 Jul 2023 22:57:07 +0200 Subject: [PATCH 07/10] Add forgotten file --- application/views/public_search/empty.php | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 application/views/public_search/empty.php diff --git a/application/views/public_search/empty.php b/application/views/public_search/empty.php new file mode 100644 index 00000000..001aef9c --- /dev/null +++ b/application/views/public_search/empty.php @@ -0,0 +1,8 @@ +
    +

    Results Searching for

    +
    +
    + Nothing found. Please try again! +
    +
    +
    From 33111da881dd1cc98080423ce849ef93c8c04486 Mon Sep 17 00:00:00 2001 From: phl0 Date: Tue, 11 Jul 2023 07:42:33 +0200 Subject: [PATCH 08/10] Only show search if a public slug exists --- application/views/visitor/layout/header.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/application/views/visitor/layout/header.php b/application/views/visitor/layout/header.php index cdde72d6..452e186d 100644 --- a/application/views/visitor/layout/header.php +++ b/application/views/visitor/layout/header.php @@ -73,14 +73,16 @@
    - CI =& get_instance(); - if ($this->CI->public_search_enabled($slug) || $this->session->userdata('user_type') >= 2) { ?> -
    - + CI =& get_instance(); + if ($this->CI->public_search_enabled($slug) || $this->session->userdata('user_type') >= 2) { ?> + + - -
    - + + + From b54b13d9aa6ff8857a2b62979df03989ed8c2b01 Mon Sep 17 00:00:00 2001 From: phl0 Date: Tue, 11 Jul 2023 08:42:08 +0200 Subject: [PATCH 09/10] Show banner for empty result --- application/views/public_search/empty.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/application/views/public_search/empty.php b/application/views/public_search/empty.php index 001aef9c..c9fc3fde 100644 --- a/application/views/public_search/empty.php +++ b/application/views/public_search/empty.php @@ -1,8 +1,4 @@

    Results Searching for

    -
    -
    - Nothing found. Please try again! -
    -
    +
    From 5d787c036036c0fc377c73a19da22c3e68380648 Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 13 Jul 2023 16:43:17 +0200 Subject: [PATCH 10/10] Refactor and secure public search. Table now sortable --- application/controllers/Visitor.php | 19 +++--- application/models/Publicsearch.php | 33 ++++++---- application/views/public_search/result.php | 2 +- application/views/visitor/layout/footer.php | 67 ++++++++++++++++----- application/views/visitor/layout/header.php | 6 +- 5 files changed, 89 insertions(+), 38 deletions(-) diff --git a/application/controllers/Visitor.php b/application/controllers/Visitor.php index 0f922d31..cadabde1 100644 --- a/application/controllers/Visitor.php +++ b/application/controllers/Visitor.php @@ -467,20 +467,21 @@ class Visitor extends CI_Controller { } public function search() { - $slug = $this->security->xss_clean($this->uri->segment(3)); - $callsign = $this->security->xss_clean($this->uri->segment(4)); + $callsign = $this->security->xss_clean($this->input->post('callsign')); + $public_slug = $this->security->xss_clean($this->input->post('public_slug')); $this->load->model('publicsearch'); - $result = $this->publicsearch->search($slug, $callsign); - $this->search_result($result, $callsign); - } - - private function search_result($search_results, $callsign) { + $result = $this->publicsearch->search($public_slug, $callsign); $data['callsign'] = $callsign; - if ($search_results->num_rows() > 0) { - $data['results'] = $search_results; + $data['slug'] = $public_slug; + if (!empty($result) && $result->num_rows() > 0) { + $data['results'] = $result; + $this->load->view('visitor/layout/header', $data); $this->load->view('public_search/result.php', $data); + $this->load->view('visitor/layout/footer'); } else { + $this->load->view('visitor/layout/header', $data); $this->load->view('public_search/empty.php', $data); + $this->load->view('visitor/layout/footer'); } } diff --git a/application/models/Publicsearch.php b/application/models/Publicsearch.php index 40396d6a..c67967b1 100644 --- a/application/models/Publicsearch.php +++ b/application/models/Publicsearch.php @@ -3,25 +3,36 @@ class Publicsearch extends CI_Model { function search($slug, $callsign) { - $userid = $this->get_userid_for_slug($slug); - $this->db->where('COL_CALL', $callsign); - $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); - $this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer'); - $this->db->where('station_profile.user_id', $userid); - $this->db->order_by('COL_TIME_ON', 'DESC'); - $query = $this->db->get($this->config->item('table_name')); - - return $query; + if ($this->public_search_enabled($slug)) { + $userid = $this->get_userid_for_slug($slug); + $this->db->where('COL_CALL', $callsign); + $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); + $this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer'); + $this->db->where('station_profile.user_id', $userid); + $this->db->order_by('COL_TIME_ON', 'DESC'); + $query = $this->db->get($this->config->item('table_name')); + return $query; + } + return false; } function get_userid_for_slug($slug) { $this->db->select('user_id'); $this->db->where('public_slug', $slug); - $query = $this->db->get('station_logbooks'); - + $query = $this->db->get('station_logbooks'); return $query->result_array()[0]['user_id']; } + function public_search_enabled($slug) { + $this->db->select('public_search'); + $this->db->where('public_slug', $slug); + $query = $this->db->get('station_logbooks'); + if ($query->result_array()[0]['public_search'] == 1) { + return true; + } + return false; + } + } ?> diff --git a/application/views/public_search/result.php b/application/views/public_search/result.php index b8ae2102..36662dc3 100644 --- a/application/views/public_search/result.php +++ b/application/views/public_search/result.php @@ -7,7 +7,7 @@ if ($results) { ?>
    - +
    diff --git a/application/views/visitor/layout/footer.php b/application/views/visitor/layout/footer.php index 5fb71200..88a7ce4f 100644 --- a/application/views/visitor/layout/footer.php +++ b/application/views/visitor/layout/footer.php @@ -52,20 +52,6 @@ }); - - uri->segment(2) == "satellites") { ?> @@ -212,5 +198,58 @@ + CI->public_search_enabled($slug) || $this->session->userdata('user_type') >= 2) { ?> + + + + + + + diff --git a/application/views/visitor/layout/header.php b/application/views/visitor/layout/header.php index 452e186d..f6da5951 100644 --- a/application/views/visitor/layout/header.php +++ b/application/views/visitor/layout/header.php @@ -76,10 +76,10 @@ CI =& get_instance(); if ($this->CI->public_search_enabled($slug) || $this->session->userdata('user_type') >= 2) { ?> - + - - + +