src.dualinventive.com/mtinfo/dist/webroot/rc-4.05/include/db_log.php

2202 lines
66 KiB
PHP

<?php
/** \file include\db_log.php
* \brief DI webinterface zkl-log functions
* \author Rob Schalken, Core|Vision
* \version $Revision: 26247 $
* \date $Date: 2016-02-29 10:40:22 +0100 (Mon, 29 Feb 2016) $
*
* This file contains the zkl-log database functions. This file is always included.
*/
/*
* Major/minor defintions
*/
define("MAJ_POWER_UP", 0);
define("MIN_POWER_UP", 0);
define("MAJ_MEAS_ON", 1);
define("MAJ_MEAS_OFF", 2);
define("MAJ_SHORTCIR_OK", 3);
define("MAJ_SHORTCIR_ALARM", 4);
define("MAJ_SHORTCIR_ERROR", 5);
define("MIN_SHORCIR_ERROR", 1);
define("MAJ_BATTERY", 6);
define("MIN_BATTERY_ALARM", 0);
define("MIN_BATTERY_EMPTY", 1);
define("MIN_BATTERY_OK", 2);
define("MIN_BATTERY_REMOVED", 3);
define("MIN_BATTERY_LOG", 16);
define("MAJ_CALIBRATION", 5);
define("MIN_CALIBRATION", 36);
define("MAJ_GPS", 13);
define("MIN_GPS", 48);
define("MAJ_RELAIS", 13);
define("MIN_RELAIS_ON", 24);
define("MIN_RELAIS_OFF", 25);
define("MAJ_SMS", 9);
define("MIN_SMS_SENT", 33);
define("MIN_SMS_ERROR", 34);
define("MIN_SMS_RECV", 48);
define("MAJ_TEMP", 13);
define("MIN_TEMP_ONBOARD", 64);
define("MIN_TEMP_EXT1", 65);
define("MAJ_SWITCH", 10);
define("MIN_SWITCH_STATE", 98);
define("MAJ_SWITCH3000", 7);
define("MIN_SWITCH3000_KEY_ON_OP", 0);
define("MIN_SWITCH3000_KEY_OP_ON", 1);
define("MIN_SWITCH3000_KEY_OFF_OP", 2);
define("MIN_SWITCH3000_KEY_OP_OFF", 3);
define("MIN_SWITCH3000_REBOOT", 9);
define("MIN_SWITCH3000_KEY_OFF", 112);
define("MIN_SWITCH3000_KEY_ON", 113);
define("MIN_SWITCH3000_MTINFO_OFF", 240);
define("MIN_SWITCH3000_MTINFO_ON", 241);
define("MIN_SWITCH3000_MASK", 0x70);
define("MAJ_PERIPHERALS", 10);
define("MIN_SWITCH3000_OFF", 104);
define("MIN_SWITCH3000_ON", 105);
/**
* Fetch user log project data which match log user database id
*
* Inputs:
* - log_user_id: log user id
*
* Return: Array containing user log user information
*/
function db_fetch_user_log_project($log_user_id) {
// Initial return value
$result = "";
// Get user log zkl info
$row_log_user = db_fetch_data("SELECT project FROM log_gebruiker_project WHERE id='" . $log_user_id . "'", "log");
// Parse into result (NB: at most one result)
if (!empty($row_log_user)) {
foreach( $row_log_user as $project_id ) {
$project_info = db_fetch_data("SELECT * FROM project WHERE id=" . $project_id['project'], "default");
$project_info = $project_info[0];
// Check is project have a parent
if( !is_null($project_info['parent']) ){
$parentName = db_fetch_data("SELECT naam from project where id='".$project_info['parent']."'", "default");
$project_info['parent'] = $parentName[0]['naam'];
}
//check if the save button has been pressed
$change = db_fetch_data("SELECT id FROM log_gebruiker WHERE id='" . $log_user_id . "' AND formdata LIKE '%recall_but%'", "log");
if( $change ) {
$project_info['change']=TRUE;
}
else{
$project_info['change']=FALSE;
}
}
$result[] = $project_info;
}
return $result;
}
/**
* Fetch user log user data which match log user database id
*
* Inputs:
* - log_user_id: log user id
*
* Return: Array containing user log user information
*/
function db_fetch_user_log_user($log_user_id) {
// Initial return value
$result = "";
// Get user log zkl info
$row_log_user = db_fetch_data("SELECT gebruiker FROM log_gebruiker_gebruiker WHERE id='" . $log_user_id . "'", "log");
// Parse into result (NB: at most one result)
if (!empty($row_log_user)) {
foreach( $row_log_user as $user_id ) {
$user_info = $user_id; // only user id
//check if the save button has been pressed
$change = db_fetch_data("SELECT id FROM log_gebruiker WHERE id='" . $log_user_id . "' AND formdata LIKE '%recall_but%'", "log");
if( $change ) {
$user_info['change']=TRUE;
}
else{
$user_info['change']=FALSE;
}
}
$result[] = $user_info;
}
return $result;
}
/**
* Fetch user log customer data which match log user database id
*
* Inputs:
* - log_user_id: log user id
*
* Return: Array containing user log customer information
*/
function db_fetch_user_log_customer($log_user_id) {
// Initial return value
$result = "";
// Get user log customer info
$row_log_user = db_fetch_data("SELECT klant FROM log_gebruiker_klant WHERE id='" . $log_user_id . "'", "log");
// Parse into result
if (!empty($row_log_user)) {
foreach( $row_log_user as $cust_id ) {
$customer_info = db_fetch_data("SELECT * FROM klant WHERE id=" . $cust_id['klant'], "default");
$customer_info = $customer_info[0];
//check if the save button has been pressed
$change = db_fetch_data("SELECT id FROM log_gebruiker WHERE id='" . $log_user_id . "' AND formdata LIKE '%recall_but%'", "log");
if(!empty($change) && $change[0]['id'] == $log_user_id){
$customer_info['change']=TRUE;
}
else{
$customer_info['change']=FALSE;
}
$result[] = $customer_info;
}
}
return $result;
}
/**
* Fetch user log zkl data which match log user database id
*
* Inputs:
* - log_user_id: log user id
*
* Return: Array containing user log zkl information
*/
function db_fetch_user_log_zkl($log_user_id) {
// Initial return value
$result = "";
// Get user log zkl info
$row_log_user = db_fetch_data("SELECT zkl FROM log_gebruiker_zkl WHERE id='" . $log_user_id . "'", "log");
// Parse into result (NB: at most one result)
if (!empty($row_log_user)) {
foreach( $row_log_user as $lance_id ) {
$lance_info = db_fetch_data("SELECT * FROM zkl WHERE id=" . $lance_id['zkl'], "default");
$lance_info = $lance_info[0];
//check if the save button has been pressed
$change = db_fetch_data("SELECT id FROM log_gebruiker WHERE id='" . $log_user_id . "' AND formdata LIKE '%recall_but%'", "log");
if( $change ) {
$lance_info['change']=TRUE;
}
else{
$lance_info['change']=FALSE;
}
}
$result[] = $lance_info;
}
return $result;
}
/**
* Fetch user log data which match user or log user database id
*
* Inputs:
* - log_user: user id
* - log_user_id: log user id
*
* Return: Array containing user log information
*/
function db_fetch_user_log($log_user = NULL, $log_user_id = NULL) {
// Initial return value
$result = "";
// Fetch user log info
$query = "SELECT * FROM `log_gebruiker` ";
if (!is_null($log_user)) {
$query .= "WHERE `gebruiker`='" . $log_user . "' ";
}
else if (!is_null($log_user_id)) {
$query .= "WHERE `id`='" . $log_user_id . "' ";
}
// Order by id
$query .= "ORDER BY id ASC ";
// Execute query
$row_log_user = db_fetch_data($query, "log");
// Parse into result
if (!empty($row_log_user)) {
$result = $row_log_user;
}
return $result;
}
/**
* Delete user log data which match user or log user database id
*
* Inputs:
* - log_user: user id
* - log_user_id: log user id
*
* Return: Array containing user log information
*/
function db_delete_user_log($log_user = NULL, $log_user_id = NULL) {
// Initial return value
$result = 0;
// Start transaction
db_start_transaction("log");
// Delete user log info
$query = "DELETE FROM `log_gebruiker` ";
if (!is_null($log_user)) {
$query .= "WHERE `gebruiker`='" . $log_user . "' ";
}
else if (!is_null($log_user_id)) {
$query .= "WHERE `id`='" . $log_user_id . "' ";
}
// Exectue query
db_store_data($query, "log");
// Commit transaction
if (db_commit_transaction("log")) {
$result = 1;
}
return $result;
}
/**
* Fetch last measurement status
*
* Return: Array containing last measurement status
* Fetch lance log info
*
* Inputs:
* - lance_id: lance database id
* - major: Major id
* - minor: Minor id
*
* Return: Array containing log info
*/
function db_fetch_lance_log_entry($entry_id, $table = "log_zkl")
{
// Initial return value
$result = "";
// Fetch lance info
$log_info = db_fetch_data("SELECT * FROM " . $table . " WHERE id='" . $entry_id . "'", "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch measurement status
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - event On(bit 1)/Off(bit 2)/Power Up(bit 3)?
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing measurement status (major and tijd)
*/
function db_fetch_lance_log_measurement_status($lance_id, $last = 1, $event = 3, $begin = "", $end = "", $log_files = "")
{
// Initial values
$result = "";
$event_set = 0;
// Query
$query = "SELECT log_zkl.* FROM log_zkl use index (log_zkl_logfile_event) WHERE log_zkl.zkl=" . $lance_id . " ";
// Catch also the measure on majors?
if ($event & 0x01) {
$query .= " AND (log_zkl.major=" . MAJ_MEAS_ON;
// Set event flag
$event_set = 1;
}
// Catch also the measure off majors?
if ($event & 0x02) {
if (!$event_set) {
$query .= " AND (";
}
else {
$query .= " OR ";
}
$query .= "log_zkl.major=" . MAJ_MEAS_OFF;
// Set event flag
$event_set = 1;
}
// Catch also the power up majors?
if ($event & 0x04) {
if (!$event_set) {
$query .= " AND (";
}
else {
$query .= " OR ";
}
$query .= "log_zkl.major=" . MAJ_POWER_UP . " AND log_zkl.minor=" . MIN_POWER_UP;
// Set event flag
$event_set = 1;
}
if ($event_set) {
$query .= ") ";
}
// Certain period?
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain logfiles?
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch log files in period
*
* inputs:
* - lance_id Lance database id
* - begin Begin of report period
* - end End of report period
*
* Return: Array containing log files
*/
function db_fetch_lance_log_files($lance_id, $begin = "", $end = "")
{
// Initial return value
$result = "";
// Query
$query = "SELECT log_zkl.rpgmcount,log_zkl.startup,log_zkl.sdcard FROM log_zkl use index(log_zkl_logfile_id_tijd) WHERE log_zkl.zkl=" . $lance_id . "";
// Certain period?
$query .= query_period($begin, $end, "log_zkl", "t", $lance_id);
//// Certain period (log_tijd)
//if ((strlen($begin)) && (strlen($end))) {
// $query .= " OR log_tijd BETWEEN '" . $begin . "' AND '" . $end . "')";
//}
//else if (strlen($begin)) {
// $query .= " OR log_tijd >= '" . $begin . "')";
//}
//else if (strlen($end)) {
// $query .= " OR log_tijd <= '" . $end . "')";
//}
// Group
$query .= " GROUP BY log_zkl.startup, log_zkl.rpgmcount, log_zkl.sdcard";
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
// Detect tmin and tmax (skip error log)
if (is_array($result)) {
for ($i = 0; $i < sizeof($result); $i++) {
$query = "SELECT MIN(log_zkl.t) AS tmin,MAX(log_zkl.t) AS tmax FROM log_zkl USE INDEX(log_zkl_logfile) WHERE log_zkl.zkl=" . $lance_id . "";
$query .= " AND log_zkl.sdcard='" . $result[$i]['sdcard'] . "'";
$query .= " AND log_zkl.rpgmcount='" . $result[$i]['rpgmcount'] . "'";
$query .= " AND log_zkl.startup='" . $result[$i]['startup'] . "'";
// Removed because took too long
//$query .= " AND !(log_zkl.major='10' and log_zkl.minor<'48')";
$log_info = db_fetch_data($query, "log");
if (is_array($log_info)) {
$result[$i]['tmin'] = $log_info[0]['tmin'];
$result[$i]['tmax'] = $log_info[0]['tmax'];
}
}
}
}
return $result;
}
/**
* Fetch last entry log file
*
* inputs:
* - lance_id Lance database id
* - log_file array containing sdcard, rpgmcount, startup
*
* Return: Array containing last log file entry
*/
function db_fetch_lance_log_file_last_entry($lance_id, $log_file = "", $table="log_zkl")
{
// Initial return value
$result = "";
// Query
$query = "SELECT " . $table . ".* FROM " . $table . " WHERE " . $table . ".id=(select max(id) from " . $table . " ";
if (($table == "log_zkl") && (is_array($log_file))) {
// Skip error log (Removed because it took to long)
//$query .= "AND !(major='10' and minor<'48') ";
$query .= "use index (log_zkl_logfile) where zkl=" . $lance_id . " ";
$query .= query_logfiles(array($log_file));
}
else {
$query .= "where zkl=" . $lance_id . " ";
}
$query .= ") ";
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info[0];
}
return $result;
}
/**
* Fetch short circuit status
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing short circuit status
*/
function db_fetch_lance_log_shortcircuit_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT * FROM log_zkl";
$query .= " WHERE zkl=" . $lance_id;
$query .= " AND (major=" . MAJ_SHORTCIR_ALARM;
$query .= " OR major=" . MAJ_SHORTCIR_OK;
$query .= " OR (major=" . MAJ_SHORTCIR_ERROR . " AND minor=" . MIN_SHORCIR_ERROR . ")";
$query .= " )";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch switch3000 status
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing relais status
*/
function db_fetch_lance_log_switch3000_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT * FROM log_zkl";
$query .= " WHERE zkl=" . $lance_id;
$query .= " AND major=" . MAJ_SWITCH3000;
$query .= " AND (minor=" . MIN_SWITCH3000_KEY_OFF;
$query .= " OR minor=" . MIN_SWITCH3000_KEY_ON ;
$query .= " OR minor=" . MIN_SWITCH3000_MTINFO_OFF;
$query .= " OR minor=" . MIN_SWITCH3000_MTINFO_ON;
$query .= " OR minor=" . MIN_SWITCH3000_REBOOT;
$query .= " )";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch keyswitch status
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing relais status
*/
function db_fetch_lance_log_keyswitch_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT * FROM log_zkl";
$query .= " WHERE zkl=" . $lance_id;
$query .= " AND major=" . MAJ_SWITCH3000;
$query .= " AND (minor=" . MIN_SWITCH3000_KEY_ON_OP;
$query .= " OR minor=" . MIN_SWITCH3000_KEY_OP_ON;
$query .= " OR minor=" . MIN_SWITCH3000_KEY_OFF_OP;
$query .= " OR minor=" . MIN_SWITCH3000_KEY_OP_OFF;
$query .= " )";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch relais status
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing relais status
*/
function db_fetch_lance_log_relais_status($lance_id, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT * FROM log_zkl";
$query .= " WHERE zkl=" . $lance_id;
$query .= " AND major=" . MAJ_RELAIS;
$query .= " AND (minor=" . MIN_RELAIS_ON;
$query .= " OR minor=" . MIN_RELAIS_OFF;
$query .= " )";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch battery status
*
* inputs:
* - lance_id Lance database id
* - battery Battery number (or multiple when array)
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
* - batt_status Find requested battery status
*
* Return: Array containing battery status
*/
function db_fetch_lance_log_battery_status($lance_id, $battery = "", $last = 1, $begin = "", $end = "", $log_files = "", $bat_status = "")
{
// Initial return value
$result = "";
if (!$last) {
$query = "SELECT log_zkl.*,log_batterijstatus.* FROM log_zkl,log_batterijstatus WHERE log_zkl.zkl=" . $lance_id . " ";
}
else {
$query = "SELECT max(log_zkl.id) FROM log_zkl,log_batterijstatus WHERE log_zkl.zkl=" . $lance_id . " ";
}
if (is_array($battery)) {
$query .= "AND (";
for ($i=0; $i<sizeof($battery); $i++) {
if ($i) {
$query .= "OR ";
}
$query .= "(log_batterijstatus.batterij='" . $battery[$i] . "') ";
}
$query .= ") ";
}
else if (strlen($battery)) {
$query .= "AND log_batterijstatus.batterij='" . $battery . "' ";
}
// Filter certain battery status
$query .= "AND log_zkl.major='" . MAJ_BATTERY . "' ";
switch($bat_status) {
case "verwijderd":
$query .= " AND log_zkl.minor='" . MIN_BATTERY_REMOVED . "' ";
break;
case "ok":
$query .= " AND log_zkl.minor='" . MIN_BATTERY_OK . "' ";
break;
case "alarm":
$query .= " AND log_zkl.minor='" . MIN_BATTERY_ALARM . "' ";
break;
case "leeg":
$query .= " AND log_zkl.minor='" . MIN_BATTERY_EMPTY . "' ";
break;
default:
$query .= " AND (log_zkl.minor='" . MIN_BATTERY_OK . "' OR log_zkl.minor='" . MIN_BATTERY_ALARM . "' OR log_zkl.minor='" . MIN_BATTERY_EMPTY . "' OR log_zkl.minor='" . MIN_BATTERY_REMOVED . "') ";
break;
}
$query .= " AND log_zkl.id=log_batterijstatus.id ";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Last?
if ($last) {
$id_array = db_fetch_data($query, "log");
if ((is_array($id_array)) && (!is_null($id_array[0]['max(log_zkl.id)']))) {
// Fetch battery
$log_info = db_fetch_data("SELECT log_zkl.*,log_batterijstatus.* FROM log_zkl,log_batterijstatus where log_zkl.id=" . $id_array[0]['max(log_zkl.id)'] . " and log_zkl.id=log_batterijstatus.id", "log");
}
else {
// Empty result
$log_info = array();
}
}
else {
// Get last battery
$query .= " ORDER BY log_zkl.id ASC";
// Fetch last battery status for this lance
$log_info = db_fetch_data($query, "log");
}
// Parse into result
if (!empty($log_info)) {
$result = $log_info;
}
return $result;
}
/**
* Fetch battery info
*
* inputs:
* - lance_id Lance database id
* - battery Battery number
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing battery info
*/
function db_fetch_lance_log_battery_info($lance_id, $battery, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT log_zkl.id,log_zkl.t,log_batterij.niveau FROM log_zkl,log_batterij WHERE log_zkl.zkl=" . $lance_id . " AND log_batterij.batterij='" . $battery . "' ";
$query .= "AND log_zkl.major='" . MAJ_BATTERY . "' AND log_zkl.minor='" . MIN_BATTERY_LOG . "' AND log_zkl.id=log_batterij.id ";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id ";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch last battery status for this lance
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
$result = $log_info;
}
return $result;
}
/**
* Fetch calibration info
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
*
* Return: Array containing calibration info
*/
function db_fetch_lance_log_calibration_info($lance_id, $last = 1)
{
// Initial return value
$result = "";
$query = "SELECT log_calibratie.id,log_calibratie.freq,log_calibratie.b_a FROM log_zkl,log_calibratie WHERE log_zkl.zkl=" . $lance_id . " AND log_zkl.major='" . MAJ_CALIBRATION . "' ";
$query .= "AND log_zkl.minor='" . MIN_CALIBRATION . "' and log_zkl.id=log_calibratie.id and log_calibratie.b_a!=0 and log_calibratie.freq!=0 ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch last battery status for this lance
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
$result = $log_info;
}
return $result;
}
/**
* Fetch GPS info
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - fetch Fetch all data
* - log_files array containing rpgmcount, sdcard, startup
* - log_realtime Use log_realtime in stead of log_zkl
* - offset Start id?
*
* Return: Array containing GPS info
*/
function db_fetch_lance_log_gps_info($lance_id, $last = 1, $begin = "", $end = "", $fetch = 1, $log_files = "", $log_realtime = FALSE, $offset = null)
{
// Initial return value
$result = "";
if (($last) || ($log_realtime)) {
if ($last) {
$query = "SELECT log_realtime.* FROM log_realtime WHERE log_realtime.id=(select max(id) from log_realtime where zkl=" . $lance_id . " AND gps_fix='1' ";
}
else {
$query = "SELECT log_realtime.* FROM log_realtime WHERE log_realtime.zkl=" . $lance_id . " AND log_realtime.gps_fix='1'";
}
// Certain period (never needed the old check because log_realtime is sequential)
$query .= query_period($begin, $end, "log_realtime", "t" , $lance_id, $offset, FALSE);
if ($last) {
$query .= ") ";
}
}
else {
$query = "SELECT log_zkl.*,log_gps.* FROM log_zkl,log_gps WHERE log_zkl.zkl=" . $lance_id . " ";
$query .= "AND log_zkl.major='" . MAJ_GPS . "' AND log_zkl.minor='" . MIN_GPS . "' AND log_gps.longitude!=0 AND log_gps.latitude!=0 AND ";
$query .= "log_zkl.id=log_gps.id";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", $lance_id, $offset, !$last);
// Certain log files
$query .= query_logfiles($log_files);
}
// Order
if (!$last) {
if (!$log_realtime) {
$query .= " ORDER BY log_zkl.id ASC";
}
else {
$query .= " ORDER BY log_realtime.id ASC";
}
}
$log_info = db_fetch_data($query, "log", FALSE, $fetch);
// Parse result
if (!empty($log_info)) {
$result = $log_info;
}
return $result;
}
/**
* Fetch last GPS entry between
*
* inputs:
* - lance_id Lance database id
* - entry_id_begin Database entry start id
* - entry_id_end Database entry id
* - begin Begin time
* - end End time
*
* Return: Array containing database entry
*/
function db_fetch_lance_gps_entry_between($lance_id, $entry_id_begin, $entry_id_end, $begin = "", $end = "")
{
// Initial return value
$result = "";
$query = "SELECT log_gps.*,log_zkl.t,log_zkl.t_log from log_zkl,log_gps where log_zkl.zkl=" . $lance_id . " AND (log_zkl.major='" . MAJ_GPS . "' AND log_zkl.minor='" . MIN_GPS . "') AND ";
$query .= "log_zkl.id=log_gps.id AND log_gps.longitude!=0 AND log_gps.latitude!=0 ";
// Certain entry ids
if ((strlen($entry_id_begin)) && (strlen($entry_id_end))) {
$query .= " AND log_zkl.id BETWEEN '" . $entry_id_begin . "' AND '" . $entry_id_end . "'";
}
else if (strlen($entry_id_begin)) {
$query .= " AND log_zkl.id >= '" . $entry_id_begin . "'";
}
else if (strlen($entry_id_end)) {
$query .= " AND log_zkl.id <= '" . $entry_id_end . "'";
}
// Certain period
$query .= query_period($begin, $end);
// Order by temp (not by id, because old data can be sync later)
$query .= " ORDER BY log_zkl.t DESC LIMIT 1";
$log_info = db_fetch_data($query, "log");
// Parse result
if (!empty($log_info)) {
$result = $log_info[0];
}
return $result;
}
/**
* Fetch last power up entry before
*
* inputs:
* - lance_id Lance database id
* - entry_id Database entry
*
* Return: Array containing database entry
*/
function db_fetch_lance_power_up_entry_before($lance_id, $entry_id)
{
// Initial return value
$result = "";
$query = "SELECT id FROM log_zkl";
$query .= " WHERE zkl=" . $lance_id;
$query .= " AND major=" . MAJ_POWER_UP;
$query .= " AND minor=" . MIN_POWER_UP;
$query .= " AND id < " . $entry_id;
$query .= " ORDER BY id DESC LIMIT 1";
// Fetch last id before entry
$log_info = db_fetch_data($query, "log");
// Find id
if (!empty($log_info)) {
// Find entry
$query = "SELECT * from log_zkl where id='" . $log_info[0]['id'] . "'";
// Fetch id info
$log_info = db_fetch_data($query, "log");
if (!empty($log_info)) {
$result = $log_info[0];
}
}
return $result;
}
/**
* Fetch SMS messages
*
* inputs:
* - lance_id Lance database id
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing battery status
*/
function db_fetch_lance_log_sms($lance_id, $last = 1, $begin = "", $end = "", $log_files)
{
// Initial return value
$result = "";
$query = "SELECT log_zkl.*,log_sms.* FROM log_zkl,log_sms WHERE log_zkl.zkl=" . $lance_id . " ";
$query .= "AND log_zkl.major='" . MAJ_SMS . "' AND (log_zkl.minor='" . MIN_SMS_SENT . "' OR log_zkl.minor='" . MIN_SMS_RECV . "') ";
$query .= "AND log_zkl.id=log_sms.id";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain logfiles?
$query .= query_logfiles($log_files);
// Order
if ($last) {
$query .= " ORDER BY log_zkl.id DESC LIMIT 1";
}
else {
$query .= " ORDER BY log_zkl.id ASC";
}
// Fetch sms log
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
$result = $log_info;
}
return $result;
}
/**
* Fetch Detection alarm SMS
*
* inputs:
* - lance_id Lance database id
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing battery status
*/
function db_fetch_lance_det_alarm_sms($lance_id, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT log_zkl.* FROM log_zkl,log_peripheral WHERE ";
if (strlen($lance_id)) {
$query .= "log_zkl.zkl=" . $lance_id . " AND ";
}
$query .= "peripheral='sms' and code='4' ";
$query .= "AND log_zkl.id=log_peripheral.id ";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain logfiles?
$query .= query_logfiles($log_files);
// Order
if ($last) {
$query .= " ORDER BY log_zkl.id DESC LIMIT 1";
}
else {
$query .= " ORDER BY log_zkl.id ASC";
}
// Fetch sms log
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
$result = $log_info;
}
return $result;
}
/**
* Fetch last entry before
*
* inputs:
* - lance_id Lance database id
* - entry_id Database entry
*
* Return: Array containing database entry
*/
function db_fetch_lance_entry_before($lance_id, $entry_id)
{
// Initial return value
$result = "";
$query = "SELECT log_zkl.* FROM log_zkl WHERE log_zkl.zkl=" . $lance_id . " AND log_zkl.id < " . $entry_id . " ORDER BY log_zkl.id DESC LIMIT 1";
// Fetch last id before entry
$log_info = db_fetch_data($query, "log");
if (!empty($log_info)) {
$result = $log_info[0];
}
return $result;
}
/**
* Fetch temperature onboard
*
* inputs:
* - lance_id Lance database id
* - temp Temperature selection onboard(0)/ext1(1)
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing relais status
*/
function db_fetch_lance_log_temp($lance_id, $temp = 0, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT log_zkl.*,log_temp.sensor,log_temp.temp from log_zkl,log_temp where log_zkl.zkl=" . $lance_id . " AND log_zkl.id=log_temp.id AND (log_zkl.major='" . MAJ_TEMP . "' AND log_zkl.minor='";
// Temp selection
if ($temp == 0 ) {
$query .= MIN_TEMP_ONBOARD;
}
else {
$query .= MIN_TEMP_EXT1;
}
$query .= "') ";
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
// Order
$query .= " ORDER BY log_zkl.id";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch data
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Parse result
$result = $log_info;
}
return $result;
}
/**
* Fetch last switch state
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - log_files array containing rpgmcount, sdcard, startup
*
* Return: Array containing database entry
*/
function db_fetch_lance_switch3000_state($lance_id, $last = 1, $begin = "", $end = "", $log_files = "")
{
// Initial return value
$result = "";
$query = "SELECT id from log_zkl where zkl=" . $lance_id . " AND log_zkl.major=" . MAJ_SWITCH . " AND log_zkl.minor=" . MIN_SWITCH_STATE;
// Certain period
$query .= query_period($begin, $end, "log_zkl", "t", null, null, !$last);
// Certain log files
$query .= query_logfiles($log_files);
$query .= " order by log_zkl.id ";
// Last?
if ($last) {
$query .= " DESC LIMIT 1";
}
else {
$query .= " ASC";
}
// Fetch last switch 3000 state
$log_info = db_fetch_data($query, "log");
if (!empty($log_info)) {
foreach($log_info as $entry) {
$log_entry = db_fetch_data("SELECT log_switch3000.*,log_zkl.* FROM log_zkl,log_switch3000 where log_zkl.id='" . $entry['id'] . "' and log_zkl.id=log_switch3000.id", "log");
if (!empty($log_entry)) {
if ($last) {
$result = $log_entry[0];
}
else {
if (!is_array($result)) {
$result = array();
}
array_push($result, $log_entry[0]);
}
}
}
}
return $result;
}
/**
* Fetch switch 3000 switching statistics
*
* inputs:
* - lance_id Lance database id
*
* Return: Array containing in/out statistics
*/
function db_fetch_lance_switch3000_switch_stats($lance_id = NULL)
{
// Initial return value
$result = "";
$query = "SELECT major,minor,COUNT(minor) AS actions,MIN(t_log) AS t_min,MAX(t_log) AS t_max FROM log_zkl";
$query .= " WHERE major=" . MAJ_PERIPHERALS;
$query .= " AND (minor=" . MIN_SWITCH3000_OFF . " OR minor=" . MIN_SWITCH3000_ON . ")";
if (!is_null($lance_id)) {
$query .= " AND zkl=" . $lance_id . " ";
}
$query .= " GROUP BY minor";
// Excecute query
return db_fetch_data($query, "log");
}
/**
* Fetch log realtime
*
* inputs:
* - lance_id Lance database id
* - last Retrieve last entry
* - begin Begin of report period
* - end End of report period
* - parse_data Parse data (interpreter_status)
* - limit limit entries
* Return: Array containing log realtime info
*/
function db_fetch_lance_logrt($lance_id, $last = 1, $begin = "", $end = "", $parse_data = FALSE, $limit = NULL)
{
// Initial return value
$result = "";
// Optimize query (use key zkl, id, t)
if ($last) {
$query = "SELECT log_realtime.* FROM log_realtime WHERE log_realtime.zkl=" . $lance_id . " ";
}
else {
$query = "SELECT log_realtime.id as id FROM log_realtime WHERE log_realtime.zkl=" . $lance_id . " ";
}
// Last?
if ($last) {
$query .= " AND log_realtime.id=(SELECT max(id) FROM log_realtime where zkl=" . $lance_id . " ";
}
// Certain period (never needed the old check because log_realtime is sequential)
$query .= query_period($begin, $end, "log_realtime", "t", $lance_id, null, FALSE);
if ($last) {
$query .= ") ";
}
// Order by id (extra option needed because of shuffle in reports)
$query .= " ORDER BY id ";
// limit?
if ((!is_null($limit)) && (!$last)) {
$query .= " LIMIT " . $limit;
}
// Fetch log realtime
$log_info = db_fetch_data($query, "log");
// Parse into result
if (!empty($log_info)) {
// Optimize query (use key zkl, id, t)
if (!$last) {
$temp = $log_info;
$log_info = array();
// Get rest of table
foreach($temp as $item) {
$temp_data = db_fetch_data("SELECT * FROM log_realtime WHERE id='" . $item['id'] . "'", "log");
if (is_array($temp_data)) {
array_push($log_info, $temp_data[0]);
}
}
}
if ($parse_data) {
if (is_array($log_info)) {
// Initial value
$result = array();
foreach($log_info as $entry) {
// Create string and interpreter_status;
$entry['interpreter_status'] = interpret_log_rt($entry);
array_push($result, $entry);
}
}
}
else {
$result = $log_info;
}
}
return $result;
}
/**
* Check log file (corrupt or not?)
*
* inputs:
* - lance_id Lance database id
* - sdcard logfile params
* - rpgmcount logfile params
* - startup logfile params
*
* Return: True (Corrupted)/False (not corrupted)
*/
function db_check_lance_log_corrupted($lance_id, $sdcard, $rpgmcount, $startup)
{
// Initial return zalue
$result = FALSE;
// Fetch data
$log_info = db_fetch_data("SELECT id FROM log_zkl WHERE zkl=" . $lance_id . " AND (sdcard='" . $sdcard ."' AND rpgmcount='" . $rpgmcount . "' AND startup='" . $startup . "') AND (MAJOR=10 AND MINOR=33)", "log");
// Parse into result
if (!empty($log_info)) {
foreach($log_info as $item) {
if (!$result) {
$log_peripheral = db_fetch_data("SELECT code FROM log_peripheral WHERE id='". $item['id'] . "'", "log");
if (!empty($log_peripheral)) {
$result = ($log_peripheral[0]['code'] == 82) ? TRUE : $result;
}
}
}
}
return $result;
}
/**
* Archive old entries
*
* inputs:
* - table which table?
* - source_db, target_db source and destination databases
* - remove_before age of the entries to be removed; timestamp
* - entries number of entries which must be removed
* - last_date receives the last date deleted
* - delete_from_source delete the entries moved to the target database from the source database
* (optional; default behaviour is "yes")
*
* Return: amount of removed entries
*/
function db_log_archive($table, $source_db, $target_db, $remove_before, $entries, &$last_date, $delete_from_source = TRUE) {
global $_PAGE_INFO;
// Initial values
$remove_entries = array();
$set = array();
$last_date = 0;
$now = time();
// Global logtables
include("db_logtables.php");
// Setup connection with source and destination database
db_connect($source_db, "source");
db_connect($target_db, "target");
if( $delete_from_source ) switch($table) {
case "log_tcp":
// Get records from select table (bottom up)
$log_entries = db_fetch_data("SELECT * FROM " . $table . " ORDER BY t ASC LIMIT " . $entries, "source");
break;
default:
// Get records from select table (bottom up)
$log_entries = db_fetch_data("SELECT * FROM " . $table . " ORDER BY id ASC LIMIT " . $entries, "source");
break;
}
else {
// source is preserved; get the last entry
switch($table) {
case "log_tcp":
// Get records from select table (bottom up)
$last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source");
if( !$last_id ) $last_id = 0;
else $last_id = $last_id[0]['id'];
$log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE t > " . $last_id . " ORDER BY t ASC LIMIT " . $entries, "source");
break;
default:
// Get records from select table (bottom up)
$last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source");
if( !$last_id ) $last_id = 0;
else $last_id = $last_id[0]['id'];
$log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE id > " . $last_id . " ORDER BY id ASC LIMIT " . $entries, "source");
break;
}
}
// Get table description
$source_entries = db_fetch_fields($table, "", "source");
$target_entries = db_fetch_fields($table, "", "target");
$set[$table] = array_intersect($source_entries, $target_entries);
// Determine time field
$time_field = 'tijd';
foreach($set[$table] as $field) {
if( $field == 't_log' ) $time_field = 't_log';
else if( $field == 't' ) $time_field = 't';
}
// Archive entries
if ((is_array($log_entries)) && (is_array($set[$table]))) {
$last_entry = null;
foreach($log_entries as $log_entry) {
// Time conversion needed?
if (isset($log_entry[$time_field ])) {
switch($time_field) {
case 'tijd':
// Convert 'tijd' to seconds since 1970
$log_entry_time = convert_datetime($log_entry[$time_field ]);
break;
default:
// Do nothing, already ok!
$log_entry_time = $log_entry[$time_field ];
break;
}
}
// Check date (older then 'ARCHIVE_OLDER_DAYS' days, or in the future)
if ((isset($log_entry[$time_field ]) && (($log_entry_time < $remove_before) || ($log_entry_time > $now))) ||
((isset($log_entry['t_log']) && (($log_entry['t_log'] < $remove_before) || ($log_entry['t_log'] > $now))))) {
// Save last entry for statistics
$last_entry = $log_entry;
if( !$delete_from_source ) {
// source is preserved; get the last entry
switch($table) {
case "log_tcp":
if( $log_entry['t'] > $last_id ) $last_id = $log_entry['t'];
break;
default:
// Get records from select table (bottom up)
if( $log_entry['id'] > $last_id ) $last_id = $log_entry['id'];
break;
}
}
// Store entry in the archive
$query = "INSERT INTO " . $table . " (";
$sep = "";
foreach($set[$table] as $field) {
$query .= $sep;
$query .= "`" . $field . "`";
$sep = ",";
}
$query .= ") VALUES(";
$sep = "";
foreach($set[$table] as $field) {
$query .= $sep;
if (is_null($log_entry[$field])) {
$query .= "NULL";
}
else {
$query .= "'" . addslashes($log_entry[$field]) . "'";
}
$sep = ",";
}
$query .= ")";
db_store_data($query, "target");
// Save this entry for removal from the source
array_push($remove_entries, array(table => $table, value => $log_entry));
}
}
if( $last_entry ) {
// Determine timestamp of the last entry
if( $time_field == 't' ) {
$last_date = $last_entry[$time_field];
}
else {
$last_date = convert_datetime($last_entry[$time_field]);
}
}
}
if( !$delete_from_source ) {
// source is preserved; Store the last entry
db_store_data("REPLACE INTO state_archiver (`table`,`id`) VALUES ('" . $table . "'," . $last_id . ")", "source");
}
// Remove subsidiary tables?
if (!empty($remove_entries)) {
// Initial values
$log_entries = array();
// Determine end of array => So now we can push new entries in the original array
$end_entry = sizeof($remove_entries);
// Collect sub table info
for($i=0; $i<$end_entry; $i++) {
switch($table) {
case "log_zkl":
// has the major/minor combination any consistent sub table
if (isset($_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table'])) {
// Get sub table
$subtable = $_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table'];
// Get sub table entry
$log_entry = db_fetch_data("SELECT * FROM " . $subtable . " WHERE id=" . $remove_entries[$i]['value']['id'], "source");
// Data valid?
if (is_array($log_entry)) {
// Store entry
array_push($log_entries, array('table' => $subtable, 'value' => $log_entry[0]));
}
}
break;
case "log_gebruiker":
case "log_secure":
foreach($_LOGTABLES[$table] as $item) {
// Extra check
if (substr($item['table'], 0, 4) === "log_") {
// Get sub table entry
$log_entry = db_fetch_data("SELECT * FROM " . $item['table'] . " WHERE id=" . $remove_entries[$i]['value']['id'], "source");
// Data valid?
if (is_array($log_entry)) {
// Store entry
array_push($log_entries, array(table => $item['table'], value => $log_entry[0]));
}
}
}
break;
default:
break;
}
}
// Archive entries
foreach($log_entries as $log_entry) {
// Get subtable description
if ((is_array($set)) && (!isset($set[$log_entry['table']]))) {
$source_entries = db_fetch_fields($log_entry['table'], "", "source");
$target_entries = db_fetch_fields($log_entry['table'], "", "target");
$set[$log_entry['table']] = array_intersect($source_entries, $target_entries);
// DEBUG START
$source_fields = implode(",", $source_entries);
$target_fields = implode(",", $target_entries);
if( $source_fields != $target_fields ) DBG("log_archive: fields changed from \"" . $source_fields . "\" to \"" . implode(",", $set[$log_entry['table']]) . "\"");
// DEBUG END
}
// Archive entry
$query = "INSERT INTO " . $log_entry['table'] . " (";
$sep = "";
foreach( $set[$log_entry['table']] as $field ) {
$query .= $sep . "`" . $field . "`";
$sep = ",";
}
$sep = ") VALUES(";
foreach( $set[$log_entry['table']] as $field ) {
if (is_null($log_entry['value'][$field])) {
$query .= $sep . "NULL";
}
else {
$query .= $sep . "'" . addslashes($log_entry['value'][$field]) . "'";
}
$sep = ",";
}
$query .= ")";
db_store_data($query, "target");
// Remove entry
array_push($remove_entries, array(table => $log_entry['table'], value => $log_entry['value']));
}
}
// Remove archived entries; clean-up of the subsidiary tables is left for the garbage collector
if (!empty($remove_entries) && $delete_from_source) {
foreach($remove_entries as $remove_entry) {
switch($remove_entry['table']) {
case "log_tcp":
db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE zkl=" . $remove_entry['value']['zkl'] . " AND t=" . $remove_entry['value']['t'], "source");
break;
default:
db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE id=" . $remove_entry['value']['id'], "source");
break;
}
}
}
// Clean-up
db_connect(null, "source");
db_connect(null, "target");
// Return number of records moved
return (empty($remove_entries) ? 0 : count($remove_entries));
}
/**
* Delete old entries
*
* inputs:
* - table which table?
* - db database
* - remove_before age of the entries to be removed; timestamp
* - entries number of entries which must be removed
* - last_date receives the last date deleted
*
* Return: amount of removed entries
*/
function db_delete_archive($table, $db, $remove_before, $entries, &$last_date) {
global $_PAGE_INFO;
// Initial values
$remove_entries = array();
$last_date = 0;
$now = time();
// Global logtables
include("db_logtables.php");
// Setup connection database
db_connect($db, "source");
switch($table) {
case "log_tcp":
// Get records from select table (bottom up)
$last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source");
if( !$last_id ) $last_id = 0;
else $last_id = $last_id[0]['id'];
$log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE t < " . $last_id . " ORDER BY t ASC LIMIT " . $entries, "source");
break;
default:
// Get records from select table (bottom up)
$last_id = db_fetch_data("SELECT id FROM state_archiver WHERE `table`='" . $table . "'", "source");
if( !$last_id ) $last_id = 0;
else $last_id = $last_id[0]['id'];
$log_entries = db_fetch_data("SELECT * FROM " . $table . " WHERE id < " . $last_id . " ORDER BY id ASC LIMIT " . $entries, "source");
break;
}
// Get table description
$set[$table] = db_fetch_fields($table, "", "source");
// Determine time field
$time_field = 'tijd';
foreach($set[$table] as $field) {
if( $field == 't_log' ) $time_field = 't_log';
else if( $field == 't' ) $time_field = 't';
}
// Archive entries
if (is_array($log_entries)) {
$last_entry = null;
foreach($log_entries as $log_entry) {
// Time conversion needed?
if (isset($log_entry[$time_field ])) {
switch($time_field) {
case 'tijd':
// Convert 'tijd' to seconds since 1970
$log_entry_time = convert_datetime($log_entry[$time_field ]);
break;
default:
// Do nothing, already ok!
$log_entry_time = $log_entry[$time_field ];
break;
}
}
// Check date
if ($log_entry_time < $remove_before) {
// Save last entry for statistics
$last_entry = $log_entry;
// Save this entry for removal from the source
array_push($remove_entries, array(table => $table, value => $log_entry));
}
}
if( $last_entry ) {
// Determine timestamp of the last entry
if( $time_field == 't' ) {
$last_date = $last_entry[$time_field];
}
else {
$last_date = convert_datetime($last_entry[$time_field]);
}
}
}
// Remove subsidiary tables?
if (!empty($remove_entries)) {
// Initial values
$log_entries = array();
// Determine end of array => So now we can push new entries in the original array
$end_entry = sizeof($remove_entries);
// Collect sub table info
for($i=0; $i<$end_entry; $i++) {
switch($table) {
case "log_zkl":
// has the major/minor combination any consistent sub table
if (isset($_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table'])) {
// Get sub table
$subtable = $_LOGTABLES[$table][$remove_entries[$i]['value']['major']][$remove_entries[$i]['value']['minor']]['table'];
// Get sub table entry
$log_entry = db_fetch_data("SELECT * FROM " . $subtable . " WHERE id=" . $remove_entries[$i]['value']['id'], "source");
// Data valid?
if (is_array($log_entry)) {
// Store entry
array_push($log_entries, array('table' => $subtable, 'value' => $log_entry[0]));
}
}
break;
case "log_gebruiker":
case "log_secure":
foreach($_LOGTABLES[$table] as $item) {
// Extra check
if (substr($item['table'], 0, 4) === "log_") {
// Get sub table entry
$log_entry = db_fetch_data("SELECT * FROM " . $item['table'] . " WHERE id=" . $remove_entries[$i]['value']['id'], "source");
// Data valid?
if (is_array($log_entry)) {
// Store entry
array_push($log_entries, array(table => $item['table'], value => $log_entry[0]));
}
}
}
break;
default:
break;
}
}
// Add entries to the remove entries
foreach($log_entries as $log_entry) {
// Remove entry
array_push($remove_entries, array(table => $log_entry['table'], value => $log_entry['value']));
}
}
// Remove entries
if (!empty($remove_entries)) {
foreach($remove_entries as $remove_entry) {
switch($remove_entry['table']) {
case "log_tcp":
db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE zkl=" . $remove_entry['value']['zkl'] . " AND t=" . $remove_entry['value']['t'], "source");
break;
default:
db_store_data("DELETE FROM " . $remove_entry['table'] . " WHERE id=" . $remove_entry['value']['id'], "source");
break;
}
}
}
// Clean-up
db_connect(null, "source");
// Return number of records moved
return (empty($remove_entries) ? 0 : count($remove_entries));
}
/**
* Get specific log period (query clean up function)
*
* inputs:
* - begin begin of period
* - end end of period
* - table time of which table?
* - time_used Which time is used? t/t_log
* - lance_id Optional
* - old Check for old files (min/max id => older log files which are logged between)
*
* Return: period query
*/
function query_period($begin, $end, $table = "log_zkl", $time_used = "t", $lance_id = null, $offset = null, $old = TRUE)
{
$result = "";
// Certain period (tijd)
if ((strlen($begin)) && (strlen($end))) {
if (is_null($lance_id)) {
$result = " AND (" . $table . "." . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime($end) . "' ";
if (!is_null($offset)) {
$result .= " and " . $table . ".id >= '" . $offset . "' ";
}
$result .= ") ";
}
else {
//
// Determine min/max id
//
$query = "select min(id) as min_id, max(id) as max_id from " . $table;
// Add index to speed up
switch($table) {
case "log_realtime":
$query .= " USE INDEX(log_realtime_id_tijd) ";
break;
case "log_zkl":
$query .= " USE INDEX(log_zkl_tijd) ";
break;
default:
break;
}
$query .= " where zkl=" . $lance_id . " and " . $time_used . " between '" . convert_datetime($begin) . "' and '" . convert_datetime($end) . "' ";
if (!is_null($offset)) {
$query .= " and " . $table . ".id >= '" . $offset . "'";
}
$min_max = db_fetch_data($query, "log");
$result = " AND " . $table . ".id between '" . $min_max[0]['min_id'] . "' and '" . $min_max[0]['max_id'] . "' ";
if ($old) {
// Check for "old" log files
$result .= " AND " . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime($end) . "' ";
}
}
}
else if (strlen($begin)) {
if (is_null($lance_id)) {
$result = " AND (" . $table . "." . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime(date('Y-m-d H:i:s')) . "' ";
if (!is_null($offset)) {
$result .= " and " . $table . ".id >= '" . $offset . "' ";
}
$result .= ") ";
}
else {
//
// Determine min/max id
//
$query = "select min(id) as min_id, max(id) as max_id from " . $table;
// Add index to speed up
switch($table) {
case "log_realtime":
$query .= " USE INDEX(log_realtime_id_tijd) ";
break;
case "log_zkl":
$query .= " USE INDEX(log_zkl_tijd) ";
break;
default:
break;
}
$query .= " where zkl=" . $lance_id . " and " . $time_used . " between '" . convert_datetime($begin) . "' and '" . convert_datetime(date('Y-m-d H:i:s')) . "' ";
if (!is_null($offset)) {
$query .= " and " . $table . ".id >= '" . $offset . "'";
}
$min_max = db_fetch_data($query, "log");
$result = " AND " . $table . ".id between '" . $min_max[0]['min_id'] . "' and '" . $min_max[0]['max_id'] . "' ";
if ($old) {
// Check for "old" log files
$result .= " AND " . $time_used . " BETWEEN '" . convert_datetime($begin) . "' AND '" . convert_datetime(date('Y-m-d H:i:s')) . "' ";
}
}
}
else if (strlen($end)) {
if (is_null($lance_id)) {
$result = " AND " . $table . "." . $time_used . " <= '" . convert_datetime($end) . "'";
if (!is_null($offset)) {
$result .= " and " . $table . ".id >= '" . $offset . "' ";
}
}
else {
//
// Determine max id
//
$query = "select max(id) as id from " . $table;
// Add index to speed up
switch($table) {
case "log_realtime":
$query .= " USE INDEX(log_realtime_id_tijd) ";
break;
case "log_zkl":
$query .= " USE INDEX(log_zkl_tijd) ";
break;
default:
break;
}
$query .= " where zkl=" . $lance_id . " and " . $time_used . " <= '" . convert_datetime($end) . "' ";
if (!is_null($offset)) {
$query .= " and " . $table . ".id >= '" . $offset . "'";
}
$max = db_fetch_data($query, "log");
$result = " AND " . $table . ".id <= '" . $max[0]['id'] . "' ";
if ($old) {
// Check for "old" log files
$result .= " AND " . $time_used . " <= '" . convert_datetime($end) . "' ";
}
}
}
return $result;
}
/**
* Get specific logfiles (query clean up function)
*
* inputs:
* - log_files array (or string) containing
*
* Return: logfiles query
*/
function query_logfiles($log_files)
{
$result = "";
// Certain log files
if ((is_array($log_files)) && (!empty($log_files))) {
$result .= " AND (";
for($i =0 ; $i < sizeof($log_files); $i++) {
if ($i) {
$result .= " OR";
}
$result .= " (log_zkl.sdcard='" . $log_files[$i]['sdcard'] . "' AND log_zkl.startup='" . $log_files[$i]['startup'] . "' AND log_zkl.rpgmcount='" . $log_files[$i]['rpgmcount'] . "')";
}
$result .= ")";
}
return $result;
}
/**
* Build status string from a log_realtime entry
*
* inputs:
* - log_rt array containing log_realtime entry
*
* Return: status string
*/
function build_log_rt($entry) {
if (is_array($entry)) {
// Create string and interpreter_status;
return sprintf("%04X/%04X/%04X,%04X,%04X,%08X,%.3f,%u,%u,%.3f,%d,%.3f,%.3f,%.1f,%.1f,%d,%d,%.7f,%.7f,%.1f,%.1f,%.1f,%.1f,%lu@%u.%lu",
$entry['mcu_state'],
$entry['rc_state'],
$entry['sw3000_state'],
$entry['mcu_local_state'],
$entry['mcu_persistent'],
$entry['wcpu_state'],
$entry['b_a_autocal'],
$entry['freq'],
$entry['rms'],
$entry['b_a'],
$entry['batt_sel'],
$entry['batt1_niveau'],
$entry['batt2_niveau'],
$entry['temp_onboard'],
$entry['temp_ntc'],
$entry['gsm_rssi'],
$entry['gsm_berr'],
$entry['latitude'],
$entry['longitude'],
$entry['altitude'],
$entry['hdop'],
$entry['speed'],
$entry['heading'],
$entry['t_gps'],
$entry['seqnr'],
$entry['t']
);
}
else return FALSE;
}
/**
* Interprete log_realtime entry
*
* inputs:
* - log_rt array containing log_realtime entry
*
* Return: interpreted array
*/
function interpret_log_rt($entry) {
$result = "";
if (is_array($entry)) {
// Create string and interpreter_status;
$result = zkl_interpret_status(build_log_rt($entry));
}
return $result;
}
/**
* Store entry in "log_realtime"
*
* Inputs:
* - dbid device identifier in the database
* - log_rt array with data for "log_realtime"; the key is the field name
* Returns: (nothing)
*/
function db_store_log_rt($dbid, $log_rt)
{
// fields and values
$fields = array();
$values = array();
foreach( $log_rt as $field => $value ) {
$fields[] = $field;
$values[] = "'" . $value . "'";
}
$query = "INSERT INTO log_realtime (zkl," . implode(",", $fields) . ") VALUES (" . $dbid . "," . implode(",", $values) . ")";
return db_store_data($query, "log");
}
/**
* Store entry in "log_zkl"
*
* Inputs:
* - dbid device identifier in the database
* - logfile array with rpgmcount and startup
* - t time
* - major,minor log identifiers
* - data array with data for subtable; the key is the field name
* Returns: (nothing)
*/
function db_store_log_zkl($dbid, $logfile, $t, $major, $minor, $data)
{
switch( $major ) {
case MAJ_TEMP:
case MIN_TEMP_ONBOARD:
$table = "log_temp";
$fields = array("sensor","temp");
$values = array("'on-board'", is_array($data) ? $data[0] : $data);
break;
case MIN_TEMP_EXT1:
$table = "log_temp";
$fields = array("sensor","temp");
$values = array("'ntc'", is_array($data) ? $data[0] : $data);
break;
default:
return FALSE;
}
$query = "INSERT INTO log_zkl (zkl,sdcard,rpgmcount,startup,t,t_log,major,minor) ";
$query .= "VALUES (";
$query .= $dbid . ",";
$query .= "0," . implode(",", $logfile) . ",";
$query .= $t . ",";
$query .= "NOW(),";
$query .= $major . "," . $minor . ")";
if( db_store_data($query, "log") && ($log_id = db_fetch_last_id("log")) ) {
$query = "INSERT INTO " . $table . " (id," . implode(",", $fields) . ") VALUES (" . $log_id . "," . implode(",", $values) . ")";
db_store_data($query, "log");
// admin
$query = "REPLACE INTO zkl_logfile (zkl,sdcard,rpgmcount,startup,timebase,status,file_status) VALUES (";
$query .= $dbid . ",";
$query .= "0," . implode(",", $logfile) . ",";
$query .= $t . ",";
$query .= "'current','present')";
return db_store_data($query, "log");
}
else return FALSE;
}
?>