2019-01-09 15:18:46 +00:00
<! doctype html >
< html lang = " en " >
2023-09-12 14:30:28 +01:00
< head >
<!-- Required meta tags -->
< meta charset = " utf-8 " >
< meta name = " viewport " content = " width=device-width, initial-scale=1, shrink-to-fit=no " >
2023-11-02 20:58:40 +01:00
< meta name = " apple-mobile-web-app-capable " content = " yes " >
2023-11-05 14:07:05 +01:00
< meta name = " mobile-web-app-capable " content = " yes " >
< meta name = " apple-mobile-web-app-status-bar-style " content = " default " >
2023-11-05 13:35:22 +01:00
< link rel = " manifest " href = " <?php echo base_url(); ?>manifest.json " />
2023-11-23 12:14:37 +01:00
2023-09-12 14:30:28 +01:00
<!-- Bootstrap CSS -->
< ? php if ( $this -> optionslib -> get_theme ()) { ?>
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/<?php echo $this->optionslib ->get_theme(); ?>/bootstrap.min.css " >
2020-12-06 17:28:47 +00:00
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/general.css " >
2023-09-12 14:30:28 +01:00
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/selectize.bootstrap4.css " />
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/bootstrap-dialog.css " />
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/<?php echo $this->optionslib ->get_theme(); ?>/overrides.css " >
2020-09-24 20:03:05 +01:00
< ? php } ?>
2020-12-06 17:28:47 +00:00
2024-11-20 21:52:52 +00:00
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/fontawesome/css/fontawesome.css " >
< link href = " <?php echo base_url(); ?>assets/fontawesome/css/brands.css " rel = " stylesheet " />
< link href = " <?php echo base_url(); ?>assets/fontawesome/css/solid.css " rel = " stylesheet " />
2025-01-15 16:30:17 +00:00
2020-03-01 18:08:17 +00:00
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/jquery.fancybox.min.css " />
2024-05-24 16:43:32 +02:00
< link rel = " stylesheet " href = " <?php echo base_url(); ?>assets/css/flag-icons.min.css " />
2019-03-20 17:47:40 +00:00
2026-07-06 17:18:39 +01:00
< ? php
2026-08-06 14:48:05 +01:00
$load_leaflet = in_array ( $this -> uri -> segment ( 1 ), [ NULL , '' , 'dashboard' , 'logbook' , 'logbookadvanced' , 'gridmap' , 'activated_gridmap' , 'qso' , 'map' , 'search' , 'activators' , 'activatorsmap' ], true )
2026-07-06 17:18:39 +01:00
|| ( $this -> uri -> segment ( 1 ) == 'awards' && in_array ( $this -> uri -> segment ( 2 ), [ 'cq' , 'iota' , 'dxcc' , 'ffma' , 'gridmaster' , 'waja' , 'was' , 'sota' , 'pota' ], true ));
?>
2023-09-12 14:30:28 +01:00
<!-- Maps -->
2026-07-06 17:18:39 +01:00
< ? php if ( $load_leaflet ) { ?>
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/js/leaflet/leaflet.css " />
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/js/leaflet/Control.FullScreen.css " />
< ? php } ?>
2019-03-20 16:58:06 +00:00
2023-09-12 14:30:28 +01:00
< ? php if ( $this -> uri -> segment ( 1 ) == " search " && $this -> uri -> segment ( 2 ) == " filter " ) { ?>
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/css/query-builder.default.min.css " />
2019-09-12 00:53:39 +01:00
< ? php } ?>
2019-10-05 21:57:44 +01:00
Add public Station Diary with images & RSS
Introduce public Station Diary functionality: add global config flag, routes, controller, model changes, views and DB migrations. New migrations (252-254) add is_public/include_qso_summary, diary_images table and logbook_id on notes. Notes model updated to handle public flags, diary images, qso summaries, caching (per-user cache version), and helper methods for listing/counting public diary entries. New Stationdiary controller serves paginated public pages and RSS feed with caching. Notes controller updated to handle image uploads, attach images to diary entries, and provide an AJAX endpoint to delete images. Views updated to support public visibility options, logbook selector, image upload UI and Quill editor assets; routes and migration version bumped accordingly. Includes file upload example added to uploads/diary.
2026-03-08 11:42:41 +00:00
< ? php if (( $this -> uri -> segment ( 1 ) == " notes " && ( $this -> uri -> segment ( 2 ) == " add " || $this -> uri -> segment ( 2 ) == " edit " )) || ( $this -> uri -> segment ( 1 ) == " logbook " && $this -> uri -> segment ( 2 ) != " view " )) { ?>
2023-09-12 14:30:28 +01:00
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/plugins/quill/quill.snow.css " />
2020-05-24 22:40:37 +01:00
< ? php } ?>
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/css/loading.min.css " />
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/css/ldbtn.min.css " />
2023-09-12 14:30:28 +01:00
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/css/buttons.dataTables.min.css " />
2020-08-19 07:57:35 +02:00
2023-09-12 14:30:28 +01:00
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/css/datatables.min.css " />
2020-09-22 21:08:26 +02:00
2023-09-19 13:59:19 +02:00
< ? php if ( $this -> uri -> segment ( 1 ) == " sattimers " ) { ?>
< link rel = " stylesheet " type = " text/css " href = " <?php echo base_url(); ?>assets/css/sattimers.css " />
< ? php } ?>
2023-09-12 14:30:28 +01:00
< ? php if ( file_exists ( APPPATH . '../assets/css/custom.css' )) {
echo '<link rel="stylesheet" href="' . base_url () . 'assets/css/custom.css">' ;
} ?>
2021-04-10 05:02:01 +02:00
2023-11-23 12:14:37 +01:00
< ? php if ( file_exists ( APPPATH . '../assets/js/sections/custom.js' )) {
echo '<script src="' . base_url () . 'assets/js/sections/custom.js"></script>' ;
} ?>
2023-09-12 14:30:28 +01:00
< link rel = " icon " href = " <?php echo base_url(); ?>favicon.ico " >
2019-05-21 14:00:39 +01:00
2023-09-12 14:30:28 +01:00
< title >< ? php if ( isset ( $page_title )) {
echo $page_title ;
} ?> - Cloudlog</title>
</ head >
2019-01-09 15:18:46 +00:00
2023-09-12 14:30:28 +01:00
< body >
2019-01-09 15:18:46 +00:00
2023-09-12 14:30:28 +01:00
< nav class = " navbar navbar-expand-lg navbar-light bg-light main-nav " >
< div class = " container " >
2026-04-08 22:18:02 +01:00
< ? php
$show_eqsl_menu = ( bool ) $this -> session -> userdata ( 'has_eqsl_credentials' );
2026-04-08 22:26:05 +01:00
$show_qsl_cards_setting = $this -> session -> userdata ( 'user_show_qsl_cards' );
$show_qsl_cards_menu = true ;
if ( $show_qsl_cards_setting !== NULL && $show_qsl_cards_setting !== '' ) {
$show_qsl_cards_menu = filter_var ( $show_qsl_cards_setting , FILTER_VALIDATE_BOOLEAN , FILTER_NULL_ON_FAILURE );
if ( $show_qsl_cards_menu === NULL ) {
$show_qsl_cards_menu = true ;
}
}
2026-04-08 22:18:02 +01:00
$show_sstv_images_setting = $this -> session -> userdata ( 'user_show_sstv_images' );
$show_sstv_menu = false ;
if ( $show_sstv_images_setting !== NULL && $show_sstv_images_setting !== '' ) {
$show_sstv_menu = filter_var ( $show_sstv_images_setting , FILTER_VALIDATE_BOOLEAN , FILTER_NULL_ON_FAILURE );
if ( $show_sstv_menu === NULL ) {
$show_sstv_menu = false ;
}
}
?>
2023-11-14 13:35:53 +01:00
< a class = " navbar-brand " href = " <?php echo site_url(); ?> " > Cloudlog </ a > < ? php if ( ENVIRONMENT == " development " ) { ?> <span class="badge text-bg-danger"><?php echo lang('menu_badge_developer_mode'); ?></span><?php } ?>
2019-01-09 15:18:46 +00:00
2023-11-14 13:35:53 +01:00
< button class = " navbar-toggler " type = " button " data - bs - toggle = " collapse " data - bs - target = " #navbarNav " aria - controls = " navbarNav " aria - expanded = " false " aria - label = " Toggle navigation " >< span class = " navbar-toggler-icon " ></ span ></ button >
2021-02-12 23:27:08 +01:00
2023-09-12 14:30:28 +01:00
< div class = " collapse navbar-collapse " id = " navbarNav " >
2019-01-09 15:18:46 +00:00
2023-09-12 14:30:28 +01:00
< ul class = " navbar-nav " >
< li class = " nav-item active " >
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " > < ? php echo lang ( 'menu_logbook' ); ?> </a>
2019-01-09 15:18:46 +00:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('logbook'); ?> " >< i class = " fas fa-atlas " ></ i > < ? php echo lang ( 'menu_overview' ); ?> </a>
2019-01-09 15:18:46 +00:00
< div class = " dropdown-divider " ></ div >
2023-09-12 14:30:28 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('logbookadvanced'); ?> " >< i class = " fas fa-book-open " ></ i > < ? php echo lang ( 'menu_advanced' ); ?> </a>
2026-04-08 22:26:05 +01:00
< ? php if ( $show_qsl_cards_menu ) { ?>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('qsl'); ?> " title = " QSL " >< i class = " fas fa-envelope " ></ i > < ? php echo lang ( 'menu_view_qsl' ); ?> </a>
< ? php } ?>
2026-04-08 22:18:02 +01:00
< ? php if ( $show_eqsl_menu ) { ?>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('eqsl'); ?> " title = " eQSL " >< i class = " fas fa-at " ></ i > < ? php echo lang ( 'menu_view_eqsl' ); ?> </a>
< ? php } ?>
< ? php if ( $show_sstv_menu ) { ?>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('sstv'); ?> " title = " SSTV " >< i class = " fa fa-image " ></ i > < ? php echo lang ( 'menu_view_sstv' ); ?> </a>
< ? php } ?>
2019-01-09 15:18:46 +00:00
</ div >
2023-09-12 14:30:28 +01:00
</ li >
< ? php if (( $this -> config -> item ( 'use_auth' )) && ( $this -> session -> userdata ( 'user_type' ) >= 2 )) { ?>
<!-- QSO Menu Dropdown -->
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " >< ? php echo lang ( 'menu_qso' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2025-11-25 15:36:31 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('qso?manual=0'); ?> " title = " Log Live QSOs " >< i class = " fas fa-pencil-alt " ></ i > < ? php echo lang ( 'menu_live_qso' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2025-11-25 15:36:31 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('contesting?manual=0'); ?> " title = " Contest QSOs " >< i class = " fas fa-trophy " ></ i > < ? php echo lang ( 'menu_live_contest_logging' ); ?> </a>
2023-10-24 22:54:17 +02:00
< div class = " dropdown-divider " ></ div >
2025-11-25 15:36:31 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('simplefle'); ?> " title = " Simple Fast Log Entry " >< i class = " fas fa-edit " ></ i > < ? php echo lang ( 'menu_fast_log_entry' ); ?> </a>
2023-09-12 14:30:28 +01:00
</ div >
</ li >
<!-- Notes -->
< ? php if ( $this -> session -> userdata ( 'user_show_notes' ) == 1 ) { ?>
< a class = " nav-link " href = " <?php echo site_url('notes'); ?> " >< ? php echo lang ( 'menu_notes' ); ?> </a>
< ? php } ?>
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " >< ? php echo lang ( 'menu_analytics' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('statistics'); ?> " title = " Statistics " >< i class = " fas fa-chart-pie " ></ i > < ? php echo lang ( 'menu_statistics' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2025-11-14 16:39:56 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('monthlyreport'); ?> " title = " Monthly Report " >< i class = " fas fa-calendar-alt " ></ i > Monthly Report </ a >
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('gridmap'); ?> " title = " Gridmap " >< i class = " fas fa-layer-group " ></ i > < ? php echo lang ( 'menu_gridmap' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('activated_gridmap'); ?> " title = " Activated Gridsquares " >< i class = " fas fa-th-large " ></ i > < ? php echo lang ( 'menu_activated_gridsquares' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('activators'); ?> " title = " Gridsquare Activators " >< i class = " fas fa-th " ></ i > < ? php echo lang ( 'menu_gridsquare_activators' ); ?> </a>
2025-11-25 15:41:23 +00:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('distances'); ?> " title = " Distances " >< i class = " fas fa-ruler " ></ i > < ? php echo lang ( 'menu_distances_worked' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('dayswithqso'); ?> " title = " Days with QSOs " >< i class = " fas fa-chart-area " ></ i > < ? php echo lang ( 'menu_days_with_qsos' ); ?> </a>
2025-11-25 15:41:23 +00:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('timeline'); ?> " title = " Timeline " >< i class = " fas fa-stream " ></ i > < ? php echo lang ( 'menu_timeline' ); ?> </a>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('accumulated'); ?> " title = " Accumulated Statistics " >< i class = " fas fa-chart-line " ></ i > < ? php echo lang ( 'menu_accumulated_statistics' ); ?> </a>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('timeplotter'); ?> " title = " View time when worked " >< i class = " fas fa-clock " ></ i > < ? php echo lang ( 'menu_timeplotter' ); ?> </a>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('mostworked'); ?> " title = " Most Worked Callsigns " >< i class = " fas fa-user-friends " ></ i > < ? php echo lang ( 'menu_most_worked' ); ?> </a>
2025-08-23 21:11:36 +01:00
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('map/custom'); ?> " title = " Custom Maps of QSOs " >< i class = " fas fa-map " ></ i > < ? php echo lang ( 'menu_custom_maps' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('continents'); ?> " title = " Continents " >< i class = " fas fa-globe-europe " ></ i > < ? php echo lang ( 'menu_continents' ); ?> </a>
2025-11-25 15:41:23 +00:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('emeinitials'); ?> " title = " EME Initials " >< i class = " fas fa-moon " ></ i > < ? php echo lang ( 'menu_eme_initials' ); ?> </a>
2023-09-12 14:30:28 +01:00
</ div >
</ li >
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " >< ? php echo lang ( 'menu_awards' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2025-12-02 13:32:11 +00:00
< ? php
// Load award preferences for current user
$CI =& get_instance ();
$CI -> load -> model ( 'awards_model' );
$user_awards = $CI -> awards_model -> get_user_awards ();
if ( $user_awards -> cq == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/cq'); ?> " >< i class = " fas fa-globe-americas " ></ i > < ? php echo lang ( 'menu_cq' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> dok == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/dok'); ?> " >< i class = " fas fa-flag " ></ i > < ? php echo lang ( 'menu_dok' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> dxcc == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/dxcc'); ?> " >< i class = " fas fa-globe " ></ i > < ? php echo lang ( 'menu_dxcc' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> ffma == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/ffma'); ?> " >< i class = " fas fa-seedling " ></ i > < ? php echo lang ( 'menu_ffma' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> iota == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/iota'); ?> " >< i class = " fas fa-water " ></ i > < ? php echo lang ( 'menu_iota' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> gridmaster_dl == 1 || $user_awards -> gridmaster_lx == 1 || $user_awards -> gridmaster_ja == 1 || $user_awards -> gridmaster_us == 1 || $user_awards -> gridmaster_uk == 1 ) { ?>
2026-02-17 22:58:21 +00:00
< div class = " nav-item dropdown dropdown-submenu dropdown-submenu-left " aria - labelledby = " navbarDropdown " >< a class = " dropdown-item dropdown-toggle " href = " # " >< i class = " fas fa-th " ></ i > Gridmaster </ a >
2023-12-10 00:54:11 +01:00
< ul class = " dropdown-menu " >
2025-12-02 13:32:11 +00:00
< ? php if ( $user_awards -> gridmaster_dl == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< li >< a class = " dropdown-item " href = " <?php echo site_url('awards/gridmaster/dl'); ?> " >< i class = " fas fa-th " ></ i > < ? php echo lang ( 'menu_dl_gridmaster' ); ?> </a></li>
2023-12-12 21:22:46 +01:00
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> gridmaster_lx == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< li >< a class = " dropdown-item " href = " <?php echo site_url('awards/gridmaster/lx'); ?> " >< i class = " fas fa-th " ></ i > < ? php echo lang ( 'menu_lx_gridmaster' ); ?> </a></li>
2023-12-12 21:22:46 +01:00
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> gridmaster_ja == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< li >< a class = " dropdown-item " href = " <?php echo site_url('awards/gridmaster/ja'); ?> " >< i class = " fas fa-th " ></ i > < ? php echo lang ( 'menu_ja_gridmaster' ); ?> </a></li>
2023-12-10 00:54:11 +01:00
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> gridmaster_us == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< li >< a class = " dropdown-item " href = " <?php echo site_url('awards/gridmaster/us'); ?> " >< i class = " fas fa-th " ></ i > < ? php echo lang ( 'menu_us_gridmaster' ); ?> </a></li>
2024-05-15 14:35:08 +01:00
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> gridmaster_uk == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< li >< a class = " dropdown-item " href = " <?php echo site_url('awards/gridmaster/uk'); ?> " >< i class = " fas fa-th " ></ i > < ? php echo lang ( 'menu_uk_gridmaster' ); ?> </a></li>
2025-12-02 13:32:11 +00:00
< ? php } ?>
2023-12-10 00:54:11 +01:00
</ ul >
</ div >
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> gmdxsummer == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/gmdxsummer'); ?> " >< i class = " fas fa-medal " ></ i > GMDX Summer Challenge </ a >
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> pota == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/pota'); ?> " >< i class = " fas fa-tree " ></ i > < ? php echo lang ( 'menu_pota' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> sig == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/sig'); ?> " >< i class = " fas fa-certificate " ></ i > < ? php echo lang ( 'menu_sig' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> sota == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/sota'); ?> " >< i class = " fas fa-mountain " ></ i > < ? php echo lang ( 'menu_sota' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> uscounties == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/counties'); ?> " >< i class = " fas fa-map-marked-alt " ></ i > < ? php echo lang ( 'menu_us_counties' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> vucc == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/vucc'); ?> " >< i class = " fas fa-th-large " ></ i > < ? php echo lang ( 'menu_vucc' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> wab == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/wab'); ?> " >< i class = " fas fa-map-pin " ></ i > Worked All Britain </ a >
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> waja == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/waja'); ?> " >< i class = " fas fa-torii-gate " ></ i > < ? php echo lang ( 'menu_waja' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> was == 1 ) { ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('awards/was'); ?> " >< i class = " fas fa-flag-usa " ></ i > < ? php echo lang ( 'menu_was' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2025-12-02 13:32:11 +00:00
< ? php } ?>
< ? php if ( $user_awards -> wwff == 1 ) { ?>
< a class = " dropdown-item " href = " <?php echo site_url('awards/wwff'); ?> " >< i class = " fas fa-leaf " ></ i > < ? php echo lang ( 'menu_wwff' ); ?> </a>
< div class = " dropdown-divider " ></ div >
< ? php } ?>
Add plugin system and Plugin Manager
Introduce a plugin framework and management UI: adds Plugin Manager controller, Plugin_awards controller, Plugin_manager and Cloudlog_hooks libraries, Plugins_model, migration (268) to create the plugins table, and views for plugin manager and award pages. Integrates hooks into Logbook_model (qso.filter.before_save, qso.action.after_save, qso.action.after_edit), updates header to show award plugin entries and a Plugin Manager menu link, and bumps migration_version to 268. Also adds .gitignore rules, plugin index placeholder, docs and example plugin packages. The Plugin Manager supports uploading/installing ZIP packages, safe extraction, manifest validation, enable/disable/delete actions, and CSRF protection.
2026-04-29 22:33:22 +01:00
< ? php
$CI -> load -> library ( 'plugin_manager' );
2026-04-29 22:40:24 +01:00
$CI -> load -> model ( 'user_options_model' );
Add plugin system and Plugin Manager
Introduce a plugin framework and management UI: adds Plugin Manager controller, Plugin_awards controller, Plugin_manager and Cloudlog_hooks libraries, Plugins_model, migration (268) to create the plugins table, and views for plugin manager and award pages. Integrates hooks into Logbook_model (qso.filter.before_save, qso.action.after_save, qso.action.after_edit), updates header to show award plugin entries and a Plugin Manager menu link, and bumps migration_version to 268. Also adds .gitignore rules, plugin index placeholder, docs and example plugin packages. The Plugin Manager supports uploading/installing ZIP packages, safe extraction, manifest validation, enable/disable/delete actions, and CSRF protection.
2026-04-29 22:33:22 +01:00
$plugin_award_entries = $CI -> plugin_manager -> get_award_menu_entries ();
2026-04-29 22:40:24 +01:00
$plugin_award_visibility = array ();
$plugin_award_visibility_query = $CI -> user_options_model -> get_options ( 'plugin_awards_menu' );
foreach ( $plugin_award_visibility_query -> result () as $plugin_award_visibility_row ) {
if ( $plugin_award_visibility_row -> option_key === 'show' ) {
$plugin_award_visibility [ $plugin_award_visibility_row -> option_name ] = ( string ) $plugin_award_visibility_row -> option_value === '1' ;
}
}
Add plugin system and Plugin Manager
Introduce a plugin framework and management UI: adds Plugin Manager controller, Plugin_awards controller, Plugin_manager and Cloudlog_hooks libraries, Plugins_model, migration (268) to create the plugins table, and views for plugin manager and award pages. Integrates hooks into Logbook_model (qso.filter.before_save, qso.action.after_save, qso.action.after_edit), updates header to show award plugin entries and a Plugin Manager menu link, and bumps migration_version to 268. Also adds .gitignore rules, plugin index placeholder, docs and example plugin packages. The Plugin Manager supports uploading/installing ZIP packages, safe extraction, manifest validation, enable/disable/delete actions, and CSRF protection.
2026-04-29 22:33:22 +01:00
if ( ! empty ( $plugin_award_entries )) {
2026-04-29 22:40:24 +01:00
foreach ( $plugin_award_entries as $plugin_award_entry ) {
$show_plugin_award = true ;
if ( isset ( $plugin_award_visibility [ $plugin_award_entry [ 'slug' ]])) {
$show_plugin_award = ( bool ) $plugin_award_visibility [ $plugin_award_entry [ 'slug' ]];
}
if ( ! $show_plugin_award ) {
continue ;
}
?>
Add plugin system and Plugin Manager
Introduce a plugin framework and management UI: adds Plugin Manager controller, Plugin_awards controller, Plugin_manager and Cloudlog_hooks libraries, Plugins_model, migration (268) to create the plugins table, and views for plugin manager and award pages. Integrates hooks into Logbook_model (qso.filter.before_save, qso.action.after_save, qso.action.after_edit), updates header to show award plugin entries and a Plugin Manager menu link, and bumps migration_version to 268. Also adds .gitignore rules, plugin index placeholder, docs and example plugin packages. The Plugin Manager supports uploading/installing ZIP packages, safe extraction, manifest validation, enable/disable/delete actions, and CSRF protection.
2026-04-29 22:33:22 +01:00
< a class = " dropdown-item " href = " <?php echo site_url( $plugin_award_entry['route'] ); ?> " >< i class = " <?php echo htmlspecialchars( $plugin_award_entry['icon'] ); ?> " ></ i > < ? php echo htmlspecialchars ( $plugin_award_entry [ 'title' ]); ?> </a>
< div class = " dropdown-divider " ></ div >
< ? php }
} ?>
2025-12-02 13:32:11 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('award'); ?> " >< i class = " fas fa-cog " ></ i > < ? php echo lang ( 'awards_menu_settings' ); ?> </a>
</ div >
</ li > < li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " title = " Tools " >< i class = " fas fa-tools " ></ i >
2023-11-04 21:34:08 +01:00
< div class = " d-inline d-lg-none " style = " padding-left: 10px " > Tools </ div >
</ a >
2023-10-09 11:03:16 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2026-01-05 22:14:00 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('propagationadvisor'); ?> " title = " <?php echo lang('menu_propagation_advisor'); ?> " >< i class = " fas fa-clock " ></ i > < ? php echo lang ( 'menu_propagation_advisor' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2026-03-24 22:36:54 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('callhistory'); ?> " title = " Call History " >< i class = " fas fa-address-book " ></ i > Call History </ a >
< div class = " dropdown-divider " ></ div >
2025-10-02 18:06:07 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('dxcluster'); ?> " title = " DX Cluster " >< i class = " fas fa-broadcast-tower " ></ i > DX Cluster </ a >
< div class = " dropdown-divider " ></ div >
2024-02-15 15:30:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('workabledxcc'); ?> " title = " Upcoming DXPeditions " >< i class = " fas fa-globe " ></ i > Upcoming DXPeditions </ a >
< div class = " dropdown-divider " ></ div >
2023-10-09 11:03:16 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('hamsat'); ?> " title = " Hams.at " >< i class = " fas fa-list " ></ i > Hams . at </ a >
</ div >
</ li >
2023-09-12 14:30:28 +01:00
< ? php if (( $this -> config -> item ( 'use_auth' )) && ( $this -> session -> userdata ( 'user_type' ) == 99 )) { ?>
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " title = " <?php echo lang('menu_admin'); ?> " >< i class = " fas fa-users-cog " ></ i >
2023-11-04 21:34:08 +01:00
< div class = " d-inline d-lg-none " style = " padding-left: 10px " >< ? php echo lang ( 'menu_admin' ); ?> </div>
</ a >
2023-09-12 14:30:28 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('user'); ?> " title = " Manage user accounts " >< i class = " fas fa-users " ></ i > < ? php echo lang ( 'menu_user_account' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('options'); ?> " title = " Manage global options " >< i class = " fas fa-cog " ></ i > < ? php echo lang ( 'menu_global_options' ); ?> </a>
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('mode'); ?> " title = " Manage QSO modes " >< i class = " fas fa-broadcast-tower " ></ i > < ? php echo lang ( 'menu_modes' ); ?> </a>
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('contesting/add'); ?> " title = " Manage Contest names " >< i class = " fas fa-medal " ></ i > < ? php echo lang ( 'menu_contests' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('themes'); ?> " title = " Manage Themes " >< i class = " fas fa-palette " ></ i > < ? php echo lang ( 'menu_themes' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('update'); ?> " title = " Update Country Files " >< i class = " fas fa-download " ></ i > < ? php echo lang ( 'menu_update_country_files' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('maintenance'); ?> " title = " maintenance " >< i class = " fas fa-wrench " ></ i > < ? php echo lang ( 'menu_maintenance' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
Add plugin system and Plugin Manager
Introduce a plugin framework and management UI: adds Plugin Manager controller, Plugin_awards controller, Plugin_manager and Cloudlog_hooks libraries, Plugins_model, migration (268) to create the plugins table, and views for plugin manager and award pages. Integrates hooks into Logbook_model (qso.filter.before_save, qso.action.after_save, qso.action.after_edit), updates header to show award plugin entries and a Plugin Manager menu link, and bumps migration_version to 268. Also adds .gitignore rules, plugin index placeholder, docs and example plugin packages. The Plugin Manager supports uploading/installing ZIP packages, safe extraction, manifest validation, enable/disable/delete actions, and CSRF protection.
2026-04-29 22:33:22 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('plugins'); ?> " title = " Plugin Manager " >< i class = " fas fa-puzzle-piece " ></ i > Plugin Manager </ a >
< div class = " dropdown-divider " ></ div >
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('debug'); ?> " title = " Debug Information " >< i class = " fas fa-bug " ></ i > < ? php echo lang ( 'menu_debug_information' ); ?> </a>
2023-09-12 14:30:28 +01:00
</ div >
</ li >
< ? php } ?>
< ? php } ?>
</ ul >
2023-11-04 18:34:16 +01:00
< ? php if ( $this -> session -> userdata ( 'user_quicklog' ) == 1 ) { ?>
2023-11-04 21:34:08 +01:00
< script >
function submitForm ( action ) {
var form = document . getElementById ( 'quicklog-form' );
var input = document . getElementById ( 'quicklog-input' );
if ( action === 'search' ) {
form . action = " <?php echo site_url('search'); ?> " ;
2026-08-06 15:05:04 +01:00
form . method = " get " ;
2023-11-04 21:34:08 +01:00
}
form . submit ();
}
2023-11-06 22:17:01 +01:00
function logQuicklog () {
if ( localStorage . getItem ( " quicklogCallsign " ) !== " " ) {
localStorage . removeItem ( " quicklogCallsign " );
}
2023-11-12 13:14:56 +01:00
localStorage . setItem ( " quicklogCallsign " , $ ( " input[name='callsign'] " ) . val ());
2023-11-06 22:17:01 +01:00
window . open ( " <?php echo site_url('qso?manual=0'); ?> " , " _self " );
}
2023-11-04 21:34:08 +01:00
</ script >
2023-11-05 12:30:33 +01:00
< ? php if ( $this -> session -> userdata ( 'user_quicklog_enter' ) == 1 ) { ?>
< script >
function handleKeyPress ( event ) {
if ( event . key === 'Enter' ) {
submitForm ( 'search' ); // Treat Enter key press as clicking the 'quicksearch-search' button
}
}
</ script >
< ? php } else { ?>
< script >
function handleKeyPress ( event ) {
if ( event . key === 'Enter' ) {
2023-11-06 22:20:18 +01:00
logQuicklog (); // Treat Enter key press as clicking the 'quicksearch-log' button
2023-11-05 12:30:33 +01:00
}
}
</ script >
< ? php } ?>
2023-11-14 13:35:53 +01:00
< form id = " quicklog-form " class = " d-flex align-items-center " onsubmit = " return false; " >
2023-12-12 20:56:21 +01:00
< input class = " form-control me-2 " id = " nav-bar-search-input " type = " text " name = " callsign " placeholder = " <?php echo lang('menu_search_text_quicklog'); ?> " aria - label = " Quicklog " onkeypress = " handleKeyPress(event) " >
2023-11-04 21:15:36 +01:00
2023-11-06 22:17:01 +01:00
< button title = " <?php echo lang('menu_search_button_qicksearch_log'); ?> " class = " btn btn-outline-success my-2 my-sm-0 " type = " button " onclick = " logQuicklog() " >< i class = " fas fa-plus " ></ i >
2023-11-04 21:15:36 +01:00
</ button >
< button title = " <?php echo lang('menu_search_button'); ?> " class = " btn btn-outline-success my-2 my-sm-0 " type = " button " onclick = " submitForm('search') " style = " margin-left: 5px " >< i class = " fas fa-search " ></ i >
</ button >
2023-11-04 18:34:16 +01:00
</ form >
2023-11-04 21:15:36 +01:00
< ? php } else { ?>
2026-08-06 15:05:04 +01:00
< form method = " get " class = " d-flex align-items-center " action = " <?php echo site_url('search'); ?> " >
2023-12-12 20:56:21 +01:00
< input class = " form-control me-2 " id = " nav-bar-search-input " type = " search " name = " callsign " placeholder = " <?php echo lang('menu_search_text'); ?> " aria - label = " Search " >
2023-11-04 21:15:36 +01:00
< button title = " <?php echo lang('menu_search_button'); ?> " class = " btn btn-outline-success my-2 my-sm-0 " type = " submit " >< i class = " fas fa-search " ></ i >
</ button >
2023-09-12 14:30:28 +01:00
</ form >
< ? php } ?>
< ? php if (( $this -> config -> item ( 'use_auth' )) && ( $this -> session -> userdata ( 'user_type' ) >= 2 )) { ?>
<!-- Logged in Content -->
< ? php } else { ?>
<!-- Not Logged In -->
< form method = " post " action = " <?php echo site_url('user/login'); ?> " style = " padding-left: 5px; " class = " form-inline " >
2023-11-14 13:35:53 +01:00
< input class = " form-control me-sm-2 " type = " text " name = " user_name " placeholder = " Username " aria - label = " Username " >
< input class = " form-control me-sm-2 " type = " password " name = " user_password " placeholder = " Password " aria - label = " Password " >
2023-09-12 14:30:28 +01:00
< input type = " hidden " name = " id " value = " <?php echo $this->uri ->segment(3); ?> " />
2023-11-14 13:35:53 +01:00
< button class = " btn btn-outline-success me-sm-2 " type = " submit " >< ? php echo lang ( 'menu_login_button' ); ?> </button>
2023-09-12 14:30:28 +01:00
</ form >
< ? php } ?>
< ? php if (( $this -> config -> item ( 'use_auth' )) && ( $this -> session -> userdata ( 'user_type' ) >= 2 )) { ?>
< ul class = " navbar-nav " >
<!-- Logged in As -->
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " >< i class = " fas fa-user " ></ i > < ? php echo $this -> session -> userdata ( 'user_callsign' ); ?> </a>
2023-09-12 14:30:28 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('user/edit') . " / " . $this->session ->userdata('user_id'); ?> " title = " Account " >< i class = " fas fa-user " ></ i > < ? php echo lang ( 'menu_account' ); ?> </a>
2023-09-12 14:30:28 +01:00
2025-12-09 16:23:21 +00:00
< ? php if ( $this -> config -> item ( 'subscription_management_url' )) { ?>
< a class = " dropdown-item " href = " <?php echo $this->config ->item('subscription_management_url'); ?> " target = " _blank " title = " Manage Subscription " >< i class = " fas fa-credit-card " ></ i > Manage Subscription </ a >
< ? php } ?>
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('logbooks'); ?> " title = " Manage station logbooks " >< i class = " fas fa-book " ></ i > < ? php echo lang ( 'menu_station_logbooks' ); ?> </a> <a class="dropdown-item" href="<?php echo site_url('station'); ?>" title="Manage station locations"><i class="fas fa-map-marker-alt"></i> <?php echo lang('menu_station_locations'); ?></a>
2023-09-12 14:30:28 +01:00
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('band'); ?> " title = " Manage Bands " >< i class = " fas fa-wave-square " ></ i > < ? php echo lang ( 'menu_bands' ); ?> </a>
2019-09-11 17:32:40 +01:00
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2021-02-12 23:27:08 +01:00
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('adif'); ?> " title = " Amateur Data Interchange Format (ADIF) import / export " >< i class = " fas fa-sync-alt " ></ i > < ? php echo lang ( 'menu_adif_import_export' ); ?> </a>
2021-02-12 23:27:08 +01:00
2026-02-17 22:58:21 +00:00
< div class = " nav-item dropdown dropdown-submenu dropdown-submenu-left " aria - labelledby = " navbarDropdown " >< a class = " dropdown-item dropdown-toggle " href = " # " >< i class = " fas fa-file-export " ></ i > Other Export Options </ a >
2023-12-12 16:27:41 +00:00
< ul class = " dropdown-menu " >
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('kmlexport'); ?> " title = " KML Export for Google Earth " >< i class = " fas fa-map " ></ i > < ? php echo lang ( 'menu_kml_export' ); ?> </a>
2023-03-17 17:54:35 +00:00
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('dxatlas'); ?> " title = " DX Atlas Gridsquare Export " >< i class = " fas fa-globe-europe " ></ i > < ? php echo lang ( 'menu_dx_atlas_gridsquare_export' ); ?> </a>
2021-03-14 10:11:21 +01:00
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('csv'); ?> " title = " SOTA CSV Export " >< i class = " fas fa-mountain " ></ i > < ? php echo lang ( 'menu_sota_csv_export' ); ?> </a>
2022-09-19 16:34:13 +02:00
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('cabrillo'); ?> " title = " Cabrillo Export " >< i class = " fas fa-file-alt " ></ i > < ? php echo lang ( 'menu_cabrillo_export' ); ?> </a>
2024-06-20 12:37:40 +02:00
</ ul >
</ div >
2026-02-17 22:58:21 +00:00
< div class = " nav-item dropdown dropdown-submenu dropdown-submenu-left " aria - labelledby = " navbarDropdown " >< a class = " dropdown-item dropdown-toggle " href = " # " >< i class = " fas fa-sync " ></ i > Third Party Logbooks </ a >
2024-06-20 12:37:40 +02:00
< ul class = " dropdown-menu " >
< a class = " dropdown-item " href = " <?php echo site_url('lotw'); ?> " title = " Synchronise with Logbook of the World (LoTW) " >< i class = " fas fa-sync " ></ i > < ? php echo lang ( 'menu_logbook_of_the_world' ); ?> </a>
< a class = " dropdown-item " href = " <?php echo site_url('eqsl/import'); ?> " title = " eQSL import / export " >< i class = " fas fa-sync " ></ i > < ? php echo lang ( 'menu_eqsl_import_export' ); ?> </a>
< a class = " dropdown-item " href = " <?php echo site_url('hrdlog/export'); ?> " title = " Upload to HRDLog.net logbook " >< i class = " fas fa-upload " ></ i > < ? php echo lang ( 'menu_hrd_logbook' ); ?> </a>
< a class = " dropdown-item " href = " <?php echo site_url('qrz/export'); ?> " title = " Upload to QRZ.com logbook " >< i class = " fas fa-sync " ></ i > < ? php echo lang ( 'menu_qrz_logbook' ); ?> </a>
< a class = " dropdown-item " href = " <?php echo site_url('webadif/export'); ?> " title = " Upload to webADIF " >< i class = " fas fa-upload " ></ i > < ? php echo lang ( 'menu_qo_100_dx_club_upload' ); ?> </a>
2023-12-12 16:27:41 +00:00
</ ul >
</ div >
2025-11-24 17:35:12 +00:00
2025-11-25 15:41:23 +00:00
< div class = " dropdown-divider " ></ div >
< a class = " dropdown-item " href = " <?php echo site_url('backup'); ?> " title = " Backup Cloudlog content " >< i class = " fas fa-database " ></ i > < ? php echo lang ( 'menu_backup' ); ?> </a> <div class="dropdown-divider"></div>
2021-03-12 16:22:40 +00:00
2023-09-12 14:30:28 +01:00
< ? php
$CI = & get_instance ();
$CI -> load -> model ( 'oqrs_model' );
$CI -> load -> model ( 'logbooks_model' );
$logbooks_locations_array = $CI -> logbooks_model -> list_logbook_relationships ( $this -> session -> userdata ( 'active_station_logbook' ));
if ( $logbooks_locations_array ) {
$location_list = " ' " . implode ( " ',' " , $logbooks_locations_array ) . " ' " ;
} else {
$location_list = null ;
}
2021-03-12 16:22:40 +00:00
2023-09-12 14:30:28 +01:00
$oqrs_requests = $CI -> oqrs_model -> oqrs_requests ( $location_list );
?>
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('oqrs/requests'); ?> " title = " OQRS Requests " >< i class = " fa fa-envelope-open-text " ></ i > < ? php echo lang ( 'menu_oqrs_requests' ); ?> <?php if ($oqrs_requests > 0) {
2023-11-14 18:00:22 +01:00
echo " <span class= \" badge text-bg-light \" > " . $oqrs_requests . " </span> " ;
2023-09-12 14:30:28 +01:00
} ?> </a>
2021-07-29 12:05:52 +02:00
2023-09-12 14:30:28 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('qslprint'); ?> " title = " Print Requested QSLs " >< i class = " fas fa-print " ></ i > < ? php echo lang ( 'menu_print_requested_qsls' ); ?> </a>
2022-03-16 11:27:54 +01:00
2024-06-20 12:37:40 +02:00
< a class = " dropdown-item " href = " <?php echo site_url('labels'); ?> " title = " Label setup " >< i class = " fas fa-address-card " ></ i > < ? php echo lang ( 'menu_labels' ); ?> </a>
2023-06-02 18:50:27 +02:00
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2022-12-29 13:34:44 +00:00
2023-09-12 14:30:28 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('api/help'); ?> " title = " Manage API keys " >< i class = " fas fa-key " ></ i > < ? php echo lang ( 'menu_api_keys' ); ?> </a>
2021-03-12 16:22:40 +00:00
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " <?php echo site_url('radio'); ?> " title = " Interface with one or more radios " >< i class = " fas fa-plug " ></ i > < ? php echo lang ( 'menu_hardware_interfaces' ); ?> </a>
2021-03-12 16:22:40 +00:00
2025-11-25 15:41:23 +00:00
< div class = " dropdown-divider " ></ div >
2023-12-04 01:21:00 +01:00
2025-11-25 15:41:23 +00:00
< a class = " dropdown-item " href = " javascript:displayVersionDialog(); " title = " Version Information " >< i class = " fas fa-info-circle " ></ i > < ? php echo lang ( 'options_version_dialog' ); ?> </a> <a class="dropdown-item" target="_blank" href="https://github.com/magicbug/Cloudlog/wiki" title="Help"><i class="fas fa-question"></i> <?php echo lang('menu_help'); ?></a>
2023-03-17 17:54:35 +00:00
2023-09-12 14:30:28 +01:00
< a class = " dropdown-item " target = " _blank " href = " https://github.com/magicbug/Cloudlog/discussions " title = " Forum " >< i class = " far fa-comment-dots " ></ i > < ? php echo lang ( 'menu_forum' ); ?> </a>
2021-03-12 16:22:40 +00:00
2023-09-12 14:30:28 +01:00
< div class = " dropdown-divider " ></ div >
2021-03-12 16:22:40 +00:00
2023-09-12 14:30:28 +01:00
< a class = " dropdown-item " href = " <?php echo site_url('user/logout'); ?> " title = " Logout " >< i class = " fas fa-sign-out-alt " ></ i > < ? php echo lang ( 'menu_logout' ); ?> </a>
</ div >
</ li >
2021-03-12 16:22:40 +00:00
2023-09-12 14:30:28 +01:00
< ? php
// Can add extra menu items by defining them in options. The format is json.
// Useful to add extra things in Cloudlog without the need for modifying files. If you add extras, these files will not be overwritten when updating.
//
// The menu items will be displayed to the top right under extras.
//
// Example:
// INSERT INTO options (option_name,option_value,autoload) VALUES
// ('menuitems','[
// {
// "url":"gridmap",
// "text":"Gridmap",
// "icon":"fa-globe-europe"
// },
// {
// "url":"gallery",
// "text":"Gallery",
// "icon":"fa-globe-europe"
// }
// ]','yes');
2021-02-12 23:27:08 +01:00
2023-09-12 14:30:28 +01:00
if ( $this -> optionslib -> get_option ( 'menuitems' )) { ?>
< li class = " nav-item dropdown " >
2023-11-14 13:35:53 +01:00
< a class = " nav-link dropdown-toggle " href = " # " id = " navbarDropdown " role = " button " data - bs - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " false " > Extras </ a >
2023-09-12 14:30:28 +01:00
< div class = " dropdown-menu " aria - labelledby = " navbarDropdown " >
< ? php
foreach ( json_decode ( $this -> optionslib -> get_option ( 'menuitems' )) as $item ) {
echo '<a class="dropdown-item" href="' . site_url ( $item -> url ) . '" title="' . $item -> text . '"><i class="fas ' . $item -> icon . '"></i> ' . $item -> text . '</a>' ;
}
?>
</ div >
</ li >
< ? php } ?>
2021-02-12 23:27:08 +01:00
2023-09-12 14:30:28 +01:00
</ ul >
2021-02-12 23:27:08 +01:00
2023-09-12 14:30:28 +01:00
< ? php } ?>
2021-02-12 23:27:08 +01:00
2019-09-11 17:32:40 +01:00
</ div >
2023-09-12 14:30:28 +01:00
</ div >
2023-11-23 12:14:37 +01:00
</ nav >