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 c7dd7f1d..cadabde1 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,34 @@ class Visitor extends CI_Controller { return false; } } + + 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() { + $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($public_slug, $callsign); + $data['callsign'] = $callsign; + $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/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/models/Publicsearch.php b/application/models/Publicsearch.php new file mode 100644 index 00000000..c67967b1 --- /dev/null +++ b/application/models/Publicsearch.php @@ -0,0 +1,38 @@ +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'); + 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/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/public_search/empty.php b/application/views/public_search/empty.php new file mode 100644 index 00000000..c9fc3fde --- /dev/null +++ b/application/views/public_search/empty.php @@ -0,0 +1,4 @@ +
+

Results Searching for

+ +
diff --git a/application/views/public_search/result.php b/application/views/public_search/result.php new file mode 100644 index 00000000..36662dc3 --- /dev/null +++ b/application/views/public_search/result.php @@ -0,0 +1,76 @@ +
+

Results Searching for

+
+
+ + +
+ + + + + + + + + + + + + result() as $row) { + echo ''; ?> + + + + + + + + +
Station Callsign
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); } ?> + + station_callsign; ?> +
+ + + 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(); ?> + + + +
    +
    +
    + + diff --git a/application/views/visitor/index.php b/application/views/visitor/index.php index d7fdac18..d92f508b 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..88a7ce4f 100644 --- a/application/views/visitor/layout/footer.php +++ b/application/views/visitor/layout/footer.php @@ -47,7 +47,6 @@ var grid = "No"; - console.log("lets go"); initmap(grid); }); @@ -199,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 8cef7e98..f6da5951 100644 --- a/application/views/visitor/layout/header.php +++ b/application/views/visitor/layout/header.php @@ -71,6 +71,18 @@ + +
    + 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; }