Cloudlog/application/controllers/Update.php

295 wiersze
8.6 KiB
PHP

<?php
class Update extends CI_Controller {
/*
Controls Updating Elements of Cloudlog
Functions:
dxcc - imports the latest clublog cty.xml data
lotw_users - imports lotw users
*/
public function index()
{
$data['page_title'] = "Updates";
$this->load->view('interface_assets/header', $data);
$this->load->view('update/index');
$this->load->view('interface_assets/footer');
}
/*
* Load the dxcc entities
*/
public function dxcc_entities() {
// Load Database connectors
$this->load->model('dxcc_entities');
// Load the cty file
$xml_data = simplexml_load_file("updates/cty.xml");
//$xml_data->entities->entity->count();
$count = 0;
foreach ($xml_data->entities->entity as $entity) {
$startinfo = strtotime($entity->start);
$endinfo = strtotime($entity->end);
$start_date = ($startinfo) ? date('Y-m-d H:i:s',$startinfo) : null;
$end_date = ($endinfo) ? date('Y-m-d H:i:s',$endinfo) : null;
if(!$entity->cqz) {
$data = array(
'prefix' => (string) $entity->call,
'name' => (string) $entity->entity,
);
} else {
$data = array(
'adif' => (int) $entity->adif,
'name' => (string) $entity->name,
'prefix' => (string) $entity->prefix,
'ituz' => (float) $entity->ituz,
'cqz' => (int) $entity->cqz,
'cont' => (string) $entity->cont,
'long' => (float) $entity->long,
'lat' => (float) $entity->lat,
'start' => $start_date,
'end' => $end_date,
);
}
$this->db->insert('dxcc_entities', $data);
$count += 1;
if ($count % 10 == 0)
$this->update_status();
}
$this->update_status();
return $count;
}
/*
* Load the dxcc exceptions
*/
public function dxcc_exceptions() {
// Load Database connectors
$this->load->model('dxcc_exceptions');
// Load the cty file
$xml_data = simplexml_load_file("updates/cty.xml");
$count = 0;
foreach ($xml_data->exceptions->exception as $record) {
$startinfo = strtotime($record->start);
$endinfo = strtotime($record->end);
$start_date = ($startinfo) ? date('Y-m-d H:i:s',$startinfo) : null;
$end_date = ($endinfo) ? date('Y-m-d H:i:s',$endinfo) : null;
$data = array(
'record' => (int) $record->attributes()->record,
'call' => (string) $record->call,
'entity' => (string) $record->entity,
'adif' => (int) $record->adif,
'cqz' => (int) $record->cqz,
'cont' => (string) $record->cont,
'long' => (float) $record->long,
'lat' => (float) $record->lat,
'start' => $start_date,
'end' => $end_date,
);
$this->db->insert('dxcc_exceptions', $data);
$count += 1;
if ($count % 10 == 0)
$this->update_status();
}
$this->update_status();
return $count;
}
/*
* Load the dxcc prefixes
*/
public function dxcc_prefixes() {
// Load Database connectors
$this->load->model('dxcc_prefixes');
// Load the cty file
$xml_data = simplexml_load_file("updates/cty.xml");
$count = 0;
foreach ($xml_data->prefixes->prefix as $record) {
$startinfo = strtotime($record->start);
$endinfo = strtotime($record->end);
$start_date = ($startinfo) ? date('Y-m-d H:i:s',$startinfo) : null;
$end_date = ($endinfo) ? date('Y-m-d H:i:s',$endinfo) : null;
$data = array(
'record' => (int) $record->attributes()->record,
'call' => (string) $record->call,
'entity' => (string) $record->entity,
'adif' => (int) $record->adif,
'cqz' => (int) $record->cqz,
'cont' => (string) $record->cont,
'long' => (float) $record->long,
'lat' => (float) $record->lat,
'start' => $start_date,
'end' => $end_date,
);
$this->db->insert('dxcc_prefixes', $data);
$count += 1;
if ($count % 10 == 0)
$this->update_status();
}
//print("$count prefixes processed");
$this->update_status();
return $count;
}
// Updates the DXCC & Exceptions from the Club Log Cty.xml file.
public function dxcc() {
$this->update_status("Downloading file");
// give it 5 minutes...
set_time_limit(600);
// Load Migration data if any.
$this->load->library('migration');
$this->fix_migrations();
$this->migration->latest();
// Download latest file.
$url = "https://cdn.clublog.org/cty.php?api=a11c3235cd74b88212ce726857056939d52372bd";
$gz = gzopen($url, 'r');
$data = "";
while (!gzeof($gz)) {
$data .= gzgetc($gz);
}
gzclose($gz);
file_put_contents('./updates/cty.xml', $data);
// Clear the tables, ready for new data
$this->db->empty_table("dxcc_entities");
$this->db->empty_table("dxcc_exceptions");
$this->db->empty_table("dxcc_prefixes");
$this->update_status();
// Parse the three sections of the file and update the tables
$this->db->trans_start();
$this->dxcc_entities();
$this->dxcc_exceptions();
$this->dxcc_prefixes();
$this->db->trans_complete();
$this->update_status("DONE");
}
public function update_status($done=""){
if ($done != "Downloading file"){
// Check that everything is done?
if ($done == ""){
$done = "Updating...";
}
$html = $done."<br/>";
$html .= "Dxcc Entities: ".$this->db->count_all('dxcc_entities')."<br/>";
$html .= "Dxcc Exceptions: ".$this->db->count_all('dxcc_exceptions')."<br/>";
$html .= "Dxcc Prefixes: ".$this->db->count_all('dxcc_prefixes')."<br/>";
}else{
$html = $done."....<br/>";
}
file_put_contents('./updates/status.html', $html);
}
private function fix_migrations(){
$res = $this->db->query("select version from migrations");
if ($res->num_rows() >0){
$row = $res->row();
$version = $row->version;
if ($version < 7){
$this->db->query("update migrations set version=7");
}
}
}
public function check_missing_dxcc($all = false){
$this->load->model('logbook_model');
$this->logbook_model->check_missing_dxcc_id($all);
}
public function update_clublog_scp() {
$strFile = "./updates/clublog_scp.txt";
$url = "https://cdn.clublog.org/clublog.scp.gz";
set_time_limit(300);
$this->update_status("Downloading Club Log SCP file");
$gz = gzopen($url, 'r');
if ($gz)
{
$data = "";
while (!gzeof($gz)) {
$data .= gzgetc($gz);
}
gzclose($gz);
file_put_contents($strFile, $data);
if (file_exists($strFile))
{
$nCount = count(file($strFile));
if ($nCount > 0)
{
$this->update_status("DONE: " . number_format($nCount) . " callsigns loaded" );
} else {
$this->update_status("FAILED: Empty file");
}
} else {
$this->update_status("FAILED: Could not create Club Log SCP file locally");
}
} else {
$this->update_status("FAILED: Could not connect to Club Log");
}
}
public function download_lotw_users() {
$contents = file_get_contents('https://lotw.arrl.org/lotw-user-activity.csv', true);
if($contents === FALSE) {
echo "something went wrong";
} else {
$file = './updates/lotw_users.csv';
if(!is_file($file)){ // Some simple example content.
file_put_contents($file, $contents); // Save our content to the file.
}
echo "LoTW User Data Saved.";
}
}
public function lotw_check() {
$f = fopen('./updates/lotw_users.csv', "r");
$result = false;
while ($row = fgetcsv($f)) {
if ($row[0] == '2M0SQL/MM') {
$result = $row[0];
echo "found";
break;
}
}
fclose($f);
}
}
?>