Merge pull request #309 from dg9vh/dokstatistics

Added new Awards - DOK
这个提交包含在:
Peter Goodhall 2019-06-26 11:06:20 +01:00 提交者 GitHub
当前提交 8a534042df
找不到此签名对应的密钥
GPG 密钥 ID: 4AEE18F83AFDEB23
共有 6 个文件被更改,包括 285 次插入0 次删除

查看文件

@ -17,6 +17,56 @@ class Awards extends CI_Controller {
$this->load->view('interface_assets/footer');
}
public function dok ()
{
//echo "Needs Developed";
$this->load->model('dok');
$data['doks'] = $this->dok->show_stats();
$data['worked_bands'] = $this->dok->get_worked_bands();
// Render Page
$data['page_title'] = "Awards - DOK";
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/dok/index');
$this->load->view('interface_assets/footer');
}
public function dok_details(){
$a = $this->input->get();
$q = "";
foreach ($a as $key => $value) {
$q .= $key."=".$value.("(and)");
}
$q = substr($q, 0, strlen($q)-13);
$arguments["query"] = $q;
$arguments["fields"] = '';
$arguments["format"] = "json";
$arguments["limit"] = '';
$arguments["order"] = '';
// print_r($arguments);
// return;
// Load the API and Logbook models
$this->load->model('api_model');
$this->load->model('logbook_model');
// Call the parser within the API model to build the query
$query = $this->api_model->select_parse($arguments);
// Execute the query, and retrieve the results
$data = $this->logbook_model->api_search_query($query);
// Render Page
$data['page_title'] = "Log View - DOK";
$data['filter'] = str_replace("(and)", ", ", $q);//implode(", ", array_keys($a));
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/dok/details');
$this->load->view('interface_assets/footer');
}
public function dxcc ()
{
//echo "Needs Developed";

查看文件

@ -337,6 +337,7 @@ class API_Model extends CI_Model {
'COL_CONTEST_ID' => array('Name' => 'ContestID', 'Description' => '', 'Type' => ''),
'COL_COUNTRY' => array('Name' => 'Country', 'Description' => '', 'Type' => ''),
'COL_CQZ' => array('Name' => 'CQZone', 'Description' => '', 'Type' => ''),
'COL_DARC_DOK' => array('Name' => 'Dok', 'Description' => '', 'Type' => ''),
'COL_DISTANCE' => array('Name' => 'Distance', 'Description' => '', 'Type' => ''),
'COL_DXCC' => array('Name' => 'DXCC', 'Description' => '', 'Type' => ''),
'COL_EMAIL' => array('Name' => 'EMail', 'Description' => '', 'Type' => ''),

127
application/models/Dok.php 普通文件
查看文件

@ -0,0 +1,127 @@
<?php
class DOK extends CI_Model {
public $bandslots = array("160m"=>0,
"80m"=>0,
"60m"=>0,
"40m"=>0,
"30m"=>0,
"20m"=>0,
"17m"=>0,
"15m"=>0,
"12m"=>0,
"10m"=>0,
"6m" =>0,
"4m" =>0,
"2m" =>0,
"70cm"=>0,
"23cm"=>0,
"13cm"=>0,
"9cm"=>0,
"6cm"=>0,
"3cm"=>0,
"1.25cm"=>0);
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_worked_bands() {
// get all worked slots from database
$data = $this->db->query(
"SELECT distinct LOWER(`COL_BAND`) as `COL_BAND` FROM `".$this->config->item('table_name')."` WHERE COL_DARC_DOK IS NOT NULL AND COL_DARC_DOK != '' AND COL_DXCC = 230 "
);
$worked_slots = array();
foreach($data->result() as $row){
array_push($worked_slots, $row->COL_BAND);
}
// bring worked-slots in order of defined $bandslots
$results = array();
foreach(array_keys($this->bandslots) as $slot) {
if(in_array($slot, $worked_slots)) {
array_push($results, $slot);
}
}
return $results;
}
function show_stats(){
$data = $this->db->query(
"select upper(COL_DARC_DOK) as COL_DARC_DOK, COL_MODE, lcase(COL_BAND) as COL_BAND, count(COL_DARC_DOK) as cnt
from ".$this->config->item('table_name')." WHERE COL_DARC_DOK IS NOT NULL AND COL_DARC_DOK != '' AND COL_DXCC = 230
group by COL_DARC_DOK, COL_MODE, COL_BAND"
);
$results = array();
$last_dok = "";
foreach($data->result() as $row){
if ($last_dok != $row->COL_DARC_DOK){
// new row
$results[$row->COL_DARC_DOK] = $this->bandslots;
$last_dok = $row->COL_DARC_DOK;
}
// update stats
if (!isset($results[$row->COL_DARC_DOK]))
$results[$row->COL_DARC_DOK] = [];
if (!isset($results[$row->COL_DARC_DOK][$row->COL_BAND]))
$results[$row->COL_DARC_DOK][$row->COL_BAND] = 0;
$results[$row->COL_DARC_DOK][$row->COL_BAND] += $row->cnt;
}
return $results;
}
/**
* Function: mostactive
* Information: Returns the most active band
**/
function info($callsign)
{
$exceptions = $this->db->query('
SELECT *
FROM `dxccexceptions`
WHERE `prefix` = \''.$callsign.'\'
LIMIT 1
');
if ($exceptions->num_rows() > 0)
{
return $exceptions;
} else {
$query = $this->db->query('
SELECT *
FROM dxcc_entities
WHERE prefix = SUBSTRING( \''.$callsign.'\', 1, LENGTH( prefix ) )
ORDER BY LENGTH( prefix ) DESC
LIMIT 1
');
return $query;
}
}
function search(){
print_r($this->input->get());
return;
}
function empty_table($table) {
$this->db->empty_table($table);
}
function list() {
$this->db->order_by('name', 'ASC');
return $this->db->get('dxcc_entities');
}
}
?>

查看文件

@ -0,0 +1,40 @@
<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({
'autoDimensions' : false,
'width' : 700,
'height' : 300,
'transitionIn' : 'fade',
'transitionOut' : 'fade',
'type' : 'iframe'
});
$(".editbox").fancybox({
'autoDimensions' : false,
'width' : 600,
'height' : 550,
'transitionIn' : 'fade',
'transitionOut' : 'fade',
'type' : 'iframe',
onCleanup : function() {
return window.location.reload();
}
});
});
</script>
<div class="container">
<h2>Logbook</h2>
<h3>Filtering on <?php echo $filter ?></h3>
<?php $this->load->view('view_log/partial/log') ?>

查看文件

@ -0,0 +1,66 @@
<div class="container">
<h1><?php echo $page_title; ?></h1>
<!-- Sub Nav for Awards -->
<?php $this->load->view("awards/nav_bar")?>
<table class="table table-striped table-hover">
<thead>
<tr>
<td style="width:225px">DOKs (<?php echo count($doks)?>)</td>
<?php
foreach ($worked_bands as $slot) {
echo " <td>$slot</td>\n";
}
?>
</tr>
</thead>
<tbody>
<?php
foreach($doks as $dok=>$val){
print("<tr><td>$dok</td>");
foreach($val as $band=>$count){
if (in_array($band, $worked_bands)) {
if ($count == 0){
print("<td>&nbsp;</td>");
}else{
printf("<td><a href='dok_details?Dok=\"%s\"&Band=\"%s\"'>%d</a></td>", str_replace("&", "%26", $dok), $band, $count);
}
}
}
print("</tr>");
}
?>
</tbody>
</table>
<style>
#table-fixed{
position: fixed;
top: 40px;
display: none;
background-color: white;
border: 1px solid black;
}
</style>
<script>
var tableOffset = $(".zebra-striped").offset().top-40;
$('#table-fixed').width($(".zebra-striped").width());
var $header = $(".zebra-striped > thead").clone();
var $fixedHeader = $("#table-fixed").append($header);
$(window).bind("scroll", function() {
var offset = $(this).scrollTop();
if (offset >= tableOffset && $fixedHeader.is(":hidden")) {
$fixedHeader.show();
}
else if (offset < tableOffset) {
$fixedHeader.hide();
}
});
</script>
</div>

查看文件

@ -4,4 +4,5 @@
<a class="nav-link" href="<?php echo site_url('awards/wab'); ?>">WAB</a>
<a class="nav-link" href="<?php echo site_url('awards/sota'); ?>">SOTA</a>
<a class="nav-link" href="<?php echo site_url('awards/cq'); ?>">CQ</a>
<a class="nav-link" href="<?php echo site_url('awards/dok'); ?>">DOK</a>
</nav>