Added Name Field, QRA Lookup, Stats Tab
这个提交包含在:
		
							父节点
							
								
									eaddb5220c
								
							
						
					
					
						当前提交
						925034e3e5
					
				
					共有  11 个文件被更改,包括 242 次插入 和 30 次删除
				
			
		|  | @ -32,10 +32,9 @@ class QSO extends CI_Controller { | |||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			 | ||||
| 			// Add QSO
 | ||||
| 			$this->logbook_model->add(); | ||||
| 
 | ||||
| 			 | ||||
| 			// Store Basic QSO Info for reuse
 | ||||
| 			$this->session->set_userdata('band', $this->input->post('band')); | ||||
| 			$this->session->set_userdata('freq', $this->input->post('freq')); | ||||
|  |  | |||
|  | @ -0,0 +1,35 @@ | |||
| <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); | ||||
| 
 | ||||
| class Statistics extends CI_Controller { | ||||
| 
 | ||||
| 
 | ||||
| 	public function index() | ||||
| 	{ | ||||
| 		 | ||||
| 		// Database connections
 | ||||
| 		$this->load->model('logbook_model'); | ||||
| 
 | ||||
| 		// Store info
 | ||||
| 		$data['todays_qsos'] = $this->logbook_model->todays_qsos(); | ||||
| 		$data['total_qsos'] = $this->logbook_model->total_qsos(); | ||||
| 		$data['month_qsos'] = $this->logbook_model->month_qsos(); | ||||
| 		$data['year_qsos'] = $this->logbook_model->year_qsos(); | ||||
| 
 | ||||
| 		$data['total_ssb'] = $this->logbook_model->total_ssb(); | ||||
| 		$data['total_cw'] = $this->logbook_model->total_cw(); | ||||
| 		$data['total_fm'] = $this->logbook_model->total_fm(); | ||||
| 		$data['total_digi'] = $this->logbook_model->total_digi(); | ||||
| 		 | ||||
| 		$data['total_bands'] = $this->logbook_model->total_bands(); | ||||
| 		 | ||||
| 		$data['total_sat'] = $this->logbook_model->total_sat(); | ||||
| 		 | ||||
| 		$data['page_title'] = "Statistics";  | ||||
| 		 | ||||
| 		$data['total_digi'] = $this->logbook_model->total_digi(); | ||||
| 	 | ||||
| 		$this->load->view('layout/header'); | ||||
| 		$this->load->view('statistics/index', $data); | ||||
| 		$this->load->view('layout/footer'); | ||||
| 	} | ||||
| } | ||||
|  | @ -2,21 +2,7 @@ | |||
| 
 | ||||
