937 lines
28 KiB
PHP
937 lines
28 KiB
PHP
<?php
|
|
/** \file include\db_system.php
|
|
* \brief DI webinterface database 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 system database functions. This file is always included.
|
|
*/
|
|
|
|
/**
|
|
* Fetch system languages, order by user preference
|
|
*
|
|
* Inputs:
|
|
* - translate Not used.
|
|
* - include Array with which languages to include, or 'TRUE' for all.
|
|
* A value of 'FALSE' is legal but silly.
|
|
*
|
|
* Returns: Array containing system languages
|
|
*/
|
|
function db_fetch_system_lang($translate = FALSE, $include = TRUE) {
|
|
$result = array();
|
|
|
|
// Fetch system maintenance messages
|
|
$languages = db_fetch_data("SELECT * FROM talen ORDER BY i18n");
|
|
|
|
// Sort the languages according to the user's preference; the order of
|
|
// the other languages is undetermined (quite possibly the database order)
|
|
if( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ) {
|
|
$user_languages = preg_split("/,\s*/", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
|
|
|
// sort by preference
|
|
foreach( $user_languages as $lang_pref ) {
|
|
// split language code and qualifier
|
|
$lang_pref = preg_split("/;\s*q\s*=\s*/", $lang_pref);
|
|
$lang_code = substr($lang_pref[0], 0, 2);
|
|
// qualifier set?
|
|
if( count($lang_pref) > 1 )
|
|
$result[$lang_code] = max($result[$lang_code], $lang_pref[1]);
|
|
else
|
|
$result[$lang_code] = 1.0;
|
|
}
|
|
arsort($result, SORT_NUMERIC);
|
|
}
|
|
|
|
// Set the language in the array (replacing the score)
|
|
if (!empty($languages)) {
|
|
if (is_array($languages)) {
|
|
foreach( $languages as $language ) {
|
|
if(
|
|
$include === TRUE ||
|
|
(
|
|
is_array($include)
|
|
? in_array($language['i18n'], $include)
|
|
: ($language['i18n'] == $include) // silly; mostly to avoid PHP errors
|
|
)
|
|
) {
|
|
$result[$language['i18n']] = $translate ? _($language['taal']) : $language['taal'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Test if 'i18n' is a valid language code
|
|
*/
|
|
function db_is_system_lang($i18n, $include = TRUE)
|
|
{
|
|
$i18n_languages = db_fetch_system_lang(TRUE, $i18n_wo_supported);
|
|
return isset($i18n_languages[$i18n]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Fetch system charset
|
|
*
|
|
* Inputs:
|
|
* - i18n: Requested i18n
|
|
*
|
|
* Return: charset
|
|
*/
|
|
function db_fetch_system_lang_charset($i18n) {
|
|
// Initial return value
|
|
$result = "";
|
|
|
|
// Fetch charset
|
|
$charset = db_fetch_data("SELECT charset FROM talen where i18n='" . $i18n . "'");
|
|
|
|
// Parse into result
|
|
if (!empty($charset)) {
|
|
$result = $charset[0]['charset'];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Fetch supported currencies
|
|
*
|
|
* Returns: Array
|
|
*/
|
|
function db_fetch_system_currencies()
|
|
{
|
|
// T.B.D.
|
|
|
|
return array(
|
|
"EUR" => array('html' => _("EUR"), 'name' => _("currency:EUR"), 'symbol' => _("symbol:EUR"), 'decimals' => 2),
|
|
"GBP" => array('html' => _("GBP"), 'name' => _("currency:GBP"), 'symbol' => _("symbol:GBP"), 'decimals' => 2)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Format a number according to currency
|
|
*/
|
|
define("ISO4217", "ISO4217");
|
|
function sprintf_amount($currency, $amount, $prefix = FALSE)
|
|
{
|
|
$currencies = db_fetch_system_currencies();
|
|
$localeconv = localeconv();
|
|
|
|
// LC_MONETARY=='nl' puts a negative sign (i.e. the minus) behind the number
|
|
// we don't want that :-)
|
|
$value = money_format("%!i", abs($amount));
|
|
// prepend the sign
|
|
if( $amount < 0 ) $value = "-" . $value;
|
|
// prepend the monetary unit
|
|
if( $prefix ) {
|
|
if( $prefix === TRUE ) {
|
|
$value = $currencies[$currency]['symbol'] . " " . $value;
|
|
}
|
|
else if( $prefix === ISO4217 ) {
|
|
// the array index _is_ an ISO 4217 currency code
|
|
$value = $currency . " " . $value;
|
|
}
|
|
else {
|
|
$value = $prefix . $value;
|
|
}
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
|
|
/**
|
|
* Fetch system maintenance messages
|
|
*
|
|
* Return: Array containing all maintenance messages
|
|
*/
|
|
function db_fetch_system_maint_mes($i18n = "") {
|
|
// Initial return value
|
|
$result = "";
|
|
|
|
// Fetch system maintenance messages
|
|
$query = "SELECT * FROM algemeen";
|
|
|
|
if (strlen($i18n)) {
|
|
$query .= " WHERE i18n='" . $i18n . "'";
|
|
}
|
|
|
|
$row_maint_messages = db_fetch_data($query);
|
|
|
|
|
|
// Parse into result
|
|
if (!empty($row_maint_messages)) {
|
|
if (strlen($i18n)) {
|
|
$result = $row_maint_messages[0];
|
|
}
|
|
else {
|
|
$result = $row_maint_messages;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Store/update system maintenance messages
|
|
*
|
|
* Inputs:
|
|
* - message_array: Array containing new message
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_store_system_maint_mes($messages) {
|
|
// Initial return value
|
|
$result = 0;
|
|
|
|
if (is_array($messages)) {
|
|
$result = 1;
|
|
foreach ($messages as $message) {
|
|
// Check if exist?
|
|
$row_general = db_fetch_data("SELECT * FROM algemeen WHERE i18n='" . $message['i18n'] . "'");
|
|
|
|
if (!empty($row_general)) {
|
|
// Query updating message
|
|
$query = "UPDATE algemeen SET onderhoud='" . specialchars($message['message']) . "' WHERE i18n='" . $message['i18n'] . "'";
|
|
}
|
|
else {
|
|
// Query insert message
|
|
$query = "INSERT algemeen (i18n,onderhoud) VALUES ('" . $message['i18n'] . "','" . specialchars($message['message']) . "')";
|
|
}
|
|
|
|
if (!db_store_data($query)) {
|
|
// Result NOK
|
|
$result = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Fetch all available devices
|
|
*
|
|
* Inputs:
|
|
* - i18n Requested i18n
|
|
* - id Device id
|
|
*
|
|
* Return: Array containing all devices (no icon info!)
|
|
*/
|
|
function db_fetch_system_devices($i18n = "", $id = "", $by_id = FALSE) {
|
|
// Fetch devices info
|
|
$query = "SELECT id,artikelnr,RIGHT(CONCAT('0000',HEX(devtype)),4) AS devtype_hexcode,weerstand_ok,calibratie_geldigheid,service_interval,locked,capabilities,nr_batterijen,nr_tempsensors,realtime_status,realtime_timeout,weerstand_cert ";
|
|
$query .= " FROM device";
|
|
if( is_numeric($id) ) {
|
|
$query .= " WHERE device.id='" . $id . "'";
|
|
}
|
|
$row_devices = db_fetch_data($query);
|
|
|
|
// Parse into result
|
|
if( is_array($row_devices) ) {
|
|
// Fetch the name for the device in all languages (JW2014029; CVS r1.30.2.8)
|
|
$devices = array();
|
|
foreach( $row_devices as $device )
|
|
$devices[$device['id']] = $device;
|
|
|
|
// Fetch translations for the text on the delivery reports
|
|
$query = "SELECT i18n,id,field,tekst FROM vertaling WHERE id IN (" . implode(",", array_keys($devices)) . ") AND field LIKE 'device.%'";
|
|
if( $i18n ) $query .= " AND i18n='" . $i18n . "'";
|
|
$row_text = db_fetch_data($query);
|
|
if( $row_text ) {
|
|
foreach( $row_text as $text_i18n ) {
|
|
// save the tekst field; the key in the $devices array is the field name in the table less the 'device.' part (7 characters)
|
|
if( $i18n )
|
|
$devices[$text_i18n['id']][substr($text_i18n['field'], 7)] = $text_i18n['tekst'];
|
|
else
|
|
$devices[$text_i18n['id']][substr($text_i18n['field'], 7)][$text_i18n['i18n']] = $text_i18n['tekst'];
|
|
}
|
|
}
|
|
|
|
$query = "SELECT device,naam,i18n FROM device_name WHERE device IN (" . implode(",", array_keys($devices)) . ")";
|
|
$row_names = db_fetch_data($query);
|
|
if( is_array($row_names) ) {
|
|
foreach( $row_names as $name_i18n ) {
|
|
$devices[$name_i18n['device']]['naam'][$name_i18n['i18n']] = $name_i18n['naam'];
|
|
}
|
|
|
|
// Get the right translation
|
|
if( $i18n ) {
|
|
$sort_order = array();
|
|
foreach( $devices as &$device ) {
|
|
$name = i18n_translate($device['naam'], NULL, $i18n);
|
|
|
|
// Reduce the array of names to the correct translation
|
|
$device['naam'] = $name;
|
|
|
|
// Also create an array for sorting
|
|
$sort_order[$device['id']] = $name;
|
|
}
|
|
// avoid PHP bug
|
|
unset($device);
|
|
|
|
// Sort the devices by name; can only do that when the name is translated
|
|
asort($sort_order, SORT_LOCALE_STRING | SORT_FLAG_CASE);
|
|
// Rearrange the array
|
|
$devices_sorted = array();
|
|
foreach( $sort_order as $id => $name )
|
|
if( $by_id )
|
|
$devices_sorted[$id] = $devices[$id];
|
|
else
|
|
$devices_sorted[] = $devices[$id];
|
|
$devices = $devices_sorted;
|
|
}
|
|
else if( !$by_id ) {
|
|
// needed for older code, when indexes the resulting array by $row[0] etc
|
|
$devices_flat = array();
|
|
foreach( $devices as $device ) $devices_flat[] = $device;
|
|
$devices = $devices_flat;
|
|
}
|
|
}
|
|
|
|
return $devices;
|
|
}
|
|
else return FALSE;
|
|
}
|
|
|
|
|
|
/**
|
|
* Fetch device name
|
|
*
|
|
* Inputs:
|
|
* - i18n Requested i18n
|
|
* - id Device id
|
|
*
|
|
* Return: Device name (string)
|
|
*/
|
|
function db_fetch_system_device_name($i18n, $id) {
|
|
// Fetch the name in all translations from the database
|
|
// (as off JW20140429, the name doesn't need to be entered for every language)
|
|
$row_names = db_fetch_data("SELECT naam,i18n FROM device_name WHERE device=" . $id);
|
|
|
|
// Parse into result
|
|
if( is_array($row_names) ) {
|
|
// Re-arrange the array
|
|
$names = array();
|
|
foreach( $row_names as $name_i18n )
|
|
$names[$name_i18n['i18n']] = $name_i18n['naam'];
|
|
|
|
return i18n_translate($names, NULL, $i18n);
|
|
}
|
|
else return FALSE;
|
|
}
|
|
|
|
/**
|
|
* Fetch device icon info
|
|
*
|
|
* Inputs:
|
|
* - id Device id
|
|
* - icon Icon (ok, nok, ok_batt, ect)
|
|
*
|
|
* Return: array containing icon info (mimetype, width, height, icon)
|
|
*/
|
|
function db_fetch_system_device_icon($id, $icon) {
|
|
// Initial return value
|
|
$result = "";
|
|
|
|
$icon_row = db_fetch_data("SELECT icon_" . $icon . ",icon_" . $icon . "_mimetype,icon_" . $icon . "_width,icon_" . $icon . "_height FROM device WHERE id='" . $id ."'");
|
|
|
|
// Parse into result
|
|
if (!empty($icon_row)) {
|
|
$result = array(icon => $icon_row[0]["icon_" . $icon],
|
|
width => $icon_row[0]["icon_" . $icon . "_width"],
|
|
height => $icon_row[0]["icon_" . $icon . "_height"],
|
|
mimetype => $icon_row[0]["icon_" . $icon . "_mimetype"]);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Check device capabilities
|
|
*
|
|
* Inputs:
|
|
* - id Device id
|
|
* - capabilities Capabilities/rt status display array (gps AND gsm, etc), multi array => OR function
|
|
* - supported_devices Display all devices which support this capability
|
|
* - supported_devices Which set must be checked
|
|
*
|
|
* Return: 1 (TRUE)/ 0 (FALSE) or list of all supported device types
|
|
*/
|
|
function db_check_system_device_capabilities($id, $capabilities, $supported_devices = FALSE, $set = "capabilities") {
|
|
// Initial result value
|
|
$result = FALSE;
|
|
$first = TRUE;
|
|
|
|
$query = "SELECT id FROM device WHERE ";
|
|
|
|
if (is_array($capabilities)) {
|
|
foreach($capabilities as $item) {
|
|
if (is_array($item)) {
|
|
if (!$first) {
|
|
$query .= " AND ";
|
|
}
|
|
$first = FALSE;
|
|
$query .= " (";
|
|
for($i=0; $i<sizeof($item); $i++) {
|
|
if ($i) {
|
|
$query .= "OR ";
|
|
}
|
|
$query .= "FIND_IN_SET('" . ($item[$i]) . "'," . $set . ") > 0 ";
|
|
}
|
|
$query .= ") ";
|
|
}
|
|
else {
|
|
if (!$first) {
|
|
$query .= " AND ";
|
|
}
|
|
$first = FALSE;
|
|
$query .= " FIND_IN_SET('" . ($item) . "'," . $set . ") > 0 ";
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$query .= " FIND_IN_SET('" . ($capabilities) . "'," . $set . ") > 0 ";
|
|
}
|
|
|
|
$devices = db_fetch_data($query);
|
|
|
|
// Check if id is present
|
|
if (is_array($devices)) {
|
|
// Return all devices which support these capability
|
|
if ($supported_devices) {
|
|
$result = array();
|
|
|
|
foreach($devices as $device) {
|
|
array_push($result, $device['id']);
|
|
}
|
|
}
|
|
// Check for specific id
|
|
else {
|
|
foreach($devices as $device) {
|
|
if ($device['id'] == $id) {
|
|
$result = TRUE;
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the number of temperature sensors
|
|
*/
|
|
function db_system_device_nr_tempsensors($id)
|
|
{
|
|
$data = db_fetch_data("SELECT nr_tempsensors FROM device WHERE id=" . $id);
|
|
if( empty($data) ) return FALSE;
|
|
else return $data[0]['nr_tempsensors'];
|
|
}
|
|
|
|
|
|
/**
|
|
* Fetch device status
|
|
*
|
|
* Inputs:
|
|
* - id Device id
|
|
* - i18n Internationalisation
|
|
* - cond Conditions (relais, kortsluiting)
|
|
* - value value (ok,nok)
|
|
*
|
|
* Return: array(status, display)
|
|
*/
|
|
function db_fetch_system_device_status($id, $i18n, $cond = "", $value = "") {
|
|
// Initial return value
|
|
$result = false;
|
|
|
|
if ((is_array($cond)) || (strlen($cond))) {
|
|
$query = "SELECT status FROM device_status_conditie WHERE device='" . $id . "'";
|
|
|
|
if (is_array($cond)) {
|
|
foreach($cond as $item) {
|
|
$value = ($item['value']) ? ">0" : "=0";
|
|
$query .= " AND FIND_IN_SET('" . $item['condition'] . "', conditie)" . $value;
|
|
}
|
|
}
|
|
else {
|
|
$query .= " AND conditie=" . $cond . "";
|
|
}
|
|
|
|
// Execute condition query
|
|
$condition_result = db_fetch_data($query, 1);
|
|
|
|
if (!empty($condition_result)) {
|
|
$status = $condition_result[0]['status'];
|
|
}
|
|
}
|
|
else {
|
|
$status = $value;
|
|
}
|
|
|
|
if (strlen($status)) {
|
|
$query = "SELECT * FROM device_status_weergave WHERE device='" . $id . "' and status='" . $status . "' and i18n='" . $i18n . "'";
|
|
|
|
// Execute display query
|
|
$display_result = db_fetch_data($query, 1);
|
|
|
|
// Parse into result
|
|
if (!empty($display_result)) {
|
|
$result = array("status" => $status, "display" => $display_result[0]['weergave']);
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Fetch service interval
|
|
*
|
|
* Inputs:
|
|
* - id Device id
|
|
*/
|
|
function db_check_system_service_interval($id)
|
|
{
|
|
$query = "SELECT service_interval FROM device WHERE id=" . $id;
|
|
return db_fetch_item($query);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Search system device
|
|
*
|
|
* Inputs:
|
|
* - name Device name (incl wildcard)
|
|
* - i18n Nationalisation
|
|
*
|
|
* Return: Multidimensional array containing all document information
|
|
*/
|
|
function db_search_system_device($name, $i18n)
|
|
{
|
|
// Fetch device info
|
|
$query = "SELECT device.*,device_name.naam,device_name.i18n FROM device,device_name";
|
|
$query .= " WHERE device.id=device_name.device";
|
|
$query .= " AND i18n='" . $i18n . "'";
|
|
if( $name ) {
|
|
$query .= " AND (device_name.naam LIKE '%" . $name . "%' OR device.artikelnr LIKE '%" . $name . "%')";
|
|
}
|
|
$query .= " ORDER by device_name.naam";
|
|
return db_fetch_data($query);
|
|
}
|
|
|
|
// (original function, superceeded with the advent of the article code)
|
|
function db_search_system_device_name($name, $i18n)
|
|
{
|
|
// Initial return value
|
|
$result = "";
|
|
|
|
// Fetch device info
|
|
$device = db_fetch_data("SELECT * FROM device_name WHERE naam LIKE '%" . $name . "%' AND i18n='" . $i18n . "' ORDER by naam");
|
|
|
|
// Parse into result
|
|
if (!empty($device)) {
|
|
$result = $device;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Store new device type
|
|
*
|
|
* Inputs:
|
|
* - device_array array containing device info
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_store_system_device(&$device_array) {
|
|
//initial return value
|
|
$result = 1;
|
|
|
|
// Start transaction
|
|
db_start_transaction();
|
|
|
|
$query = "INSERT device (artikelnr,devtype,weerstand_ok,weerstand_cert,";
|
|
// Retrieve all blob type
|
|
$icons = db_fetch_fields("device", "blob");
|
|
if (is_array($icons)) {
|
|
foreach($icons as $icon) {
|
|
$query .= $icon . "," . $icon . "_mimetype," . $icon . "_width," . $icon . "_height,";
|
|
}
|
|
}
|
|
$query .= "nr_batterijen,nr_tempsensors,locked,capabilities,realtime_status,realtime_timeout,calibratie_geldigheid,service_interval) VALUES (";
|
|
if( $device_array['artikelnr'] )
|
|
$query .= "'" . $device_array['artikelnr'] . "'";
|
|
else
|
|
$query .= "NULL";
|
|
$query .= "," . $device_array['devtype'] ; // no quotes; it's a number or the string "NULL"
|
|
$query .= ",'" . addslashes($device_array['weerstand_ok']) . "'";
|
|
$query .= ",'" . addslashes($device_array['weerstand_cert']) . "'";
|
|
|
|
if (is_array($icons)) {
|
|
foreach($icons as $icon) {
|
|
if (strlen($device_array[$icon])) {
|
|
$query .= ",'" . mysql_real_escape_string($device_array[$icon], db_get_connection()) . "'";
|
|
$query .= ",'" . ($device_array[$icon . "_mimetype"]) . "'";
|
|
$query .= ",'" . ($device_array[$icon . "_width"]) . "'";
|
|
$query .= ",'" . ($device_array[$icon . "_height"]) . "'";
|
|
}
|
|
else {
|
|
$query .= ",NULL,NULL,40,20";
|
|
}
|
|
}
|
|
}
|
|
$query .= ",'" . ($device_array['nr_batterijen']) . "'";
|
|
$query .= ",'" . ($device_array['nr_tempsensors']) . "'";
|
|
if (strlen($device_array['locked'])) {
|
|
$query .= ",'" . ($device_array['locked']) . "'";
|
|
}
|
|
else {
|
|
$query .= ",'no'";
|
|
}
|
|
$query .= ",'" . ($device_array['capabilities']) . "'";
|
|
$query .= ",'" . ($device_array['realtime_status']) . "'";
|
|
$query .= ",'" . addslashes($device_array['realtime_timeout']) . "'";
|
|
if (strlen($device_array['calibratie_geldigheid'])) {
|
|
$query .= ",'" . addslashes($device_array['calibratie_geldigheid']) . "'";
|
|
}
|
|
else {
|
|
$query .= ",NULL";
|
|
}
|
|
if (strlen($device_array['service_interval'])) {
|
|
$query .= ",'" . addslashes($device_array['service_interval']) . "'";
|
|
}
|
|
else {
|
|
$query .= ",NULL";
|
|
}
|
|
$query .= ")";
|
|
|
|
if (!db_store_data($query)) {
|
|
$result = 0;
|
|
}
|
|
else {
|
|
// Determine ID
|
|
$device_array['id'] = db_fetch_last_id();
|
|
}
|
|
|
|
// Store device names/status
|
|
if ($result) {
|
|
$query = "";
|
|
$sep = "INSERT INTO vertaling (`i18n`,`field`,`id`,`tekst`) VALUES ";
|
|
if( is_array($device_array['verklaring_veiligheid']) ) foreach( $device_array['verklaring_veiligheid'] as $i18n => $text ) {
|
|
$query .= $sep . "('" . $i18n . "','device.verklaring_veiligheid'," . $device_array['id'] . ",'" . specialchars($text) . "')";
|
|
$sep = ",";
|
|
}
|
|
if( is_array($device_array['verklaring_klant']) ) foreach( $device_array['verklaring_klant'] as $i18n => $text ) {
|
|
$query .= $sep . "('" . $i18n . "','device.verklaring_klant'," . $device_array['id'] . ",'" . specialchars($text) . "')";
|
|
$sep = ",";
|
|
}
|
|
if( $query && !db_store_data($query) ) {
|
|
$result = FALSE;
|
|
}
|
|
else if (!db_store_system_device_names($device_array) ||
|
|
!db_store_system_device_status_display($device_array) ||
|
|
!db_store_system_device_status_condition($device_array)) {
|
|
$result = 0;
|
|
}
|
|
}
|
|
|
|
// Commit transaction
|
|
if( !db_commit_transaction() ) return FALSE;
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Store new device names
|
|
*
|
|
* Inputs:
|
|
* - device_array array containing device info
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_store_system_device_names($device_array) {
|
|
//initial return value
|
|
$result = 1;
|
|
|
|
// Start transaction
|
|
db_start_transaction();
|
|
|
|
// Delete device
|
|
$query = "DELETE FROM device_name WHERE device='" . $device_array['id'] . "'";
|
|
db_store_data($query);
|
|
|
|
// Commit transaction
|
|
if (db_commit_transaction()) {
|
|
// Parse result
|
|
$result = 1;
|
|
}
|
|
|
|
if ($result) {
|
|
$i18n_languages = db_fetch_system_lang();
|
|
|
|
if (is_array($i18n_languages)) {
|
|
foreach ($i18n_languages as $i18n => $lang) {
|
|
if ($result) {
|
|
if (!db_store_data("INSERT device_name (device, i18n, naam) VALUES ('" . $device_array['id'] . "','" . $i18n . "','" . specialchars($device_array["naam"][$i18n]) . "')")) {
|
|
$result = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Store new device status display
|
|
*
|
|
* Inputs:
|
|
* - device_array array containing device info
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_store_system_device_status_display($device_array) {
|
|
//initial return value
|
|
$result = 1;
|
|
|
|
// Start transaction
|
|
db_start_transaction();
|
|
|
|
// Delete device
|
|
$query = "DELETE FROM device_status_weergave WHERE device='" . $device_array['id'] . "'";
|
|
db_store_data($query);
|
|
|
|
// Commit transaction
|
|
if (db_commit_transaction()) {
|
|
// Parse result
|
|
$result = 1;
|
|
}
|
|
|
|
if ($result) {
|
|
$i18n_languages = db_fetch_system_lang();
|
|
|
|
$options = db_fetch_set("device_status_weergave","status");
|
|
if ((is_array($i18n_languages)) && (is_array($options))) {
|
|
foreach ($i18n_languages as $i18n => $lang) {
|
|
foreach ($options as $option) {
|
|
if (($result) && (strlen($device_array[$option . "_value_" . $i18n]))) {
|
|
$query = "INSERT device_status_weergave (device, i18n, weergave, status) VALUES ";
|
|
$query .= "('" . $device_array['id'] . "','" . $i18n . "','" . specialchars($device_array[$option . "_value_" . $i18n]) . "', '" . $option . "')";
|
|
if (!db_store_data($query)) {
|
|
$result = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Store new device status condition
|
|
*
|
|
* Inputs:
|
|
* - device_array array containing device info
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_store_system_device_status_condition($device_array) {
|
|
//initial return value
|
|
$result = 1;
|
|
|
|
// Start transaction
|
|
db_start_transaction();
|
|
|
|
// Delete device
|
|
$query = "DELETE FROM device_status_conditie WHERE device='" . $device_array['id'] . "'";
|
|
db_store_data($query);
|
|
|
|
// Commit transaction
|
|
if (db_commit_transaction()) {
|
|
// Parse result
|
|
$result = 1;
|
|
}
|
|
|
|
if ($result) {
|
|
// Store all status when set
|
|
for ($i=0; $i<4; $i++) {
|
|
if (isset($device_array["status_" . $i])) {
|
|
$query = "INSERT device_status_conditie (device, status, conditie) VALUES ";
|
|
$query .= "('" . $device_array['id'] . "','" . $device_array["status_" . $i] . "'," . $i . ")";
|
|
|
|
if (!db_store_data($query)) {
|
|
$result = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Update existing device type
|
|
*
|
|
* Inputs:
|
|
* - device_array array containing device info
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_update_system_device($device_array) {
|
|
//initial return value
|
|
$result = 1;
|
|
|
|
// Start transaction
|
|
db_start_transaction();
|
|
|
|
// Query updating device
|
|
$query = "UPDATE device SET ";
|
|
if( $device_array['artikelnr'] )
|
|
$query .= "artikelnr='" . $device_array['artikelnr'] . "',";
|
|
else
|
|
$query .= "artikelnr=NULL,";
|
|
$query .= "devtype=" . $device_array['devtype'] . ","; // no quotes; it's a number or the string "NULL"
|
|
$query .= "weerstand_ok='" . addslashes($device_array['weerstand_ok']) . "',";
|
|
$query .= "weerstand_cert='" . addslashes($device_array['weerstand_cert']) . "',";
|
|
// Retrieve all blob type
|
|
$icons = db_fetch_fields("device", "blob");
|
|
if (is_array($icons)) {
|
|
foreach($icons as $icon) {
|
|
if (strlen($device_array[$icon])) {
|
|
$query .= $icon . "='" . mysql_real_escape_string($device_array[$icon], db_get_connection()) . "',";
|
|
$query .= $icon . "_mimetype='" . ($device_array[$icon . "_mimetype"]) . "',";
|
|
$query .= $icon . "_width='" . ($device_array[$icon . "_width"]) . "',";
|
|
$query .= $icon . "_height='" . ($device_array[$icon . "_height"]) . "',";
|
|
}
|
|
else {
|
|
$query .= $icon . "=NULL,";
|
|
$query .= $icon . "_mimetype=NULL,";
|
|
$query .= $icon . "_width='40',";
|
|
$query .= $icon . "_height='20',";
|
|
}
|
|
}
|
|
}
|
|
$query .= "nr_batterijen='" . ($device_array['nr_batterijen']) . "',";
|
|
$query .= "nr_tempsensors='" . ($device_array['nr_tempsensors']) . "',";
|
|
if (strlen($device_array['locked'])) {
|
|
$query .= "locked='" . ($device_array['locked']) . "',";
|
|
}
|
|
else {
|
|
$query .= "locked='no',";
|
|
}
|
|
$query .= "capabilities='" . ($device_array['capabilities']) . "',";
|
|
$query .= "realtime_status='" . ($device_array['realtime_status']) . "',";
|
|
$query .= "realtime_timeout='" . ($device_array['realtime_timeout']) . "',";
|
|
if (strlen($device_array['calibratie_geldigheid'])) {
|
|
$query .= "calibratie_geldigheid='" . addslashes($device_array['calibratie_geldigheid']) . "',";
|
|
}
|
|
else {
|
|
$query .= "calibratie_geldigheid=NULL,";
|
|
}
|
|
if (strlen($device_array['service_interval'])) {
|
|
$query .= "service_interval='" . addslashes($device_array['service_interval']) . "' ";
|
|
}
|
|
else {
|
|
$query .= "service_interval=NULL ";
|
|
}
|
|
$query .= "WHERE id='" . ($device_array['id']) . "'";
|
|
if (db_store_data($query)) {
|
|
// Result OK
|
|
$result = 1;
|
|
}
|
|
|
|
// Store device names/status
|
|
if ($result) {
|
|
// Delete old transltations
|
|
$query = "DELETE FROM `vertaling` WHERE `id`=" . $device_array['id'] . " AND `field` LIKE 'device.%'";
|
|
db_store_data($query);
|
|
|
|
$query = "";
|
|
$sep = "INSERT INTO vertaling (`i18n`,`field`,`id`,`tekst`) VALUES ";
|
|
if( is_array($device_array['verklaring_veiligheid']) ) foreach( $device_array['verklaring_veiligheid'] as $i18n => $text ) {
|
|
$query .= $sep . "('" . $i18n . "','device.verklaring_veiligheid'," . $device_array['id'] . ",'" . specialchars($text) . "')";
|
|
$sep = ",";
|
|
}
|
|
if( is_array($device_array['verklaring_klant']) ) foreach( $device_array['verklaring_klant'] as $i18n => $text ) {
|
|
$query .= $sep . "('" . $i18n . "','device.verklaring_klant'," . $device_array['id'] . ",'" . specialchars($text) . "')";
|
|
$sep = ",";
|
|
}
|
|
if( $query && !db_store_data($query) ) {
|
|
$result = FALSE;
|
|
}
|
|
else if (!db_store_system_device_names($device_array) ||
|
|
!db_store_system_device_status_display($device_array) ||
|
|
!db_store_system_device_status_condition($device_array)) {
|
|
$result = 0;
|
|
}
|
|
}
|
|
|
|
// Commit transaction
|
|
if( !db_commit_transaction() ) return FALSE;
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Delete device type
|
|
*
|
|
* Inputs:
|
|
* - device_id device db id
|
|
*
|
|
* Return: 1 (OK)/ 0(Error)
|
|
*/
|
|
function db_delete_system_device($device_id) {
|
|
// Start transaction
|
|
db_start_transaction();
|
|
|
|
// Delete device
|
|
$query = "DELETE FROM device WHERE id='" . $device_id . "'";
|
|
db_store_data($query);
|
|
|
|
// Delete device name
|
|
$query = "DELETE FROM device_name WHERE device='" . $device_id . "'";
|
|
db_store_data($query);
|
|
|
|
// Delete device status
|
|
$query = "DELETE FROM device_status_conditie WHERE device='" . $device_id . "'";
|
|
db_store_data($query);
|
|
|
|
// Delete device status
|
|
$query = "DELETE FROM device_status_weergave WHERE device='" . $device_id . "'";
|
|
db_store_data($query);
|
|
|
|
// Commit transaction
|
|
if (db_commit_transaction()) {
|
|
// Parse result
|
|
$result = 1;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
?>
|