Basic Contesting features added

这个提交包含在:
Peter Goodhall 2011-08-18 17:08:04 +01:00
父节点 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&amp;v=2&amp;key=<?php echo $this->config->item('google_maps_api'); ?>&sensor=true"