[Contesting] Contests can be added/edited/deleted inside Cloudlog. Used for choosing Contest in Contest Logging

这个提交包含在:
Andreas 2021-02-12 23:27:08 +01:00
父节点 405c9da68a
当前提交 adaa7f3f8a
共有 9 个文件被更改,包括 538 次插入302 次删除

查看文件

@ -4,7 +4,7 @@
| Enable/Disable Migrations
|--------------------------------------------------------------------------
|
| Migrations are disabled by default but should be enabled
| Migrations are disabled by default but should be enabled
| whenever you intend to do a schema migration.
|
*/
@ -21,7 +21,7 @@ $config['migration_enabled'] = TRUE;
| be upgraded / downgraded to.
|
*/
$config['migration_version'] = 62;
$config['migration_version'] = 63;
/*
|--------------------------------------------------------------------------

查看文件

@ -13,7 +13,7 @@ class Contesting extends CI_Controller {
{
parent::__construct();
$this->lang->load('contesting');
$this->load->model('user_model');
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
@ -26,13 +26,14 @@ class Contesting extends CI_Controller {
$this->load->model('logbook_model');
$this->load->model('user_model');
$this->load->model('modes');
$this->load->model('contesting_model');
$data['active_station_profile'] = $this->stations->find_active();
$data['notice'] = false;
$data['stations'] = $this->stations->all();
$data['radios'] = $this->cat->radios();
$data['dxcc'] = $this->logbook_model->fetchDxcc();
$data['modes'] = $this->modes->active();
$data['contestnames'] = $this->contesting_model->getActivecontests();
$this->load->library('form_validation');
@ -71,4 +72,90 @@ class Contesting extends CI_Controller {
return json_encode($data);
}
}
public function create()
{
$this->load->model('Contesting_model');
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Contest Name', 'required');
$this->form_validation->set_rules('adifname', 'Contest Adif Name', 'required');
if ($this->form_validation->run() == FALSE)
{
$data['page_title'] = "Create Mode";
$this->load->view('contesting/create', $data);
}
else
{
$this->Contesting_model->add();
}
}
public function add() {
$this->load->model('Contesting_model');
$data['contests'] = $this->Contesting_model->getAllContests();
// Render Page
$data['page_title'] = "Contests";
$this->load->view('interface_assets/header', $data);
$this->load->view('contesting/add');
$this->load->view('interface_assets/footer');
}
public function edit($id)
{
$this->load->library('form_validation');
$this->load->model('Contesting_model');
$item_id_clean = $this->security->xss_clean($id);
$data['contest'] = $this->Contesting_model->contest($item_id_clean);
$data['page_title'] = "Edit Contest";
$this->form_validation->set_rules('name', 'Contest Name', 'required');
$this->form_validation->set_rules('adifname', 'Adif Contest Name', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('interface_assets/header', $data);
$this->load->view('contesting/edit');
$this->load->view('interface_assets/footer');
}
else
{
$this->Contesting_model->edit($item_id_clean);
$data['notice'] = "Contest ".$this->security->xss_clean($this->input->post('name', true))." Updated";
redirect('contesting/add');
}
}
public function delete() {
$id = $this->input->post('id');
$this->load->model('Contesting_model');
$this->Contesting_model->delete($id);
}
public function activate() {
$id = $this->input->post('id');
$this->load->model('Contesting_model');
$this->Contesting_model->activate($id);
header('Content-Type: application/json');
echo json_encode(array('message' => 'OK'));
return;
}
public function deactivate() {
$id = $this->input->post('id');
$this->load->model('Contesting_model');
$this->Contesting_model->deactivate($id);
header('Content-Type: application/json');
echo json_encode(array('message' => 'OK'));
return;
}
}

查看文件

@ -32,4 +32,91 @@ class Contesting_model extends CI_Model {
header('Content-Type: application/json');
echo json_encode($data->result());
}
}
function getActivecontests() {
$sql = "SELECT name, adifname FROM contest WHERE active = 1 ORDER BY name ASC";
$data = $this->db->query($sql);
return($data->result_array());
}
function getAllContests() {
$sql = "SELECT id, name, adifname, active FROM contest ORDER BY name ASC";
$data = $this->db->query($sql);
return($data->result_array());
}
function delete($id) {
// Clean ID
$clean_id = $this->security->xss_clean($id);
// Delete Contest
$this->db->delete('contest', array('id' => $clean_id));
}
function activate($id) {
// Clean ID
$clean_id = $this->security->xss_clean($id);
$data = array(
'active' => '1',
);
$this->db->where('id', $clean_id);
$this->db->update('contest', $data);
return true;
}
function deactivate($id) {
// Clean ID
$clean_id = $this->security->xss_clean($id);
$data = array(
'active' => '0',
);
$this->db->where('id', $clean_id);
$this->db->update('contest', $data);
return true;
}
function add() {
$data = array(
'name' => xss_clean($this->input->post('name', true)),
'adifname' => xss_clean($this->input->post('adifname', true)),
);
$this->db->insert('contest', $data);
}
function contest($id) {
// Clean ID
$clean_id = $this->security->xss_clean($id);
$sql = "SELECT id, name, adifname, active FROM contest where id =" . $clean_id;
$data = $this->db->query($sql);
return ($data->row());
}
function edit($id) {
$data = array(
'name' => xss_clean($this->input->post('name', true)),
'adifname' => xss_clean($this->input->post('adifname', true)),
'active' => xss_clean($this->input->post('active', true)),
);
$this->db->where('id', $id);
$this->db->update('contest', $data);
}
}

查看文件

@ -0,0 +1,64 @@
<div class="container">
<br>
<?php if($this->session->flashdata('message')) { ?>
<!-- Display Message -->
<div class="alert-message error">
<p><?php echo $this->session->flashdata('message'); ?></p>
</div>
<?php } ?>
<h2><?php echo $page_title; ?></h2>
<div class="card">
<div class="card-header">
Contests
</div>
<div class="card-body">
<p class="card-text">
Using the contest list, you can control which Contests are shown when logging QSOs in a contest.
</p>
<p class="card-text">
Active contests will be shown in the Contest Name drop-down, while inactive contests will be hidden and cannot be selected.
</p>
<div class="table-responsive">
<table style="width:100%" class="contesttable table table-sm table-striped">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Adif mode</th>
<th scope="col">Active</th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<?php foreach ($contests as $row) { ?>
<tr>
<td><?php echo $row['name'];?></td>
<td><?php echo $row['adifname'];?></td>
<td class='contest_<?php echo $row['id'] ?>'><?php if ($row['active'] == 1) { echo "active";} else { echo "not active";};?></td>
<td style="text-align: center">
<?php if ($row['active'] == 1) {
echo "<button onclick='javascript:deactivateContest(". $row['id'] . ")' class='btn_" . $row['id'] . " btn btn-secondary btn-sm'>Deactivate</button>";
} else {
echo "<button onclick='javascript:activateContest(". $row['id'] . ")' class='btn_" . $row['id'] . " btn btn-primary btn-sm'>Activate</button>";
};?>
</td>
<td>
<a href="<?php echo site_url('contesting/edit')."/".$row['id']; ?>" class="btn btn-outline-primary btn-sm"><i class="fas fa-edit"></i> Edit</a>
</td>
<td>
<a href="javascript:deleteContest('<?php echo $row['id']; ?>', '<?php echo $row['name']; ?>');" class="btn btn-danger btn-sm" ><i class="fas fa-trash-alt"></i> Delete</a>
</td>
</tr>
<?php } ?>
</tbody>
<table>
</div>
<br/>
<p><button onclick="createContestDialog();" class="btn btn-primary btn-sm"><i class="fas fa-plus"></i> Add a Contest</button></p>
</div>
</div>

查看文件

@ -0,0 +1,38 @@
<div class="container" id="create_contest">
<br>
<?php if($this->session->flashdata('message')) { ?>
<!-- Display Message -->
<div class="alert-message error">
<p><?php echo $this->session->flashdata('message'); ?></p>
</div>
<?php } ?>
<?php if($this->session->flashdata('notice')) { ?>
<div id="message" >
<?php echo $this->session->flashdata('notice'); ?>
</div>
<?php } ?>
<?php $this->load->helper('form'); ?>
<?php echo validation_errors(); ?>
<form method="post" name="create_profile">
<div class="form-group">
<label for="contestInput">Contest Name</label>
<input type="text" class="form-control" name="contestname" id="contestInput" aria-describedby="contestInputHelp" required>
<small id="contestInputHelp" class="form-text text-muted">Name of Contest</small>
</div>
<div class="form-group">
<label for="adifcontestInput">Contest ADIF Name</label>
<input type="text" class="form-control" name="adifcontestname" id="adifcontestInput" aria-describedby="adifcontestInputHelp">
<small id="adifcontestInputHelp" class="form-text text-muted">Name of Contest in ADIF-specification</small>
</div>
<button onclick="createContest(this.form);" class="btn btn-primary btn-sm"><i class="fas fa-plus-square"></i> Create Contest</button>
</form>
</div>

查看文件

@ -0,0 +1,61 @@
<div class="container">
<br>
<?php if($this->session->flashdata('message')) { ?>
<!-- Display Message -->
<div class="alert-message error">
<p><?php echo $this->session->flashdata('message'); ?></p>
</div>
<?php } ?>
<div class="card">
<div class="card-header">
<?php echo $page_title; ?>
</div>
<div class="card-body">
<h5 class="card-title"></h5>
<p class="card-text"></p>
<?php if($this->session->flashdata('notice')) { ?>
<div id="message" >
<?php echo $this->session->flashdata('notice'); ?>
</div>
<?php } ?>
<?php $this->load->helper('form'); ?>
<?php echo validation_errors(); ?>
<form method="post" action="<?php echo site_url('contesting/edit/'); ?><?php echo $contest->id; ?>" name="edit_contest">
<div class="form-group">
<label for="contestnameInput">Contest Name</label>
<input type="text" class="form-control" name="name" id="nameInput" aria-describedby="contestnameInputHelp" value="<?php if(set_value('name') != "") { echo set_value('name'); } else { echo $contest->name; } ?>" required>
<small id="contestnameInputHelp" class="form-text text-muted">Name of Contest</small>
</div>
<div class="form-group">
<label for="adifnameInput">ADIF Contest Name</label>
<input type="text" class="form-control" name="adifname" id="adifnameInput" aria-describedby="adifnameInputHelp" value="<?php if(set_value('adifname') != "") { echo set_value('adifname'); } else { echo $contest->adifname; } ?>">
<small id="adifnameInputHelp" class="form-text text-muted">Name of Contest in ADIF-specification</small>
</div>
<div class="form-group">
<label for="activeInput">Active</label>
<select id="activeInput" class="form-control mode form-control-sm" name="active">
<?php
printf("<option value=\"1\" %s>active</option>", $contest->active==1?"selected=\"selected\"":"");
printf("<option value=\"0\" %s>not active</option>", $contest->active==0?"selected=\"selected\"":"");
?>
</select>
<small id="activeInputHelp" class="form-text text-muted">Set to active if to be listed in Contest-list</small>
</div>
<button type="submit" class="btn btn-primary btn-sm"><i class="fas fa-plus-square"></i> Update Contest</button>
</form>
</div>
</div>
<br>
</div>

查看文件

@ -9,13 +9,13 @@
<form id="qso_input" name="qsos">
<div class="form-group row">
<label class="col-auto control-label" for="radio"><?php echo $this->lang->line('contesting_exchange_type'); ?></label>
<div class="col-auto">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="exchangeradio" id="serial" value="serial" checked>
<label class="form-check-label" for="serial"><?php echo $this->lang->line('contesting_exchange_type_serial'); ?></label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="exchangeradio" id="other" value="other">
<label class="form-check-label" for="other"><?php echo $this->lang->line('contesting_exchange_type_other'); ?></label>
@ -23,236 +23,12 @@
</div>
<label class="col-auto control-label" for="contestname"><?php echo $this->lang->line('contesting_contest_name'); ?></label>
<div class="col-auto">
<select class="form-control-sm" id="contestname" name="contestname">
<option value="Other" selected="selected">Other</option>
<option value="070-160M-SPRINT">PODXS Great Pumpkin Sprint</option>
<option value="070-3-DAY">PODXS Three Day Weekend</option>
<option value="070-31-FLAVORS">PODXS 31 Flavors</option>
<option value="070-40M-SPRINT">PODXS 40m Firecracker Sprint</option>
<option value="070-80M-SPRINT">PODXS 80m Jay Hudak Memorial Sprint</option>
<option value="070-PSKFEST">PODXS PSKFest</option>
<option value="070-ST-PATS-DAY">PODXS St. Patricks Day</option>
<option value="070-VALENTINE-SPRINT">PODXS Valentine Sprint</option>
<option value="10-RTTY">Ten-Meter RTTY Contest (2011 onwards)</option>
<option value="1010-OPEN-SEASON">Open Season Ten Meter QSO Party</option>
<option value="7QP">7th-Area QSO Party</option>
<option value="AL-QSO-PARTY">Alabama QSO Party</option>
<option value="ALL-ASIAN-DX-CW">JARL All Asian DX Contest (CW)</option>
<option value="ALL-ASIAN-DX-PHONE">JARL All Asian DX Contest (PHONE)</option>
<option value="ANARTS-RTTY">ANARTS WW RTTY</option>
<option value="ANATOLIAN-RTTY">Anatolian WW RTTY</option>
<option value="AP-SPRINT">Asia - Pacific Sprint</option>
<option value="AR-QSO-PARTY">Arkansas QSO Party</option>
<option value="ARI-DX">ARI DX Contest</option>
<option value="ARRL-10">ARRL 10 Meter Contest</option>
<option value="ARRL-10-GHZ">ARRL 10 GHz and Up Contest</option>
<option value="ARRL-160">ARRL 160 Meter Contest</option>
<option value="ARRL-222">ARRL 222 MHz and Up Distance Contest</option>
<option value="ARRL-DX-CW">ARRL International DX Contest (CW)</option>
<option value="ARRL-DX-SSB">ARRL International DX Contest (Phone)</option>
<option value="ARRL-EME">ARRL EME contest</option>
<option value="ARRL-FIELD-DAY">ARRL Field Day</option>
<option value="ARRL-RR-CW">ARRL Rookie Roundup (CW)</option>
<option value="ARRL-RR-RTTY">ARRL Rookie Roundup (RTTY)</option>
<option value="ARRL-RR-SSB">ARRL Rookie Roundup (Phone)</option>
<option value="ARRL-RTTY">ARRL RTTY Round-Up</option>
<option value="ARRL-SCR">ARRL School Club Roundup</option>
<option value="ARRL-SS-CW">ARRL November Sweepstakes (CW)</option>
<option value="ARRL-SS-SSB">ARRL November Sweepstakes (Phone)</option>
<option value="ARRL-UHF-AUG">ARRL August UHF Contest</option>
<option value="ARRL-VHF-JAN">ARRL January VHF Sweepstakes</option>
<option value="ARRL-VHF-JUN">ARRL June VHF QSO Party</option>
<option value="ARRL-VHF-SEP">ARRL September VHF QSO Party</option>
<option value="AZ-QSO-PARTY">Arizona QSO Party</option>
<option value="BARTG-RTTY">BARTG Spring RTTY Contest</option>
<option value="BARTG-SPRINT">BARTG Sprint Contest</option>
<option value="BC-QSO-PARTY">British Columbia QSO Party</option>
<option value="CA-QSO-PARTY">California QSO Party</option>
<option value="CIS-DX">CIS DX Contest</option>
<option value="CO-QSO-PARTY">Colorado QSO Party</option>
<option value="CQ-160-CW">CQ WW 160 Meter DX Contest (CW)</option>
<option value="CQ-160-SSB">CQ WW 160 Meter DX Contest (SSB)</option>
<option value="CQ-M">CQ-M International DX Contest</option>
<option value="CQ-VHF">CQ World-Wide VHF Contest</option>
<option value="CQ-WPX-CW">CQ WW WPX Contest (CW)</option>
<option value="CQ-WPX-RTTY">CQ/RJ WW RTTY WPX Contest</option>
<option value="CQ-WPX-SSB">CQ WW WPX Contest (SSB)</option>
<option value="CQ-WW-CW">CQ WW DX Contest (CW)</option>
<option value="CQ-WW-RTTY">CQ/RJ WW RTTY DX Contest</option>
<option value="CQ-WW-SSB">CQ WW DX Contest (SSB)</option>
<option value="CT-QSO-PARTY">Connecticut QSO Party</option>
<option value="CVA-DX-CW">Concurso Verde e Amarelo DX CW Contest</option>
<option value="CVA-DX-SSB">Concurso Verde e Amarelo DX SSB Contest</option>
<option value="CWOPS-CW-OPEN">CWops CW Open Competition</option>
<option value="CWOPS-CWT">CWops Mini-CWT Test</option>
<option value="DARC-WAEDC-CW">WAE DX Contest (CW)</option>
<option value="DARC-WAEDC-RTTY">WAE DX Contest (RTTY)</option>
<option value="DARC-WAEDC-SSB">WAE DX Contest (SSB)</option>
<option value="DARC-WAG">DARC Worked All Germany</option>
<option value="DE-QSO-PARTY">Delaware QSO Party</option>
<option value="DL-DX-RTTY">DL-DX RTTY Contest</option>
<option value="DMC-RTTY">DMC RTTY Contest</option>
<option value="EA-CNCW">Concurso Nacional de Telegrafía</option>
<option value="EA-DME">Municipios Españoles</option>
<option value="EA-PSK63">EA PSK63</option>
<option value="EA-RTTY (import-only)">Unión de Radioaficionados Españoles RTTY Contest</option>
<option value="EA-SMRE-CW">Su Majestad El Rey de España - CW</option>
<option value="EA-SMRE-SSB">Su Majestad El Rey de España - SSB</option>
<option value="EA-VHF-ATLANTIC">Atlántico V-UHF</option>
<option value="EA-VHF-COM">Combinado de V-UHF</option>
<option value="EA-VHF-COSTA-SOL">Costa del Sol V-UHF</option>
<option value="EA-VHF-EA">Nacional VHF</option>
<option value="EA-VHF-EA1RCS">Segovia EA1RCS V-UHF</option>
<option value="EA-VHF-QSL">QSL V-UHF & 50MHz</option>
<option value="EA-VHF-SADURNI">Sant Sadurni V-UHF</option>
<option value="EA-WW-RTTY">Unión de Radioaficionados Españoles RTTY Contest</option>
<option value="EPC-PSK63">PSK63 QSO Party</option>
<option value="EU Sprint">EU Sprint</option>
<option value="EU-HF">EU HF Championship</option>
<option value="EU-PSK-DX">EU PSK DX Contest</option>
<option value="EUCW160M">European CW Association 160m CW Party</option>
<option value="FALL SPRINT">FISTS Fall Sprint</option>
<option value="FL-QSO-PARTY">Florida QSO Party</option>
<option value="GA-QSO-PARTY">Georgia QSO Party</option>
<option value="HA-DX">Hungarian DX Contest</option>
<option value="HELVETIA">Helvetia Contest</option>
<option value="HI-QSO-PARTY">Hawaiian QSO Party</option>
<option value="HOLYLAND">IARC Holyland Contest</option>
<option value="IA-QSO-PARTY">Iowa QSO Party</option>
<option value="IARU-FIELD-DAY">DARC IARU Region 1 Field Day</option>
<option value="IARU-HF">IARU HF World Championship</option>
<option value="ID-QSO-PARTY">Idaho QSO Party</option>
<option value="IL QSO Party">Illinois QSO Party</option>
<option value="IN-QSO-PARTY">Indiana QSO Party</option>
<option value="JARTS-WW-RTTY">JARTS WW RTTY</option>
<option value="JIDX-CW">Japan International DX Contest (CW)</option>
<option value="JIDX-SSB">Japan International DX Contest (SSB)</option>
<option value="JT-DX-RTTY">Mongolian RTTY DX Contest</option>
<option value="KS-QSO-PARTY">Kansas QSO Party</option>
<option value="KY-QSO-PARTY">Kentucky QSO Party</option>
<option value="LA-QSO-PARTY">Louisiana QSO Party</option>
<option value="LDC-RTTY">DRCG Long Distance Contest (RTTY)</option>
<option value="LZ DX">LZ DX Contest</option>
<option value="MAR-QSO-PARTY">Maritimes QSO Party</option>
<option value="MD-QSO-PARTY">Maryland QSO Party</option>
<option value="ME-QSO-PARTY">Maine QSO Party</option>
<option value="MI-QSO-PARTY">Michigan QSO Party</option>
<option value="MIDATLANTIC-QSO-PARTY">Mid-Atlantic QSO Party</option>
<option value="MN-QSO-PARTY">Minnesota QSO Party</option>
<option value="MO-QSO-PARTY">Missouri QSO Party</option>
<option value="MS-QSO-PARTY">Mississippi QSO Party</option>
<option value="MT-QSO-PARTY">Montana QSO Party</option>
<option value="NA-SPRINT-CW">North America Sprint (CW)</option>
<option value="NA-SPRINT-RTTY">North America Sprint (RTTY)</option>
<option value="NA-SPRINT-SSB">North America Sprint (Phone)</option>
<option value="NAQP-CW">North America QSO Party (CW)</option>
<option value="NAQP-RTTY">North America QSO Party (RTTY)</option>
<option value="NAQP-SSB">North America QSO Party (Phone)</option>
<option value="NC-QSO-PARTY">North Carolina QSO Party</option>
<option value="ND-QSO-PARTY">North Dakota QSO Party</option>
<option value="NE-QSO-PARTY">Nebraska QSO Party</option>
<option value="NEQP">New England QSO Party</option>
<option value="NH-QSO-PARTY">New Hampshire QSO Party</option>
<option value="NJ-QSO-PARTY">New Jersey QSO Party</option>
<option value="NM-QSO-PARTY">New Mexico QSO Party</option>
<option value="NRAU-BALTIC-CW">NRAU-Baltic Contest (CW)</option>
<option value="NRAU-BALTIC-SSB">NRAU-Baltic Contest (SSB)</option>
<option value="NV-QSO-PARTY">Nevada QSO Party</option>
<option value="NY-QSO-PARTY">New York QSO Party</option>
<option value="OCEANIA-DX-CW">Oceania DX Contest (CW)</option>
<option value="OCEANIA-DX-SSB">Oceania DX Contest (SSB)</option>
<option value="OH-QSO-PARTY">Ohio QSO Party</option>
<option value="OK-DX-RTTY">Czech Radio Club OK DX Contest</option>
<option value="OK-OM-DX">Czech Radio Club OK-OM DX Contest</option>
<option value="OK-QSO-PARTY">Oklahoma QSO Party</option>
<option value="OMISS-QSO-PARTY">Old Man International Sideband Society QSO Party</option>
<option value="ON-QSO-PARTY">Ontario QSO Party</option>
<option value="OR-QSO-PARTY">Oregon QSO Party</option>
<option value="PA-QSO-PARTY">Pennsylvania QSO Party</option>
<option value="PACC">Dutch PACC Contest</option>
<option value="PSK-DEATHMATCH">MDXA PSK DeathMatch (2005-2010)</option>
<option value="QC-QSO-PARTY">Quebec QSO Party</option>
<option value="RAC (import-only)">Canadian Amateur Radio Society Contest</option>
<option value="RAC-CANADA-DAY">RAC Canada Day Contest</option>
<option value="RAC-CANADA-WINTER">RAC Canada Winter Contest</option>
<option value="RDAC">Russian District Award Contest</option>
<option value="RDXC">Russian DX Contest</option>
<option value="REF-160M">Reseau des Emetteurs Francais 160m Contest</option>
<option value="REF-CW">Reseau des Emetteurs Francais Contest (CW)</option>
<option value="REF-SSB">Reseau des Emetteurs Francais Contest (SSB)</option>
<option value="REP-PORTUGAL-DAY-HF">Rede dos Emissores Portugueses Portugal Day HF Contest</option>
<option value="RI-QSO-PARTY">Rhode Island QSO Party</option>
<option value="RSGB-160">1.8MHz Contest</option>
<option value="RSGB-21/28-CW">21/28 MHz Contest (CW)</option>
<option value="RSGB-21/28-SSB">21/28 MHz Contest (SSB)</option>
<option value="RSGB-80M-CC">80m Club Championships</option>
<option value="RSGB-AFS-CW">Affiliated Societies Team Contest (CW)</option>
<option value="RSGB-AFS-SSB">Affiliated Societies Team Contest (SSB)</option>
<option value="RSGB-CLUB-CALLS">Club Calls</option>
<option value="RSGB-COMMONWEALTH">Commonwealth Contest</option>
<option value="RSGB-IOTA">IOTA Contest</option>
<option value="RSGB-LOW-POWER">Low Power Field Day</option>
<option value="RSGB-NFD">National Field Day</option>
<option value="RSGB-ROPOCO">RoPoCo</option>
<option value="RSGB-SSB-FD">SSB Field Day</option>
<option value="RUSSIAN-RTTY">Russian Radio RTTY Worldwide Contest</option>
<option value="SAC-CW">Scandinavian Activity Contest (CW)</option>
<option value="SAC-SSB">Scandinavian Activity Contest (SSB)</option>
<option value="SARTG-RTTY">SARTG WW RTTY</option>
<option value="SC-QSO-PARTY">South Carolina QSO Party</option>
<option value="SCC-RTTY">SCC RTTY Championship</option>
<option value="SD-QSO-PARTY">South Dakota QSO Party</option>
<option value="SMP-AUG">SSA Portabeltest</option>
<option value="SMP-MAY">SSA Portabeltest</option>
<option value="SP-DX-RTTY">PRC SPDX Contest (RTTY)</option>
<option value="SPAR-WINTER-FD">SPAR Winter Field Day</option>
<option value="SPDXContest">SP DX Contest</option>
<option value="SPRING SPRINT">FISTS Spring Sprint</option>
<option value="SR-MARATHON">Scottish-Russian Marathon</option>
<option value="STEW-PERRY">Stew Perry Topband Distance Challenge</option>
<option value="SUMMER SPRINT">FISTS Summer Sprint</option>
<option value="TARA-GRID-DIP">TARA Grid Dip PSK-RTTY Shindig</option>
<option value="TARA-RTTY">TARA RTTY Mêlée</option>
<option value="TARA-RUMBLE">TARA Rumble PSK Contest</option>
<option value="TARA-SKIRMISH">TARA Skirmish Digital Prefix Contest</option>
<option value="TEN-RTTY">Ten-Meter RTTY Contest (before 2011)</option>
<option value="TMC-RTTY">The Makrothen Contest</option>
<option value="TN-QSO-PARTY">Tennessee QSO Party</option>
<option value="TX-QSO-PARTY">Texas QSO Party</option>
<option value="UBA-DX-CW">UBA Contest (CW)</option>
<option value="UBA-DX-SSB">UBA Contest (SSB)</option>
<option value="UK-DX-BPSK63">European PSK Club BPSK63 Contest</option>
<option value="UK-DX-RTTY">UK DX RTTY Contest</option>
<option value="UKR-CHAMP-RTTY">Open Ukraine RTTY Championship</option>
<option value="UKRAINIAN DX">Ukrainian DX</option>
<option value="UKSMG-6M-MARATHON">UKSMG 6m Marathon</option>
<option value="UKSMG-SUMMER-ES">UKSMG Summer Es Contest</option>
<option value="URE-DX  (import-only)">Ukrainian DX Contest</option>
<option value="US-COUNTIES-QSO">Mobile Amateur Awards Club</option>
<option value="UT-QSO-PARTY">Utah QSO Party</option>
<option value="VA-QSO-PARTY">Virginia QSO Party</option>
<option value="VENEZ-IND-DAY">RCV Venezuelan Independence Day Contest</option>
<option value="VIRGINIA QSO PARTY (import-only)">Virginia QSO Party</option>
<option value="VOLTA-RTTY">Alessandro Volta RTTY DX Contest</option>
<option value="WA-QSO-PARTY">Washington QSO Party</option>
<option value="WI-QSO-PARTY">Wisconsin QSO Party</option>
<option value="WIA-HARRY ANGEL">WIA Harry Angel Memorial 80m Sprint</option>
<option value="WIA-JMMFD">WIA John Moyle Memorial Field Day</option>
<option value="WIA-OCDX">WIA Oceania DX (OCDX) Contest</option>
<option value="WIA-REMEMBRANCE">WIA Remembrance Day</option>
<option value="WIA-ROSS HULL">WIA Ross Hull Memorial VHF/UHF Contest</option>
<option value="WIA-TRANS TASMAN">WIA Trans Tasman Low Bands Challenge</option>
<option value="WIA-VHF/UHF FD">WIA VHF UHF Field Days</option>
<option value="WIA-VK SHIRES">WIA VK Shires</option>
<option value="WINTER SPRINT">FISTS Winter Sprint</option>
<option value="WV-QSO-PARTY">West Virginia QSO Party</option>
<option value="WW-DIGI">World Wide Digi DX Contest</option>
<option value="WY-QSO-PARTY">Wyoming QSO Party</option>
<option value="XE-INTL-RTTY">Mexico International Contest (RTTY)</option>
<option value="YOHFDX">YODX HF contest</option>
<option value="YUDXC">YU DX Contest</option>
<?php foreach($contestnames as $contest) {
echo "<option value='" . $contest['adifname'] . "'>" . $contest['name'] . "</option>";
} ?>
</select>
</div>
</div>
@ -361,7 +137,7 @@
</div>
</div>
<div class="form-row">
<div class="form-group col-md-5">
<label for="name"><?php echo $this->lang->line('general_word_name'); ?></label>
@ -373,7 +149,7 @@
<input type="text" class="form-control form-control-sm" name="comment" id="comment" value="">
</div>
</div>
<button type="button" class="btn btn-sm btn-light" onclick="reset_log_fields()"><i class="fas fa-sync-alt"></i> <?php echo $this->lang->line('contesting_btn_reset_qso'); ?></button>
<button type="button" class="btn btn-sm btn-primary" onclick="logQso();"><i class="fas fa-save"></i> <?php echo $this->lang->line('contesting_btn_save_qso'); ?></button>
</form>
@ -406,7 +182,7 @@
<th><?php echo $this->lang->line('gen_hamradio_exchange_recv_short'); ?></th>
</tr>
</thead>
<tbody class="contest_qso_table_contents">
</tbody>
</table>

查看文件

@ -139,7 +139,7 @@ $('[data-fancybox]').fancybox({
iframe : {
preload : false
}
});
});
</script>
@ -156,7 +156,7 @@ $('[data-fancybox]').fancybox({
<?php if($qra == "set") { ?>
var q_lat = <?php echo $qra_lat; ?>;
var q_lng = <?php echo $qra_lng; ?>;
var q_lng = <?php echo $qra_lng; ?>;
<?php } else { ?>
var q_lat = 40.313043;
var q_lng = -32.695312;
@ -187,7 +187,7 @@ $('[data-fancybox]').fancybox({
<?php if($qra == "set") { ?>
var q_lat = <?php echo $qra_lat; ?>;
var q_lng = <?php echo $qra_lng; ?>;
var q_lng = <?php echo $qra_lng; ?>;
<?php } else { ?>
var q_lat = 40.313043;
var q_lng = -32.695312;
@ -218,7 +218,7 @@ $('[data-fancybox]').fancybox({
<?php if($qra == "set") { ?>
var q_lat = <?php echo $qra_lat; ?>;
var q_lng = <?php echo $qra_lng; ?>;
var q_lng = <?php echo $qra_lng; ?>;
<?php } else { ?>
var q_lat = 40.313043;
var q_lng = -32.695312;
@ -274,8 +274,8 @@ $(document).ready(function(){
$('#partial_view').load("logbook/search_result/<?php echo $this->input->post('callsign'); ?>", function() {
});
<?php } ?>
$(document).on('keypress',function(e) {
$(document).on('keypress',function(e) {
if(e.which == 13) {
if ($('#callsign').val()) {
@ -299,7 +299,7 @@ $(document).on('keypress',function(e) {
<script type="text/javascript">
<?php if($qra == "set") { ?>
var q_lat = <?php echo $qra_lat; ?>;
var q_lng = <?php echo $qra_lng; ?>;
var q_lng = <?php echo $qra_lng; ?>;
<?php } else { ?>
var q_lat = 40.313043;
var q_lng = -32.695312;
@ -449,7 +449,7 @@ $(document).on('change', 'input', function(){
var value = $(this).val();
for (var x=0;x<optionslist.length;x++){
if (optionslist[x].value === value) {
$("#sat_mode").val("");
$("#sat_mode").val("");
$('.satellite_modes_list').find('option').remove().end();
selected_sat = value;
// get Json file
@ -492,16 +492,16 @@ $(document).on('change', 'input', function(){
if (key == selected_sat) {
$.each( val.Modes, function( key1, val2 ) {
if(key1 == selected_sat_mode) {
if (val2[0].Uplink_Mode == "LSB" || val2[0].Uplink_Mode == "USB") {
$("#mode").val("SSB");
$("#mode").val("SSB");
} else {
$("#mode").val(val2[0].Uplink_Mode);
$("#mode").val(val2[0].Uplink_Mode);
}
$("#band").val(frequencyToBand(val2[0].Uplink_Freq));
$("#band_rx").val(frequencyToBand(val2[0].Downlink_Freq));
$("#frequency").val(val2[0].Uplink_Freq);
$("#frequency_rx").val(val2[0].Downlink_Freq);
$("#frequency").val(val2[0].Uplink_Freq);
$("#frequency_rx").val(val2[0].Downlink_Freq);
$("#selectPropagation").val('SAT');
}
});
@ -578,7 +578,7 @@ $(document).on('change', 'input', function(){
});
// Callsign always has focus on load
$("#callsign").focus();
$("#callsign").focus();
if ( ! manual ) {
$(function($) {
@ -638,7 +638,7 @@ $(document).on('change', 'input', function(){
reset_fields();
}
});
$(document).keyup(function(e) {
if (e.key === "Escape") { // escape key maps to keycode `27`
reset_fields();
@ -835,7 +835,7 @@ $(document).on('change', 'input', function(){
if(result.dxcc.entity != undefined) {
$('#country').val(convert_case(result.dxcc.entity));
$('#callsign_info').text(convert_case(result.dxcc.entity));
if($("#sat_name" ).val() != "") {
//logbook/jsonlookupgrid/io77/SAT/0/0
$.getJSON('logbook/jsonlookupcallsign/' + find_callsign.replace(/\//g, "-") + '/SAT/0/0', function(result)
@ -906,7 +906,7 @@ $(document).on('change', 'input', function(){
}
markers.addLayer(marker).addTo(mymap);
/* Find Locator if the field is empty */
if($('#locator').val() == "") {
@ -932,7 +932,7 @@ $(document).on('change', 'input', function(){
$('#locator').removeClass("newGrid");
$('#locator').attr('title', '');
}
}
/* Find Operators Name */
@ -985,7 +985,7 @@ $(document).on('change', 'input', function(){
$('#callsign_info').removeClass("badge-success");
$('#callsign_info').removeClass("badge-danger");
$('#input_usa_state').val("");
}
}
})
// Only set the frequency when not set by userdata/PHP.
@ -995,15 +995,15 @@ $(document).on('change', 'input', function(){
$('#frequency').val(result);
$('#frequency_rx').val("");
});
}
}
/* on mode change */
$('.mode').change(function() {
$.get('qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) {
$('#frequency').val(result);
$('#frequency_rx').val("");
});
});
});
});
/* Calculate Frequency */
/* on band change */
@ -1011,9 +1011,9 @@ $(document).on('change', 'input', function(){
$.get('qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function(result) {
$('#frequency').val(result);
$('#frequency_rx').val("");
});
});
});
/* On Key up Calculate Bearing and Distance */
$("#locator").keyup(function(){
if ($(this).val()) {
@ -1022,7 +1022,7 @@ $(document).on('change', 'input', function(){
var qra_lookup = qra_input.substring(0, 4);
if(qra_lookup.length >= 4) {
// Check Log if satname is provided
if($("#sat_name" ).val() != "") {
@ -1085,7 +1085,7 @@ $(document).on('change', 'input', function(){
}
markers.addLayer(marker).addTo(mymap);
})
$('#locator_info').load("logbook/searchbearing/" + $(this).val()).fadeIn("slow");
}
}
@ -1276,7 +1276,7 @@ $(document).ready(function(){
center: [19, 0],
zoom: 3
});
var grid_two = <?php echo $grid_2char; ?>;
var grid_four = <?php echo $grid_4char; ?>;
var grid_six = <?php echo $grid_6char; ?>;
@ -1291,8 +1291,8 @@ $(document).ready(function(){
function onMapClick(event) {
var LatLng = event.latlng;
var lat = LatLng.lat;
var lng = LatLng.lng;
var lat = LatLng.lat;
var lng = LatLng.lng;
var locator = LatLng2Loc(lat,lng, 10);
var loc_4char = locator.substring(0, 4);
console.log(loc_4char);
@ -1329,7 +1329,7 @@ $(document).ready(function(){
$('#gt1_qso').text("");
}
$("#grid_results tbody").empty();
$("#grid_results tbody").empty();
if (count > 0) {
$("#grid_results tbody").append(items.join( "" ));
@ -1349,13 +1349,13 @@ $(document).ready(function(){
$('#gridsquare_bands')
.append($("<option></option>")
.attr("value",value)
.text(value));
.text(value));
});
var num = "<?php echo $this->uri->segment(3);?>";
$("#gridsquare_bands option").each(function(){
if($(this).val()==num){ // EDITED THIS LINE
$(this).attr("selected","selected");
$(this).attr("selected","selected");
}
});
@ -2978,6 +2978,125 @@ function deleteQsl(id) {
});
}
</script>
<?php } ?>
<?php if ($this->uri->segment(1) == "contesting" && $this->uri->segment(2) == "add") { ?>
<script>
$('.contesttable').DataTable({
"pageLength": 25,
responsive: false,
ordering: false,
"scrollY": "400px",
"scrollCollapse": true,
"paging": false,
"scrollX": true,
dom: 'Bfrtip',
buttons: [
'csv'
]
});
// using this to change color of csv-button if dark mode is chosen
var background = $('body').css( "background-color");
if (background != ('rgb(255, 255, 255)')) {
$(".buttons-csv").css("color", "white");
}
function createContestDialog() {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/contesting/create',
type: 'post',
success: function(html) {
BootstrapDialog.show({
title: 'Add Contest',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'create-contest-dialog',
nl2br: false,
message: html,
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
function createContest(form) {
var baseURL= "<?php echo base_url();?>";
if (form.contestname.value != '') {
$.ajax({
url: baseURL + 'index.php/contesting/create',
type: 'post',
data: {'name': form.contestname.value,
'adifname': form.adifcontestname.value},
success: function(html) {
location.reload();
}
});
}
}
function deactivateContest(contestid) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/contesting/deactivate',
type: 'post',
data: {'id': contestid },
success: function(html) {
$(".contest_" + contestid).text('not active');
$('.btn_'+contestid).html('Activate');
$('.btn_'+contestid).attr('onclick', 'activateContest('+contestid+')')
}
});
}
function activateContest(contestid) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/contesting/activate',
type: 'post',
data: {'id': contestid },
success: function(html) {
$('.contest_'+contestid).text('active');
$('.btn_'+contestid).html('Deactivate');
$('.btn_'+contestid).attr('onclick', 'deactivateContest('+contestid+')')
}
});
}
function deleteContest(id, contest) {
BootstrapDialog.confirm({
title: 'DANGER',
message: 'Warning! Are you sure you want to delete the following contest: ' + contest + '?' ,
type: BootstrapDialog.TYPE_DANGER,
closable: true,
draggable: true,
btnOKClass: 'btn-danger',
callback: function(result) {
if(result) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/contesting/delete',
type: 'post',
data: {'id': id
},
success: function(data) {
$(".contest_" + id).parent("tr:first").remove(); // removes mode from table
}
});
}
}
});
}
</script>
<?php } ?>
</body>
</html>