| class Welcome extends CI_Controller { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Index Page for this controller. | ||||
| 	 * | ||||
| 	 * Maps to the following URL | ||||
| 	 * 		http://example.com/index.php/welcome | ||||
| 	 *	- or -   | ||||
| 	 * 		http://example.com/index.php/welcome/index | ||||
| 	 *	- or - | ||||
| 	 * Since this controller is set as the default controller in  | ||||
| 	 * config/routes.php, it's displayed at http://example.com/ | ||||
| 	 * | ||||
| 	 * So any other public methods not prefixed with an underscore will | ||||
| 	 * map to /index.php/welcome/<method_name> | ||||
| 	 * @see http://codeigniter.com/user_guide/general/urls.html | ||||
| 	 */ | ||||
| 
 | ||||
| 	public function index() | ||||
| 	{ | ||||
| 		$this->load->view('welcome_message'); | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ class Logbook_model extends CI_Model { | |||
| 		   'COL_MODE' => $this->input->post('mode'), | ||||
| 		   'COL_RST_RCVD' => $this->input->post('rst_recv'), | ||||
| 		   'COL_RST_SENT' => $this->input->post('rst_sent'), | ||||
|            'COL_NAME' => $this->input->post('name'), | ||||
| 		   'COL_COMMENT' => $this->input->post('comment'), | ||||
| 		   'COL_SAT_NAME' => $this->input->post('sat_name'), | ||||
| 		   'COL_SAT_MODE' => $this->input->post('sat_mode'), | ||||
|  | @ -67,6 +68,54 @@ class Logbook_model extends CI_Model { | |||
| 		return $this->db->get($this->config->item('table_name')); | ||||
| 	} | ||||
| 	 | ||||
|     /* Callsign QRA */ | ||||
|      | ||||
|     function call_qra($callsign) { | ||||
|         $this->db->select('COL_CALL, COL_GRIDSQUARE, COL_TIME_ON'); | ||||
|         $this->db->where('COL_CALL', $callsign); | ||||
|         $where = "COL_GRIDSQUARE != \"\""; | ||||
|      | ||||
|         $this->db->where($where); | ||||
|      | ||||
|         $this->db->order_by("COL_TIME_ON", "desc");  | ||||
|         $this->db->limit(1); | ||||
|         $query = $this->db->get($this->config->item('table_name')); | ||||
|         $callsign = ""; | ||||
|         if ($query->num_rows() > 0) | ||||
|         { | ||||
|             $data = $query->row();  | ||||
|             $callsign = strtoupper($data->COL_GRIDSQUARE); | ||||
|         } | ||||
|      | ||||
|             return $callsign; | ||||
|     } | ||||
|      | ||||
|     function call_name($callsign) { | ||||
|         $this->db->select('COL_CALL, COL_NAME, COL_TIME_ON'); | ||||
|         $this->db->where('COL_CALL', $callsign); | ||||
|         $where = "COL_NAME != \"\""; | ||||
|      | ||||
|         $this->db->where($where); | ||||
|      | ||||
|         $this->db->order_by("COL_TIME_ON", "desc");  | ||||
|         $this->db->limit(1); | ||||
|         $query = $this->db->get($this->config->item('table_name')); | ||||
|         $name = ""; | ||||
|         if ($query->num_rows() > 0) | ||||
|         { | ||||
|             $data = $query->row();  | ||||
|             $name = $data->COL_NAME; | ||||
|         } else { | ||||
|             //$json = file_get_contents("http://callbytxt.org/db/".$callsign.".json");
 | ||||
| 
 | ||||
|             //$obj = json_decode($json);
 | ||||
|             //$uppercase_name = strtolower($obj->{'calls'}->{'first_name'});
 | ||||
|            // $name = ucwords($uppercase_name);
 | ||||
|         } | ||||
| 
 | ||||
|         return $name; | ||||
|     } | ||||
|      | ||||
| 	/* Return QSO Info */ | ||||
| 	function qso_info($id) { | ||||
| 		$this->db->where('COL_PRIMARY_KEY', $id);  | ||||
|  | @ -170,9 +219,16 @@ class Logbook_model extends CI_Model { | |||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|    function total_sat() { | ||||
|         $query = $this->db->query('SELECT COL_SAT_NAME, COUNT( * ) as count FROM '.$this->config->item('table_name').' WHERE COL_SAT_NAME != \'null\' GROUP BY COL_SAT_NAME'); | ||||
| 
 | ||||
|         return $query; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     function total_cw() { | ||||
|         $query = $this->db->query('SELECT COUNT( * ) as count FROM '.$this->config->item('table_name').' WHERE COL_MODE = \'CW\''); | ||||
|         $query = $this->db->query('SELECT COUNT( * ) as count FROM '.$this->config->item('table_name').' WHERE COL_MODE = \'CW\' '); | ||||
| 
 | ||||
|         if ($query->num_rows() > 0) | ||||
|         { | ||||
|  |  | |||
|  | @ -1,3 +1,26 @@ | |||
| 	<script type="text/javascript" src="<?php echo base_url() ;?>/fancybox/jquery.mousewheel-3.0.4.pack.js"></script> | ||||
| 
 | ||||
| 	<script type="text/javascript" src="<?php echo base_url() ;?>/fancybox/jquery.fancybox-1.3.4.pack.js"></script> | ||||
| 
 | ||||
| 	<link rel="stylesheet" type="text/css" href="<?php echo base_url() ;?>/fancybox/jquery.fancybox-1.3.4.css" media="screen" /> | ||||
| 
 | ||||
| 	<script type="text/javascript"> | ||||
| 
 | ||||
| 		$(document).ready(function() { | ||||
| 			$(".qsobox").fancybox({ | ||||
| 				'width'				: '75%', | ||||
| 				'height'			: '50%', | ||||
| 				'autoScale'			: false, | ||||
| 				'transitionIn'		: 'none', | ||||
| 				'transitionOut'		: 'none', | ||||
| 				'type'				: 'iframe' | ||||
| 			}); | ||||
| 
 | ||||
| 
 | ||||
| 		}); | ||||
| 
 | ||||
| 	</script> | ||||
| 
 | ||||
|   <script type="text/javascript" src="https://www.google.com/jsapi"></script> | ||||
| 	<script type="text/javascript"> | ||||
| 
 | ||||
|  | @ -77,7 +100,7 @@ | |||
| 		<?php  echo '<tr class="tr'.($i & 1).'">'; ?>
 | ||||
| 		<td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date('d/m/y', $timestamp); ?></td>
 | ||||
| 		<td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date('H:i', $timestamp); ?></td>
 | ||||
| 		<td><?php echo strtoupper($row->COL_CALL); ?></td>
 | ||||
| 		<td><a class="qsobox" href="<?php echo site_url('logbook/view')."/".$row->COL_PRIMARY_KEY; ?>"><?php echo strtoupper($row->COL_CALL); ?></a></td>
 | ||||
| 		<td><?php echo $row->COL_MODE; ?></td>
 | ||||
| 		<td><?php echo $row->COL_RST_SENT; ?></td>
 | ||||
| 		<td><?php echo $row->COL_RST_RCVD; ?></td>
 | ||||
|  |  | |||
|  | @ -55,7 +55,8 @@ table .titles { font-weight: bold; } | |||
| #locator { width: 55px; text-transform: uppercase; }
 | ||||
| #country { border: none; }
 | ||||
| #locator_info { font-size: 13px; }
 | ||||
| #comment { width: 145px; }
 | ||||
| #name { width: 145px; }
 | ||||
| #comment { width: 89.5%; }
 | ||||
| 
 | ||||
| .dash_left { float: left; width: 430px; } | ||||
| .dash_sidebar { float: right; width: 350px; } | ||||
|  | @ -66,6 +67,9 @@ table .titles { font-weight: bold; } | |||
| a { text-decoration: none; color: #000; } 
 | ||||
| a:hover { text-decoration: underline; } | ||||
| 
 | ||||
| 
 | ||||
| ul.notes_list {list-style-type: circle; padding-left: 20px; } | ||||
| 
 | ||||
| p { | ||||
| line-height: 1.7; | ||||
| margin: 10px 0; | ||||
|  | @ -87,6 +91,7 @@ margin: 10px 0; | |||
| 			<li><a href="<?php echo site_url('search');?>" title="Search">Search</a></li> | ||||
| 			<li><a href="<?php echo site_url('qso');?>" title="Add QSO">Add QSO</a></li> | ||||
| 			<li><a href="<?php echo site_url('notes');?>" title="Notes">Notes</a></li> | ||||
| 			<li><a href="<?php echo site_url('statistics');?>" title="statistics">Statistics</a></li> | ||||
| 		</ul> | ||||
| 	</div> | ||||
| <div class="clear"></div> | ||||
|  | @ -1,11 +1,11 @@ | |||
| <h2>Note</h2> | ||||
| <div class="wrap_content"> | ||||
| <div class="wrap_content note"> | ||||
| 
 | ||||
| <?php | ||||
| 
 | ||||
| 	if ($notes->num_rows() > 0) | ||||
| 	{ | ||||
| 		echo "<ul>"; | ||||
| 		echo "<ul class=\"notes_list\">"; | ||||
| 		foreach ($notes->result() as $row) | ||||
| 		{ | ||||
| 			echo "<li>"; | ||||
|  |  | |||
|  | @ -3,10 +3,6 @@ | |||
| <div class="wrap_content note"> | ||||
| <?php echo nl2br($row->note); ?>
 | ||||
| 
 | ||||
| <p>Options: | ||||
| <ul> | ||||
| 	<li><a href="<?php echo site_url('notes/edit'); ?>/<?php echo $row->id; ?>">Edit</a></li> | ||||
| 	<li><a href="<?php echo site_url('notes/delete'); ?>/<?php echo $row->id; ?>">Delete</a></li> | ||||
| </ul></p> | ||||
| <p>Options: <a href="<?php echo site_url('notes/edit'); ?>/<?php echo $row->id; ?>"><img src="<?php echo base_url(); ?>images/application_edit.png" width="16" height="16" alt="Edit" /></a> <a href="<?php echo site_url('notes/delete'); ?>/<?php echo $row->id; ?>"><img src="<?php echo base_url(); ?>images/delete.png" width="16" height="16" alt="Delete" /></a></p> | ||||
| </div> | ||||
| <?php } ?>
 | ||||
|  | @ -96,7 +96,7 @@ function settime () { | |||
| 		<td class="title">RST Recv</td> | ||||
| 		<td class="title">QRA</td> | ||||
| <!-- 		<td class="title">Name</td> --> | ||||
| 		<td class="title">Comment</td> | ||||
| 		<td class="title">Name</td> | ||||
| 	</tr> | ||||
| 	 | ||||
| 	<tr> | ||||
|  | @ -160,10 +160,13 @@ function settime () { | |||
| 			<option value="59+30dB">59+30dB</option> | ||||
| 		</select></td> | ||||
| 		<td><input id="locator" type="text" name="locator" value="" size="7" /></td> | ||||
| <!-- 		<td><input type="text" name="name" value="" /></td> --> | ||||
| 		<td><input id="comment" type="text" name="comment" value="" /></td> | ||||
| 		<td><input id="name" type="text" name="name" value="" /></td> | ||||
| 	</tr> | ||||
| 	 | ||||
| 	 | ||||
| 	<tr> | ||||
| 		<td colspan="9">Comment: <input id="comment" type="text" name="comment" value="" /></td> | ||||
| 	</tr> | ||||
| </table> | ||||
| 
 | ||||
| <div class="info"> | ||||
|  | @ -231,6 +234,14 @@ $(document).ready(function(){ | |||
| 	$.get('logbook/find_dxcc/' + $(this).val(), function(result) { | ||||
| 	$('#country').val(result); | ||||
| 		}); | ||||
| 	 | ||||
| 	$.get('logbook/callsign_qra/' + $(this).val(), function(result) { | ||||
| 	$('#locator').val(result); | ||||
| 		}); | ||||
| 	 | ||||
| 	$.get('logbook/callsign_name/' + $(this).val(), function(result) { | ||||
| 	$('#name').val(result); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
|   }); | ||||
|  |  | |||
|  | @ -0,0 +1,94 @@ | |||
|   <script type="text/javascript" src="https://www.google.com/jsapi"></script> | ||||
| 	<script type="text/javascript"> | ||||
| 
 | ||||
| 	  // Load the Visualization API and the piechart package.
 | ||||
| 	  google.load('visualization', '1', {'packages':['corechart']}); | ||||
| 
 | ||||
| 	  // Set a callback to run when the Google Visualization API is loaded.
 | ||||
| 	  google.setOnLoadCallback(drawModeChart); | ||||
| 	  google.setOnLoadCallback(drawBandChart); | ||||
| 	  google.setOnLoadCallback(drawSatChart); | ||||
| 
 | ||||
| 
 | ||||
| 	  // Callback that creates and populates a data table, 
 | ||||
| 	  // instantiates the pie chart, passes in the data and
 | ||||
| 	  // draws it.
 | ||||
| 	  function drawModeChart() { | ||||
| 
 | ||||
| 	  // Create our data table.
 | ||||
| 	  var data = new google.visualization.DataTable(); | ||||
| 	  data.addColumn('string', 'Topping'); | ||||
| 	  data.addColumn('number', 'Slices'); | ||||
| 	  data.addRows([ | ||||
| 		['SSB', <?php echo $total_ssb; ?>],
 | ||||
| 		['CW', <?php echo $total_cw; ?>],
 | ||||
| 		['FM', <?php echo $total_ssb; ?>], 
 | ||||
| 		['Digi', <?php echo $total_digi; ?>],
 | ||||
| 	  ]); | ||||
| 
 | ||||
| 	  // Instantiate and draw our chart, passing in some options.
 | ||||
| 	  var chart = new google.visualization.PieChart(document.getElementById('modechart_div')); | ||||
| 	   chart.draw(data, {width: 700, height: 440}); | ||||
| 	} | ||||
| 
 | ||||
| 	 function drawBandChart() { | ||||
| 
 | ||||
| 	  // Create our data table.
 | ||||
| 	  var data = new google.visualization.DataTable(); | ||||
| 	  data.addColumn('string', 'Topping'); | ||||
| 	  data.addColumn('number', 'Slices'); | ||||
| 	  data.addRows([ | ||||
| 
 | ||||
| 		<?php foreach($total_bands->result() as $row) { ?>
 | ||||
| 			['<?php echo $row->band; ?>', <?php echo $row->count; ?>],
 | ||||
| 		<?php } ?>
 | ||||
| 
 | ||||
| 	  ]); | ||||
| 
 | ||||
| 	  // Instantiate and draw our chart, passing in some options.
 | ||||
| 	  var chart = new google.visualization.PieChart(document.getElementById('bandchart_div')); | ||||
| 	  chart.draw(data, {width: 700, height: 440}); | ||||
| 	} | ||||
| 	 | ||||
| 	function drawSatChart() { | ||||
| 
 | ||||
| 	  // Create our data table.
 | ||||
| 	  var data = new google.visualization.DataTable(); | ||||
| 	  data.addColumn('string', 'Topping'); | ||||
| 	  data.addColumn('number', 'Slices'); | ||||
| 	  data.addRows([ | ||||
| 
 | ||||
| 		<?php foreach($total_sat->result() as $row1) { ?>
 | ||||
| 			<?php if($row1->COL_SAT_NAME != null) { ?>
 | ||||
| 			['<?php echo $row1->COL_SAT_NAME; ?>', <?php echo $row1->count; ?>],
 | ||||
| 			<?php } ?>
 | ||||
| 		<?php } ?>
 | ||||
| 
 | ||||
| 	  ]); | ||||
| 
 | ||||
| 	  // Instantiate and draw our chart, passing in some options.
 | ||||
| 	  var chart = new google.visualization.PieChart(document.getElementById('satchart_div')); | ||||
| 	  chart.draw(data, {width: 700, height: 440}); | ||||
| 	} | ||||
| 
 | ||||
| 	</script> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <h2><?php echo $page_title; ?></h2>
 | ||||
| 
 | ||||
| <div class="wrap_content note"> | ||||
| 
 | ||||
| <p>Statistics built using information from the logbook.</p> | ||||
| 
 | ||||
| 		<div id="tabs"> | ||||
| 			<ul> | ||||
| 				<li><a href="#tabs-1">Main</a></li> | ||||
| 				<li><a href="#tabs-2">Satellite</a></li> | ||||
| 				<li><a href="#tabs-3">-</a></li> | ||||
| 			</ul> | ||||
| 			<div id="tabs-1"><div id="modechart_div"></div> <div id="bandchart_div"></div></div> | ||||
| 			<div id="tabs-2"><div id="satchart_div"></div></div> | ||||
| 			<div id="tabs-3"></div> | ||||
| 		</div> | ||||
| </div> | ||||
|  | @ -86,6 +86,13 @@ | |||
| 				</tr> | ||||
| 				<?php } ?>
 | ||||
| 				 | ||||
| 				<?php if($row->COL_NAME != null) { ?>
 | ||||
| 				<tr> | ||||
| 					<td>Name</td> | ||||
| 					<td><?php echo $row->COL_NAME; ?></td>
 | ||||
| 				</tr> | ||||
| 				<?php } ?>
 | ||||
| 				 | ||||
| 				<?php if($row->COL_COMMENT != null) { ?>
 | ||||
| 				<tr> | ||||
| 					<td>Comment</td> | ||||
|  |  | |||
		正在加载…
	
		在新工单中引用