Basic Contesting features added
这个提交包含在:
父节点
03e566ef02
当前提交
aeeddb5a2f
共有 4 个文件被更改,包括 469 次插入 和 4 次删除
|
|
@ -6,29 +6,83 @@ class Contest extends CI_Controller {
|
|||
// Displays available contests
|
||||
public function index()
|
||||
{
|
||||
// Load database items
|
||||
$this->load->model('contests');
|
||||
$data['contests'] = $this->contests->list_contests();
|
||||
|
||||
// Load views
|
||||
$this->load->view('layout/header');
|
||||
$this->load->view('contest/main', $data);
|
||||
$this->load->view('layout/footer');
|
||||
}
|
||||
|
||||
/*
|
||||
Displays contest logging view based on the ID provided, allowing users to log in contest mode giving them serial numbers and scoring information.
|
||||
*/
|
||||
public function view($id) {
|
||||
|
||||
// Load database information
|
||||
$this->load->model('contests');
|
||||
|
||||
$data['info'] = $this->contests->information($id);
|
||||
$data['log'] = $this->contests->contest_log_view($data['info']->start, $data['info']->end, $data['info']);
|
||||
$data['summary'] = $this->contests->contest_summary_bands($data['info']->start, $data['info']->end, $data['info']);
|
||||
|
||||
|
||||
|
||||
// Run validation checks on QSO submission
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('start_time', 'Time', 'required');
|
||||
$this->form_validation->set_rules('callsign', 'Callsign', 'required');
|
||||
$this->form_validation->set_rules('sent_serial', 'Sent Serial Number', 'required');
|
||||
$this->form_validation->set_rules('rst_recv', 'Recevied RST', 'required');
|
||||
$this->form_validation->set_rules('recv_serial', 'Received Serial Number', 'required');
|
||||
|
||||
if($data['info']->qra == "Y") {
|
||||
$this->form_validation->set_rules('locator', 'Received QRA', 'required');
|
||||
}
|
||||
|
||||
// Load Views
|
||||
if ($this->form_validation->run() == FALSE)
|
||||
{
|
||||
$this->load->view('layout/header');
|
||||
$this->load->view('contest/log', $data);
|
||||
$this->load->view('layout/footer');
|
||||
} else {
|
||||
$contest_id = $id;
|
||||
// Add QSO
|
||||
$this->contests->add($contest_id);
|
||||
|
||||
// Store Basic QSO Info for reuse
|
||||
$this->session->set_userdata('band', $this->input->post('band'));
|
||||
$this->session->set_userdata('freq', $this->input->post('freq'));
|
||||
$this->session->set_userdata('mode', $this->input->post('mode'));
|
||||
|
||||
$data['info'] = $this->contests->information($id);
|
||||
$data['log'] = $this->contests->contest_log_view($data['info']->start, $data['info']->end, $data['info']);
|
||||
|
||||
$this->load->view('layout/header');
|
||||
$this->load->view('contest/log', $data);
|
||||
$this->load->view('layout/footer');
|
||||
// Set Any Notice Messages
|
||||
$data['notice'] = "QSO Added";
|
||||
|
||||
$this->load->view('layout/header');
|
||||
$this->load->view('contest/log', $data);
|
||||
$this->load->view('layout/footer');
|
||||
}
|
||||
}
|
||||
|
||||
// Create a contest
|
||||
/*
|
||||
Create a contest, these are linked to templates for scoring information. contests are per entry like a weekly RSGB Club contest etc.
|
||||
*/
|
||||
public function create() {
|
||||
|
||||
// Load database items
|
||||
$this->load->model('contests');
|
||||
$data['templates'] = $this->contests->list_templates();
|
||||
|
||||
$this->load->helper(array('form', 'url'));
|
||||
|
||||
// Run Validation
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('contest_name', 'Contest Name', 'required');
|
||||
|
|
@ -45,6 +99,9 @@ class Contest extends CI_Controller {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Create a template, Contest Templates are sets of parameters for a series or single contest selecting items like scoring, bands and modes available.
|
||||
*/
|
||||
public function add_template() {
|
||||
|
||||
$this->load->helper(array('form', 'url'));
|
||||
|
|
|
|||
|
|
@ -65,6 +65,99 @@ class Contests extends CI_Model {
|
|||
return $this->db->get('contests');
|
||||
}
|
||||
|
||||
function contest_summary_bands($start_date, $end_date, $info) {
|
||||
$query = $this->db->query('SELECT DISTINCT (COL_BAND) AS band, count( * ) AS count, COL_TIME_ON FROM '.$this->config->item('table_name').' WHERE COL_TIME_ON >= \''.$start_date.'\' AND COL_TIME_ON <= \''.$end_date.'\' GROUP BY band ORDER BY count DESC');
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
function contest_log_view($start_date, $end_date, $info) {
|
||||
$this->db->select('COL_CALL, COL_BAND, COL_TIME_ON, COL_RST_RCVD, COL_RST_SENT, COL_MODE, COL_NAME,COL_STX_STRING,COL_SRX_STRING, COL_COUNTRY, COL_PRIMARY_KEY');
|
||||
$this->db->where('COL_TIME_ON >=', $start_date);
|
||||
$this->db->where('COL_TIME_ON <=', $end_date);
|
||||
if($info->band_160 == "Y") {
|
||||
$this->db->where('COL_BAND', '160m');
|
||||
}
|
||||
if($info->band_80 == "Y") {
|
||||
$this->db->where('COL_BAND', '80m');
|
||||
}
|
||||
if($info->band_40 == "Y") {
|
||||
$this->db->where('COL_BAND', '40m');
|
||||
}
|
||||
if($info->band_20 == "Y") {
|
||||
$this->db->where('COL_BAND', '20m');
|
||||
}
|
||||
if($info->band_15 == "Y") {
|
||||
$this->db->where('COL_BAND', '15m');
|
||||
}
|
||||
if($info->band_10 == "Y") {
|
||||
$this->db->where('COL_BAND', '10m');
|
||||
}
|
||||
if($info->band_6m == "Y") {
|
||||
$this->db->where('COL_BAND', '6m');
|
||||
}
|
||||
if($info->band_4m == "Y") {
|
||||
$this->db->where('COL_BAND', '4m');
|
||||
}
|
||||
if($info->band_2m == "Y") {
|
||||
$this->db->where('COL_BAND', '2m');
|
||||
}
|
||||
if($info->band_70cm == "Y") {
|
||||
$this->db->where('COL_BAND', '70cm');
|
||||
}
|
||||
if($info->band_23cm == "Y") {
|
||||
$this->db->where('COL_BAND', '23cm');
|
||||
}
|
||||
if($info->mode_ssb == "Y") {
|
||||
$this->db->where('COL_MODE', 'SSB');
|
||||
}
|
||||
if($info->mode_cw == "Y") {
|
||||
$this->db->where('COL_MODE', 'CW');
|
||||
}
|
||||
//$this->db->order_by("COL_PRIMARY_KEY", "asc");
|
||||
$this->db->order_by("COL_TIME_ON", "desc");
|
||||
$this->db->limit(10);
|
||||
|
||||
return $this->db->get($this->config->item('table_name'));
|
||||
|
||||
}
|
||||
|
||||
function add($contest_id) {
|
||||
// Join date+time
|
||||
$datetime = date('Y-m-d') ." ". $this->input->post('start_time');
|
||||
|
||||
// Create array with QSO Data
|
||||
$data = array(
|
||||
'COL_TIME_ON' => $datetime,
|
||||
'COL_TIME_OFF' => $datetime,
|
||||
'COL_CALL' => strtoupper($this->input->post('callsign')),
|
||||
'COL_BAND' => $this->input->post('band'),
|
||||
'COL_FREQ' => $this->input->post('freq'),
|
||||
'COL_MODE' => $this->input->post('mode'),
|
||||
'COL_RST_RCVD' => $this->input->post('rst_recv'),
|
||||
'COL_SRX_STRING' => $this->input->post('recv_serial'),
|
||||
'COL_RST_SENT' => $this->input->post('rst_sent'),
|
||||
'COL_STX_STRING' => $this->input->post('sent_serial'),
|
||||
'COL_GRIDSQUARE' => $this->input->post('locator'),
|
||||
'COL_COUNTRY' => $this->input->post('country'),
|
||||
'COL_QSLSDATE' => date('Y-m-d'),
|
||||
'COL_QSLRDATE' => date('Y-m-d'),
|
||||
'COL_QSL_SENT' => 'N',
|
||||
'COL_QSL_RCVD' => 'N',
|
||||
);
|
||||
|
||||
// Add QSO to database
|
||||
$this->db->insert($this->config->item('table_name'), $data);
|
||||
|
||||
// Update contest file stored serial number.
|
||||
$data = array(
|
||||
'serial_num' => $this->input->post('sent_serial'),
|
||||
);
|
||||
|
||||
$this->db->where('id', $contest_id);
|
||||
$this->db->update('contests', $data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -1,6 +1,316 @@
|
|||
<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>
|
||||
|
||||
<?php
|
||||
$serial_number = $info->serial_num + 1;
|
||||
if($serial_number <= 49) {
|
||||
$new_serial = "00".$serial_number;
|
||||
}
|
||||
|
||||
if($serial_number >= 49 && $serial_number <= 100) {
|
||||
$new_serial = "0".$serial_number;
|
||||
}
|
||||
|
||||
if($serial_number > 100) {
|
||||
$new_serial = $serial_number;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
setInterval("settime()", 1000);
|
||||
|
||||
function settime () {
|
||||
var curtime = new Date();
|
||||
var curhour = curtime.getHours();
|
||||
var curmin = curtime.getMinutes();
|
||||
var cursec = curtime.getSeconds();
|
||||
var time = "";
|
||||
|
||||
if(curhour == 0) curhour = 24;
|
||||
time = (curhour > 24 ? curhour - 24 : curhour - 1) + ":" +
|
||||
(curmin < 10 ? "0" : "") + curmin + ":" +
|
||||
(cursec < 10 ? "0" : "") + cursec
|
||||
|
||||
document.qsos.start_time.value = time;
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="contest_wrap">
|
||||
<h2>Contest - <?php echo $info->name; ?></h2>
|
||||
<div class="contest_view">
|
||||
<div class="contest_sidebar">
|
||||
<h3>Summary</h3>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>Band</td>
|
||||
<td>QSOs</td>
|
||||
<td>Points</td>
|
||||
</tr>
|
||||
|
||||
<?php foreach ($summary->result() as $row) { ?>
|
||||
<?php if($row->band == "160m" && $info->band_160 == "Y") { ?>
|
||||
<tr>
|
||||
<td>160m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "80m" && $info->band_80 == "Y") { ?>
|
||||
<tr>
|
||||
<td>80m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "40m" && $info->band_40 == "Y") { ?>
|
||||
<tr>
|
||||
<td>40m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "20m" && $info->band_20 == "Y") { ?>
|
||||
<tr>
|
||||
<td>20m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "15m" && $info->band_15 == "Y") { ?>
|
||||
<tr>
|
||||
<td>15m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "10m" && $info->band_10 == "Y") { ?>
|
||||
<tr>
|
||||
<td>10m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "6m" && $info->band_6m == "Y") { ?>
|
||||
<tr>
|
||||
<td>6m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "4m" && $info->band_4m == "Y") { ?>
|
||||
<tr>
|
||||
<td>4m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "2m" && $info->band_2m == "Y") { ?>
|
||||
<tr>
|
||||
<td>2m</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "70cm" && $info->band_70cm == "Y") { ?>
|
||||
<tr>
|
||||
<td>70cm</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($row->band == "23cm" && $info->band_23cm == "Y") { ?>
|
||||
<tr>
|
||||
<td>23cm</td>
|
||||
<td><?php echo $row->count; ?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
<table class="logbook" width="50%">
|
||||
<tr class="log_title titles">
|
||||
<td>Date</td>
|
||||
<td>Time</td>
|
||||
<td>Band</td>
|
||||
<td>Call</td>
|
||||
<td>Mode</td>
|
||||
<td>RST(S)</td>
|
||||
<td>Serial</td>
|
||||
<td>Recv</td>
|
||||
<td>Serial</td>
|
||||
</tr>
|
||||
|
||||
<?php $i = 0;
|
||||
foreach ($log->result() as $row) { ?>
|
||||
|
||||
<?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 $row->COL_BAND; ?></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_STX_STRING; ?></td>
|
||||
<td><?php echo $row->COL_RST_RCVD; ?></td>
|
||||
<td><?php echo $row->COL_SRX_STRING; ?></td>
|
||||
|
||||
</tr>
|
||||
<?php $i++; } ?>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
<!-- Entry Box -->
|
||||
|
||||
<?php echo validation_errors(); ?>
|
||||
|
||||
<form class="contest_qso_box" method="post" action="<?php echo site_url('contest/view/'.$info->id); ?>" name="qsos">
|
||||
|
||||
<table>
|
||||
|
||||
<tr class="log_title">
|
||||
<td class="title">Time</td>
|
||||
<td class="title">Callsign</td>
|
||||
<?php if($this->config->item('display_freq') == true) { ?>
|
||||
<td class="title">Freq</td>
|
||||
<?php } ?>
|
||||
<td class="title">Mode</td>
|
||||
<td class="title">Band</td>
|
||||
<td class="title">RST(S)</td>
|
||||
<td class="title"></td>
|
||||
<td class="title">RST(R)</td>
|
||||
<td class="title">Serial</td>
|
||||
<?php if($info->qra == "Y") { ?>
|
||||
<td class="title">QRA</td>
|
||||
<?php } ?>
|
||||
<td class="title"></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><input class="input_time" type="text" name="start_time" value="" size="7" /></td>
|
||||
<td><input size="10" id="callsign" type="text" name="callsign" value="" /></td>
|
||||
<td><select name="mode">
|
||||
<?php if ($info->mode_ssb == "Y") { ?>
|
||||
<option value="SSB" <?php if($this->session->userdata('mode') == "" || $this->session->userdata('mode') == "FM") { echo "selected=\"selected\""; } ?>>SSB</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($info->mode_cw == "Y") { ?>
|
||||
<option value="CW" <?php if($this->session->userdata('mode') == "CW") { echo "selected=\"selected\""; } ?>>CW</option>
|
||||
<?php } ?>
|
||||
|
||||
</select></td>
|
||||
|
||||
<td><select name="band">
|
||||
<?php if($info->band_160 == "Y") { ?>
|
||||
<option value="160m" <?php if($this->session->userdata('band') == "160m") { echo "selected=\"selected\""; } ?>>160m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_80 == "Y") { ?>
|
||||
<option value="80m" <?php if($this->session->userdata('band') == "80m") { echo "selected=\"selected\""; } ?>>80m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_40 == "Y") { ?>
|
||||
<option value="40m" <?php if($this->session->userdata('band') == "40m") { echo "selected=\"selected\""; } ?>>40m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_20 == "Y") { ?>
|
||||
<option value="20m" <?php if($this->session->userdata('band') == "20m") { echo "selected=\"selected\""; } ?>>20m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_15 == "Y") { ?>
|
||||
<option value="15m" <?php if($this->session->userdata('band') == "15m") { echo "selected=\"selected\""; } ?>>15m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_10 == "Y") { ?>
|
||||
<option value="10m" <?php if($this->session->userdata('band') == "10m") { echo "selected=\"selected\""; } ?>>10m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_6m == "Y") { ?>
|
||||
<option value="6m" <?php if($this->session->userdata('band') == "6m") { echo "selected=\"selected\""; } ?>>6m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_4m == "Y") { ?>
|
||||
<option value="4m" <?php if($this->session->userdata('band') == "4m") { echo "selected=\"selected\""; } ?>>4m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_2m == "Y") { ?>
|
||||
<option value="2m" <?php if($this->session->userdata('band') == "2m") { echo "selected=\"selected\""; } ?>>2m</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_70cm == "Y") { ?>
|
||||
<option value="70cm" <?php if($this->session->userdata('band') == "70cm") { echo "selected=\"selected\""; } ?>>70cm</option>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($info->band_23cm == "Y") { ?>
|
||||
<option value="23cm" <?php if($this->session->userdata('band') == "23cm") { echo "selected=\"selected\""; } ?>>23cm</option>
|
||||
<?php } ?>
|
||||
</select></td>
|
||||
<td><select name="rst_sent">
|
||||
<option value="51">51</option>
|
||||
<option value="52">52</option>
|
||||
<option value="53">53</option>
|
||||
<option value="54">54</option>
|
||||
<option value="55">55</option>
|
||||
<option value="56">56</option>
|
||||
<option value="57">57</option>
|
||||
<option value="58">58</option>
|
||||
<option value="59" selected="selected">59</option>
|
||||
<option value="59+10dB">59+10dB</option>
|
||||
<option value="59+20dB">59+20dB</option>
|
||||
<option value="59+30dB">59+30dB</option>
|
||||
</select></td>
|
||||
|
||||
|
||||
<td><input type="text" name="sent_serial" value="<?php echo $new_serial; ?>" size="2" /></td>
|
||||
|
||||
<td><input type="text" name="rst_recv" value="59" size="2" /></td>
|
||||
<td><input type="text" name="recv_serial" value="" size="2" /></td>
|
||||
|
||||
<?php if($info->qra == "Y") { ?>
|
||||
<td><input id="locator" type="text" name="locator" value="" size="7" /></td>
|
||||
<?php } ?>
|
||||
<td><div class="controls"><input type="submit" value="Add QSO" /></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="info">
|
||||
<input size="20" id="country" type="text" name="country" value="" /> <span id="locator_info"></span>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -89,6 +89,11 @@ margin: 10px 0;
|
|||
.contest_wrap { margin: 0 auto; width: 95%; }
|
||||
.contest_wrap h2 { margin: 0; width: 100%; font-weight: bold; font-size: 23px; margin-top: 5px; margin-bottom: 10px; }
|
||||
.contest_view { margin: 0 auto; width: 100%; border: 1px solid #d7d7d7; background-color: #ffffff; padding: 5px; }
|
||||
.contest_sidebar {
|
||||
width: 30%;
|
||||
float: right;
|
||||
margin: 0 auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="http://maps.google.com/maps?file=api&v=2&key=<?php echo $this->config->item('google_maps_api'); ?>&sensor=true"
|
||||
|
|
|
|||
正在加载…
在新工单中引用