Basics for QSO end time logging
这个提交包含在:
		
							父节点
							
								
									cb5969a090
								
							
						
					
					
						当前提交
						77314edd31
					
				
					共有  7 个文件被更改,包括 56 次插入 和 240 次删除
				
			
		|  | @ -21,6 +21,8 @@ $lang['general_word_import'] = "Import"; | |||
| 
 | ||||
| $lang['general_word_date'] = 'Date'; | ||||
| $lang['general_word_time'] = 'Time'; | ||||
| $lang['general_word_time_on'] = 'Time on'; | ||||
| $lang['general_word_time_off'] = 'Time off'; | ||||
| $lang['general_word_datetime'] = 'Date/Time'; | ||||
| $lang['general_word_none'] = 'None'; | ||||
| $lang['general_word_name'] = 'Name'; | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ class Logbook_model extends CI_Model { | |||
|     $callsign = str_replace('Ø', '0', $this->input->post('callsign')); | ||||
|     // Join date+time
 | ||||
|     $datetime = date("Y-m-d",strtotime($this->input->post('start_date')))." ". $this->input->post('start_time'); | ||||
|     $datetime_off = date("Y-m-d",strtotime($this->input->post('start_date')))." ". $this->input->post('end_time'); | ||||
|     if ($this->input->post('prop_mode') != null) { | ||||
|             $prop_mode = $this->input->post('prop_mode'); | ||||
|     } else { | ||||
|  | @ -174,7 +175,7 @@ class Logbook_model extends CI_Model { | |||
|     // Create array with QSO Data
 | ||||
|     $data = array( | ||||
|             'COL_TIME_ON' => $datetime, | ||||
|             'COL_TIME_OFF' => $datetime, | ||||
|             'COL_TIME_OFF' => $datetime_off, | ||||
|             'COL_CALL' => strtoupper(trim($callsign)), | ||||
|             'COL_BAND' => $this->input->post('band'), | ||||
|             'COL_BAND_RX' => $this->input->post('band_rx'), | ||||
|  |  | |||
|  | @ -28,7 +28,6 @@ | |||
| <script src="<?php echo base_url(); ?>assets/js/popper.min.js"></script> | ||||
| <script src="<?php echo base_url(); ?>assets/js/jquery.fancybox.min.js"></script> | ||||
| <script src="<?php echo base_url(); ?>assets/js/bootstrap.bundle.js"></script> | ||||
| <script src="<?php echo base_url(); ?>assets/js/jquery.jclock.js"></script> | ||||
| <script type="text/javascript" src="<?php echo base_url(); ?>assets/js/leaflet/leaflet.js"></script> | ||||
| <script type="text/javascript" src="<?php echo base_url(); ?>assets/js/leaflet/Control.FullScreen.js"></script> | ||||
| <script type="text/javascript" src="<?php echo base_url(); ?>assets/js/leaflet/L.Maidenhead.qrb.js"></script> | ||||
|  | @ -1106,24 +1105,22 @@ $(document).on('keypress',function(e) { | |||
| 
 | ||||
|       if ( ! manual ) { | ||||
|         $(function($) { | ||||
|           var options = { | ||||
|             utc: true, | ||||
|             format: '%H:%M:%S' | ||||
|           } | ||||
|           $('.input_time').jclock(options); | ||||
|           handleStart = setInterval(function() { getUTCTimeStamp($('.input_start_time')); }, 500); | ||||
|           handleEnd = setInterval(function() { getUTCTimeStamp($('.input_end_time')); }, 500); | ||||
|         }); | ||||
| 
 | ||||
|         $(function($) { | ||||
|           var options = { | ||||
|             utc: true, | ||||
|             format: '%d-%m-%Y' | ||||
|           } | ||||
|           $('.input_date').jclock(options); | ||||
|           handleDate = setInterval(function() { getUTCDateStamp($('.input_date')); }, 1000); | ||||
|         }); | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     $('#callsign').focusout(function() { | ||||
|       if (! manual && $('#callsign').val() != '') { | ||||
|         clearInterval(handleStart); | ||||
|         clearInterval(handleDate); | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|   jQuery(function($) { | ||||
|   var input = $('#callsign'); | ||||
|  | @ -1142,6 +1139,11 @@ $(document).on('keypress',function(e) { | |||
| 	  } | ||||
| 	  if (e.key === "Escape") { // escape key maps to keycode `27`
 | ||||
| 		  reset_fields(); | ||||
| 		  if ( ! manual ) { | ||||
| 		     handleStart = setInterval(function() { getUTCTimeStamp($('.input_start_time')); }, 500); | ||||
| 		     handleEnd = setInterval(function() { getUTCTimeStamp($('.input_end_time')); }, 500); | ||||
| 		     handleDate = setInterval(function() { getUTCDateStamp($('.input_date')); }, 1000); | ||||
| 		  } | ||||
| 		  $('#callsign').val(""); | ||||
| 		  $("#callsign").focus(); | ||||
| 	  } | ||||
|  | @ -1316,6 +1318,21 @@ $(document).on('keypress',function(e) { | |||
|             $('#rst_rcvd').val('59'); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     function getUTCTimeStamp(el) { | ||||
|        var now = new Date(); | ||||
|        var localTime = now.getTime(); | ||||
|        var utc = localTime + (now.getTimezoneOffset() * 60000); | ||||
|        $(el).attr('value', ("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2)+':'+("0" + now.getUTCSeconds()).slice(-2)); | ||||
|     } | ||||
| 
 | ||||
|     function getUTCDateStamp(el) { | ||||
|        var now = new Date(); | ||||
|        var localTime = now.getTime(); | ||||
|        var utc = localTime + (now.getTimezoneOffset() * 60000); | ||||
|        $(el).attr('value', ("0" + now.getUTCDate()).slice(-2)+'-'+("0" + (now.getUTCMonth()+1)).slice(-2)+'-'+now.getUTCFullYear()); | ||||
|     } | ||||
| 
 | ||||
|     </script> | ||||
| 
 | ||||
|     <script> | ||||
|  |  | |||
|  | @ -57,13 +57,19 @@ | |||
|                   <input type="text" class="form-control form-control-sm input_date" name="start_date" id="start_date" value="<?php if (($this->session->userdata('start_date') != NULL && ((time() - $this->session->userdata('time_stamp')) < 24 * 60 * 60))) { echo $this->session->userdata('start_date'); } else { echo date('d-m-Y');}?>" <?php echo ($_GET['manual'] == 0 ? "disabled" : "");  ?> required pattern="[0-3][0-9]-[0-1][0-9]-[0-9]{4}">
 | ||||
|                 </div> | ||||
| 
 | ||||
|                 <div class="form-group col-md-6"> | ||||
|                   <label for="start_time"><?php echo lang('general_word_time'); ?></label>
 | ||||
|                   <input type="text" class="form-control form-control-sm input_time" name="start_time" id="start_time" value="<?php if (($this->session->userdata('start_time') != NULL && ((time() - $this->session->userdata('time_stamp')) < 24 * 60 * 60))) { echo $this->session->userdata('start_time'); } else {echo date('H:i'); } ?>" size="7" <?php echo ($_GET['manual'] == 0 ? "disabled" : "");  ?> required pattern="[0-2][0-9]:[0-5][0-9]">
 | ||||
|                 <div class="form-group col-md-3"> | ||||
|                   <label for="start_time"><?php echo lang('general_word_time_on'); ?></label>
 | ||||
|                   <input type="text" class="form-control form-control-sm input_start_time" name="start_time" id="start_time" value="<?php if (($this->session->userdata('start_time') != NULL && ((time() - $this->session->userdata('time_stamp')) < 24 * 60 * 60))) { echo $this->session->userdata('start_time'); } else {echo date('H:i'); } ?>" size="7" <?php echo ($_GET['manual'] == 0 ? "disabled" : "");  ?> required pattern="[0-2][0-9]:[0-5][0-9]">
 | ||||
|                 </div> | ||||
| 
 | ||||
|                 <div class="form-group col-md-3"> | ||||
|                   <label for="end_time"><?php echo lang('general_word_time_off'); ?></label>
 | ||||
|                   <input type="text" class="form-control form-control-sm input_end_time" name="end_time" id="end_time" value="<?php if (($this->session->userdata('end_time') != NULL && ((time() - $this->session->userdata('time_stamp')) < 24 * 60 * 60))) { echo $this->session->userdata('end_time'); } else {echo date('H:i'); } ?>" size="7" <?php echo ($_GET['manual'] == 0 ? "disabled" : "");  ?> required pattern="[0-2][0-9]:[0-5][0-9]">
 | ||||
|                 </div> | ||||
| 
 | ||||
|                 <?php if ( $_GET['manual'] == 0 ) { ?>
 | ||||
|                   <input class="input_time" type="hidden" id="start_time"  name="start_time"value="<?php echo date('H:i'); ?>" /> | ||||
|                   <input class="input_start_time" type="hidden" id="start_time"  name="start_time"value="<?php echo date('H:i'); ?>" /> | ||||
|                   <input class="input_end_time" type="hidden" id="end_time"  name="end_time"value="<?php echo date('H:i'); ?>" /> | ||||
|                   <input class="input_date" type="hidden" id="start_date" name="start_date" value="<?php echo date('d-m-Y'); ?>" /> | ||||
|                 <?php } ?>
 | ||||
|               </div> | ||||
|  |  | |||
|  | @ -70,7 +70,9 @@ | |||
| 
 | ||||
|                         <td><?php echo lang('general_word_datetime'); ?></td>
 | ||||
|                         <?php if(($this->config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?>
 | ||||
|                         <td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date($custom_date_format, $timestamp); $timestamp = strtotime($row->COL_TIME_ON); echo " at ".date('H:i', $timestamp); ?></td>
 | ||||
|                         <td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date($custom_date_format, $timestamp); $timestamp = strtotime($row->COL_TIME_ON); echo " at ".date('H:i', $timestamp); ?>
 | ||||
|                         <?php if ($row->COL_TIME_ON != $row->COL_TIME_OFF) { $timestamp = strtotime($row->COL_TIME_OFF); echo " - ".date('H:i', $timestamp); } ?>
 | ||||
|                         </td> | ||||
|                         <?php } else { ?>
 | ||||
|                         <td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date($custom_date_format, $timestamp); ?></td>
 | ||||
|                         <?php } ?>
 | ||||
|  |  | |||
|  | @ -1,222 +0,0 @@ | |||
| /* | ||||
| * jQuery jclock - Clock plugin - v 2.3.2 | ||||
| * http://plugins.jquery.com/project/jclock
 | ||||
| * | ||||
| * Copyright (c) 2007-2011 Doug Sparling <http://www.dougsparling.com>
 | ||||
| * Licensed under the MIT License: | ||||
| * http://www.opensource.org/licenses/mit-license.php
 | ||||
| */ | ||||
| (function($) { | ||||
|   | ||||
|   $.fn.jclock = function(options) { | ||||
|     var version = '2.3.2'; | ||||
|   | ||||
|     // options
 | ||||
|     var opts = $.extend({}, $.fn.jclock.defaults, options); | ||||
|           | ||||
|     return this.each(function() { | ||||
|       $this = $(this); | ||||
|       $this.timerID = null; | ||||
|       $this.running = false; | ||||
|   | ||||
|       // Record keeping for seeded clock
 | ||||
|       $this.increment = 0; | ||||
|       $this.lastCalled = new Date().getTime(); | ||||
|   | ||||
|       var o = $.meta ? $.extend({}, opts, $this.data()) : opts; | ||||
|   | ||||
|       $this.format = o.format; | ||||
|       $this.utc = o.utc; | ||||
|       // deprecate utc_offset (v 2.2.0)
 | ||||
|       $this.utcOffset = (o.utc_offset != null) ? o.utc_offset : o.utcOffset; | ||||
|       $this.seedTime = o.seedTime; | ||||
|       $this.timeout = o.timeout; | ||||
|   | ||||
|       $this.css({ | ||||
|         fontFamily: o.fontFamily, | ||||
|         fontSize: o.fontSize, | ||||
|         backgroundColor: o.background, | ||||
|         color: o.foreground | ||||
|       }); | ||||
|   | ||||
|       // %a
 | ||||
|       $this.daysAbbrvNames = new Array(7); | ||||
|       $this.daysAbbrvNames[0] = "Sun"; | ||||
|       $this.daysAbbrvNames[1] = "Mon"; | ||||
|       $this.daysAbbrvNames[2] = "Tue"; | ||||
|       $this.daysAbbrvNames[3] = "Wed"; | ||||
|       $this.daysAbbrvNames[4] = "Thu"; | ||||
|       $this.daysAbbrvNames[5] = "Fri"; | ||||
|       $this.daysAbbrvNames[6] = "Sat"; | ||||
|   | ||||
|       // %A
 | ||||
|       $this.daysFullNames = new Array(7); | ||||
|       $this.daysFullNames[0] = "Sunday"; | ||||
|       $this.daysFullNames[1] = "Monday"; | ||||
|       $this.daysFullNames[2] = "Tuesday"; | ||||
|       $this.daysFullNames[3] = "Wednesday"; | ||||
|       $this.daysFullNames[4] = "Thursday"; | ||||
|       $this.daysFullNames[5] = "Friday"; | ||||
|       $this.daysFullNames[6] = "Saturday"; | ||||
|   | ||||
|       // %b
 | ||||
|       $this.monthsAbbrvNames = new Array(12); | ||||
|       $this.monthsAbbrvNames[0] = "Jan"; | ||||
|       $this.monthsAbbrvNames[1] = "Feb"; | ||||
|       $this.monthsAbbrvNames[2] = "Mar"; | ||||
|       $this.monthsAbbrvNames[3] = "Apr"; | ||||
|       $this.monthsAbbrvNames[4] = "May"; | ||||
|       $this.monthsAbbrvNames[5] = "Jun"; | ||||
|       $this.monthsAbbrvNames[6] = "Jul"; | ||||
|       $this.monthsAbbrvNames[7] = "Aug"; | ||||
|       $this.monthsAbbrvNames[8] = "Sep"; | ||||
|       $this.monthsAbbrvNames[9] = "Oct"; | ||||
|       $this.monthsAbbrvNames[10] = "Nov"; | ||||
|       $this.monthsAbbrvNames[11] = "Dec"; | ||||
|   | ||||
|       // %B
 | ||||
|       $this.monthsFullNames = new Array(12); | ||||
|       $this.monthsFullNames[0] = "January"; | ||||
|       $this.monthsFullNames[1] = "February"; | ||||
|       $this.monthsFullNames[2] = "March"; | ||||
|       $this.monthsFullNames[3] = "April"; | ||||
|       $this.monthsFullNames[4] = "May"; | ||||
|       $this.monthsFullNames[5] = "June"; | ||||
|       $this.monthsFullNames[6] = "July"; | ||||
|       $this.monthsFullNames[7] = "August"; | ||||
|       $this.monthsFullNames[8] = "September"; | ||||
|       $this.monthsFullNames[9] = "October"; | ||||
|       $this.monthsFullNames[10] = "November"; | ||||
|       $this.monthsFullNames[11] = "December"; | ||||
|   | ||||
|       $.fn.jclock.startClock($this); | ||||
|   | ||||
|     }); | ||||
|   }; | ||||
|         | ||||
|   $.fn.jclock.startClock = function(el) { | ||||
|     $.fn.jclock.stopClock(el); | ||||
|     $.fn.jclock.displayTime(el); | ||||
|   } | ||||
|   | ||||
|   $.fn.jclock.stopClock = function(el) { | ||||
|     if(el.running) { | ||||
|       clearTimeout(el.timerID); | ||||
|     } | ||||
|     el.running = false; | ||||
|   } | ||||
|   | ||||
|   $.fn.jclock.displayTime = function(el) { | ||||
|     var time = $.fn.jclock.currentTime(el); | ||||
|     var formatted_time = $.fn.jclock.formatTime(time, el); | ||||
|     el.attr('currentTime', time.getTime()) | ||||
|     el.val(formatted_time); | ||||
|     el.timerID = setTimeout(function(){$.fn.jclock.displayTime(el)},el.timeout); | ||||
|   } | ||||
| 
 | ||||
|   $.fn.jclock.currentTime = function(el) { | ||||
|     if(typeof(el.seedTime) == 'undefined') { | ||||
|       // Seed time not being used, use current time
 | ||||
|       var now = new Date(); | ||||
|     } else { | ||||
|       // Otherwise, use seed time with increment
 | ||||
|       el.increment += new Date().getTime() - el.lastCalled; | ||||
|       var now = new Date(el.seedTime + el.increment); | ||||
|       el.lastCalled = new Date().getTime(); | ||||
|     } | ||||
|   | ||||
|     if(el.utc == true) { | ||||
|       var localTime = now.getTime(); | ||||
|       var localOffset = now.getTimezoneOffset() * 60000; | ||||
|       var utc = localTime + localOffset; | ||||
|       var utcTime = utc + (3600000 * el.utcOffset); | ||||
|       var now = new Date(utcTime); | ||||
|     } | ||||
| 
 | ||||
|     return now | ||||
|   } | ||||
|   | ||||
|   $.fn.jclock.formatTime = function(time, el) { | ||||
|   | ||||
|     var timeNow = ""; | ||||
|     var i = 0; | ||||
|     var index = 0; | ||||
|     while ((index = el.format.indexOf("%", i)) != -1) { | ||||
|       timeNow += el.format.substring(i, index); | ||||
|       index++; | ||||
|   | ||||
|       // modifier flag
 | ||||
|       //switch (el.format.charAt(index++)) {
 | ||||
|       //}
 | ||||
|        | ||||
|       var property = $.fn.jclock.getProperty(time, el, el.format.charAt(index)); | ||||
|       index++; | ||||
|        | ||||
|       //switch (switchCase) {
 | ||||
|       //}
 | ||||
|   | ||||
|       timeNow += property; | ||||
|       i = index | ||||
|     } | ||||
|   | ||||
|     timeNow += el.format.substring(i); | ||||
|     return timeNow; | ||||
|   }; | ||||
|   | ||||
|   $.fn.jclock.getProperty = function(dateObject, el, property) { | ||||
|   | ||||
|     switch (property) { | ||||
|       case "a": // abbrv day names
 | ||||
|           return (el.daysAbbrvNames[dateObject.getDay()]); | ||||
|       case "A": // full day names
 | ||||
|           return (el.daysFullNames[dateObject.getDay()]); | ||||
|       case "b": // abbrv month names
 | ||||
|           return (el.monthsAbbrvNames[dateObject.getMonth()]); | ||||
|       case "B": // full month names
 | ||||
|           return (el.monthsFullNames[dateObject.getMonth()]); | ||||
|       case "d": // day 01-31
 | ||||
|           return ((dateObject.getDate() < 10) ? "0" : "") + dateObject.getDate(); | ||||
|       case "H": // hour as a decimal number using a 24-hour clock (range 00 to 23)
 | ||||
|           return ((dateObject.getHours() < 10) ? "0" : "") + dateObject.getHours(); | ||||
|       case "I": // hour as a decimal number using a 12-hour clock (range 01 to 12)
 | ||||
|           var hours = (dateObject.getHours() % 12 || 12); | ||||
|           return ((hours < 10) ? "0" : "") + hours; | ||||
|       case "l": // hour as a decimal number using a 12-hour clock (range 1 to 12)
 | ||||
|           var hours = (dateObject.getHours() % 12 || 12); | ||||
|           //return ((hours < 10) ? "0" : "") + hours;
 | ||||
|           return hours; | ||||
|       case "m": // month number
 | ||||
|           return (((dateObject.getMonth() + 1) < 10) ? "0" : "") + (dateObject.getMonth() + 1); | ||||
|       case "M": // minute as a decimal number
 | ||||
|           return ((dateObject.getMinutes() < 10) ? "0" : "") + dateObject.getMinutes(); | ||||
|       case "p": // either `am' or `pm' according to the given time value,
 | ||||
|           // or the corresponding strings for the current locale
 | ||||
|           return (dateObject.getHours() < 12 ? "am" : "pm"); | ||||
|       case "P": // either `AM' or `PM' according to the given time value,
 | ||||
|           return (dateObject.getHours() < 12 ? "AM" : "PM"); | ||||
|       case "S": // second as a decimal number
 | ||||
|           return ((dateObject.getSeconds() < 10) ? "0" : "") + dateObject.getSeconds(); | ||||
|       case "y": // two-digit year
 | ||||
|           return dateObject.getFullYear().toString().substring(2); | ||||
|       case "Y": // full year
 | ||||
|           return (dateObject.getFullYear()); | ||||
|       case "%": | ||||
|           return "%"; | ||||
|     } | ||||
|   | ||||
|   } | ||||
|         | ||||
|   // plugin defaults (24-hour)
 | ||||
|   $.fn.jclock.defaults = { | ||||
|     format: '%H:%M:%S', | ||||
|     utcOffset: 0, | ||||
|     utc: false, | ||||
|     fontFamily: '', | ||||
|     fontSize: '', | ||||
|     foreground: '', | ||||
|     background: '', | ||||
|     seedTime: undefined, | ||||
|     timeout: 1000 // 1000 = one second, 60000 = one minute
 | ||||
|   }; | ||||
|   | ||||
| })(jQuery); | ||||
|  | @ -743,6 +743,16 @@ $('#start_time').change(function() { | |||
| 		$('#start_time').val(raw_time); | ||||
| 	} | ||||
| }); | ||||
| $('#end_time').change(function() { | ||||
| 	var raw_time = $(this).val(); | ||||
| 	if(raw_time.match(/^\d\[0-6]d$/)) { | ||||
| 		raw_time = "0"+raw_time; | ||||
| 	} | ||||
| 	if(raw_time.match(/^[012]\d[0-5]\d$/)) { | ||||
| 		raw_time = raw_time.substring(0,2)+":"+raw_time.substring(2,4); | ||||
| 		$('#end_time').val(raw_time); | ||||
| 	} | ||||
| }); | ||||
| 
 | ||||
| /* date input shortcut */ | ||||
| $('#start_date').change(function() { | ||||
|  |  | |||
		正在加载…
	
		在新工单中引用