查看文件

@ -54,7 +54,7 @@
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="<?php echo site_url('logbook');?>">Logbook</a>
@ -76,7 +76,7 @@
<!-- Notes -->
<a class="nav-link" href="<?php echo site_url('notes');?>">Notes</a>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Analytics</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
@ -120,13 +120,13 @@
<a class="dropdown-item" href="<?php echo site_url('awards/was');?>">WAS</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Admin</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="<?php echo site_url('user');?>" title="Manage user accounts"><i class="fas fa-user"></i> User Accounts</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('options');?>" title="Manage global options"><i class="fas fa-cog"></i> Global Options</a>
@ -134,50 +134,54 @@
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('api/help');?>" title="Manage API keys"><i class="fas fa-key"></i> API</a>
<div class="dropdown-divider"></div>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('station');?>" title="Manage station profiles"><i class="fas fa-home"></i> Station Profiles</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('mode');?>" title="Manage QSO modes"><i class="fas fa-broadcast-tower"></i> Modes</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('radio');?>" title="Interface with one or more radios"><i class="fas fa-broadcast-tower"></i> Radio Interface</a>
<div class="dropdown-divider"></div>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('adif');?>" title="Amateur Data Interchange Format (ADIF) import / export"><i class="fas fa-sync"></i> ADIF Import / Export</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('lotw');?>" title="Synchronise with Logbook of the World (LotW)"><i class="fas fa-sync"></i> Logbook of the World</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('eqsl/import');?>" title="eQSL import / export"><i class="fas fa-sync"></i> eQSL Import / Export</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('qrz/export');?>" title="Upload to QRZ.com logbook"><i class="fas fa-sync"></i> QRZ Logbook</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('qslprint');?>" title="Print Requested QSLs"><i class="fas fa-print"></i> Print Requested QSLs</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('backup');?>" title="Backup Cloudlog content"><i class="fas fa-save"></i> Backup</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('update');?>" title="Update Country Files"><i class="fas fa-sync"></i> Update Country Files</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('kml');?>" title="KML Export for Google Earth"><i class="fas fa-sync"></i> KML Export</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('contesting/add');?>" title="Manage Contest names"><i class="fas fa-broadcast-tower"></i> Contests</a>
</div>
</li>
<?php } ?>
@ -186,7 +190,7 @@
<?php if($this->optionslib->get_option('global_search') != "false" || $this->session->userdata('user_type') >= 2) { ?>
<form method="post" action="<?php echo site_url('search'); ?>" class="form-inline">
<input class="form-control mr-sm-2" id="nav-bar-search-input" type="search" name="callsign" placeholder="Search Callsign" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit"><i class="fas fa-search"></i> Search</button>
</form>
<?php } ?>
@ -208,20 +212,20 @@
<!-- Logged in As -->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-user"></i> <?php echo $this->session->userdata('user_callsign'); ?></a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="<?php echo site_url('user/edit')."/".$this->session->userdata('user_id'); ?>" title="Account"><i class="fas fa-user"></i> Account</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" target="_blank" href="https://github.com/magicbug/Cloudlog/wiki" title="Help"><i class="fas fa-question"></i> Help</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" target="_blank" href="https://forum.cloudlog.co.uk" title="Forum"><i class="fas fa-question"></i> Forum</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('user/logout');?>" title="Logout"><i class="fas fa-sign-out-alt"></i> Logout</a>
</div>
</li>