Cloudlog/application/models/Timeplotter_model.php
Paul Beesley 5d23802e16 Further tweaks to text and text formatting
This commit has some further changes to text throughout the application. There are also some small fixes for text formatting. E.g. making sure that the small "helper" text under certain form fields is all consistent in terms of colour, font, etc.
2020-11-02 09:34:29 +00:00

151 行
无行尾
5 KiB
PHP

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Timeplotter_model extends CI_Model
{
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_worked_bands() {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();
$data = $this->db->query(
"SELECT distinct LOWER(`COL_BAND`) as `COL_BAND` FROM `" . $this->config->item('table_name') . "` WHERE station_id = " . $station_id . " AND COL_PROP_MODE != \"SAT\""
);
$worked_slots = array();
foreach ($data->result() as $row) {
array_push($worked_slots, $row->COL_BAND);
}
$SAT_data = $this->db->query(
"SELECT distinct LOWER(`COL_PROP_MODE`) as `COL_PROP_MODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id = " . $station_id . " AND COL_PROP_MODE = \"SAT\""
);
foreach ($SAT_data->result() as $row) {
array_push($worked_slots, strtoupper($row->COL_PROP_MODE));
}
// 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;
}
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,
"SAT" => 0,
);
function getTimes($postdata) {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();
$this->db->select('time(col_time_on) time, col_call as callsign');
if ($postdata['band'] != 'All') {
if ($postdata['band'] == 'sat') {
$this->db->where('col_prop_mode', $postdata['band']);
}
else {
$this->db->where('col_band', $postdata['band']);
}
}
if ($postdata['dxcc'] != 'All') {
$this->db->where('col_dxcc', $postdata['dxcc']);
}
if ($postdata['cqzone'] != 'All') {
$this->db->where('col_cqz', $postdata['cqzone']);
}
$this->db->where('station_id', $station_id);
$datearray = $this->db->get($this->config->item('table_name'));
$this->plot($datearray->result_array());
}
/*
* Function generates the array, checks for array entries, and adds them before returning data ready for plot
*/
function plot($log) {
$start = "00:00";
$end = "23:59";
$tStart = strtotime($start);
$tEnd = strtotime($end);
$tNow = $tStart;
$i = 0;
while($tNow <= $tEnd){ // Generates the time array
$label = date("H:i",$tNow).'z - ';
$tNow = strtotime('+30 minutes',$tNow);
$label .= date("H:i",$tNow).'z';
$dataarray[$i]['time'] = $label; // Used in x-axis of graph to show label for the timeslot
$dataarray[$i]['count'] = '0'; // Used to hold number of contacts found in the timeslot
$dataarray[$i]['calls'] = ''; // Used for holding callsigns of contacts in that timeslot
$dataarray[$i]['callcount'] = '0'; // Used for counting how many callsigns stored in that timeslot
$i++;
}
foreach ($log as $line) { // Looping through all the timestamps found in the log
$time = $line['time']; // Resolution is 30, calculates where to put result in array
$dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC'));
$arrayplacement = (int)$dt->getTimestamp();
$arrayplacement = floor($arrayplacement / 1800);
$dataarray[$arrayplacement]['count']++;
$callCount = $dataarray[$arrayplacement]['callcount'];
if ($callCount < 5) { // We only save a max of 5 calls to show in the graph
if ($callCount > 0) {
$dataarray[$arrayplacement]['calls'] .= ', ';
}
$dataarray[$arrayplacement]['calls'] .= $line['callsign'];
$dataarray[$arrayplacement]['callcount']++;
}
}
if (count($log) != 0) { // If we have a result from the log
header('Content-Type: application/json');
$data['qsocount'] = count($log);
$data['ok'] = 'OK';
$data['qsodata'] = $dataarray;
echo json_encode($data);
}
else {
header('Content-Type: application/json');
$data['error'] = 'No QSOs found to plot!';
echo json_encode($data);
}
}
}