From 2be63b20418c1e2e2feade2c50cd31c9cd95dc0f Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 2 Oct 2014 20:17:45 +0100 Subject: [PATCH] Added an option to rediscover a device from the web page --- html/forms/rediscover-device.inc.php | 30 ++++++ html/includes/api_functions.inc.php | 145 +------------------------- html/pages/device/edit/device.inc.php | 38 ++++++- includes/functions.php | 140 +++++++++++++++++++++++++ 4 files changed, 205 insertions(+), 148 deletions(-) create mode 100644 html/forms/rediscover-device.inc.php diff --git a/html/forms/rediscover-device.inc.php b/html/forms/rediscover-device.inc.php new file mode 100644 index 000000000..711560caf --- /dev/null +++ b/html/forms/rediscover-device.inc.php @@ -0,0 +1,30 @@ + + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if(!is_numeric($_POST['device_id'])) { + $status = "error"; + $message = "Invalid device id"; +} else { + $update = dbUpdate(array('last_discovered' => 'NULL'), 'devices', '`device_id` = ?', array($_POST['device_id'])); + if(!empty($update) || $update == '0') { + $status = "ok"; + $message = "Device will be rediscovered"; + } else { + $status = "error"; + $message = "Error rediscovering device"; + } +} +$output = array("status" => $status, "message" => $message); +header("Content-type: application/json"); +echo _json_encode($output); diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index c728a6dd5..26ebe23a0 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -12,146 +12,7 @@ * the source code distribution for details. */ -if (!defined('JSON_UNESCAPED_SLASHES')) - define('JSON_UNESCAPED_SLASHES', 64); -if (!defined('JSON_PRETTY_PRINT')) - define('JSON_PRETTY_PRINT', 128); -if (!defined('JSON_UNESCAPED_UNICODE')) - define('JSON_UNESCAPED_UNICODE', 256); - -function _json_encode($data, $options = 448) -{ - if (version_compare(PHP_VERSION, '5.4', '>=')) - { - return json_encode($data, $options); - } - - return _json_format(json_encode($data), $options); -} - -function _pretty_print_json($json) -{ - return _json_format($json, JSON_PRETTY_PRINT); -} - -function _json_format($json, $options = 448) -{ - $prettyPrint = (bool) ($options & JSON_PRETTY_PRINT); - $unescapeUnicode = (bool) ($options & JSON_UNESCAPED_UNICODE); - $unescapeSlashes = (bool) ($options & JSON_UNESCAPED_SLASHES); - - if (!$prettyPrint && !$unescapeUnicode && !$unescapeSlashes) - { - return $json; - } - - $result = ''; - $pos = 0; - $strLen = strlen($json); - $indentStr = ' '; - $newLine = "\n"; - $outOfQuotes = true; - $buffer = ''; - $noescape = true; - - for ($i = 0; $i < $strLen; $i++) - { - // Grab the next character in the string - $char = substr($json, $i, 1); - - // Are we inside a quoted string? - if ('"' === $char && $noescape) - { - $outOfQuotes = !$outOfQuotes; - } - - if (!$outOfQuotes) - { - $buffer .= $char; - $noescape = '\\' === $char ? !$noescape : true; - continue; - } - elseif ('' !== $buffer) - { - if ($unescapeSlashes) - { - $buffer = str_replace('\\/', '/', $buffer); - } - - if ($unescapeUnicode && function_exists('mb_convert_encoding')) - { - // http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha - $buffer = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', - function ($match) - { - return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); - }, $buffer); - } - - $result .= $buffer . $char; - $buffer = ''; - continue; - } - elseif(false !== strpos(" \t\r\n", $char)) - { - continue; - } - - if (':' === $char) - { - // Add a space after the : character - $char .= ' '; - } - elseif (('}' === $char || ']' === $char)) - { - $pos--; - $prevChar = substr($json, $i - 1, 1); - - if ('{' !== $prevChar && '[' !== $prevChar) - { - // If this character is the end of an element, - // output a new line and indent the next line - $result .= $newLine; - for ($j = 0; $j < $pos; $j++) - { - $result .= $indentStr; - } - } - else - { - // Collapse empty {} and [] - $result = rtrim($result) . "\n\n" . $indentStr; - } - } - - $result .= $char; - - // If the last character was the beginning of an element, - // output a new line and indent the next line - if (',' === $char || '{' === $char || '[' === $char) - { - $result .= $newLine; - - if ('{' === $char || '[' === $char) - { - $pos++; - } - - for ($j = 0; $j < $pos; $j++) - { - $result .= $indentStr; - } - } - } - // If buffer not empty after formating we have an unclosed quote - if (strlen($buffer) > 0) - { - //json is incorrectly formatted - $result = false; - } - - return $result; -} +require_once("../includes/functions.php"); function authToken(\Slim\Route $route) { @@ -255,8 +116,6 @@ function get_device() $router = $app->router()->getCurrentRoute()->getParams(); $hostname = $router['hostname']; - require_once("../includes/functions.php"); - // use hostname as device_id if it's all digits $device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname); @@ -376,7 +235,6 @@ function add_device() } if(empty($message)) { - require_once("../includes/functions.php"); $result = addHost($hostname, $snmpver, $port, $transport, 1); if($result) { @@ -414,7 +272,6 @@ function del_device() } else { - require_once("../includes/functions.php"); // allow deleting by device_id or hostname $device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname); diff --git a/html/pages/device/edit/device.inc.php b/html/pages/device/edit/device.inc.php index 3899e62f1..da7d302f1 100644 --- a/html/pages/device/edit/device.inc.php +++ b/html/pages/device/edit/device.inc.php @@ -56,10 +56,19 @@ if ($updated && $update_message) ?> -
- - -
+
+
+
+ + +
+
+
+
+
+ +
+

@@ -124,6 +133,27 @@ foreach ($config['device_types'] as $type)

+ =')) + { + return json_encode($data, $options); + } + + return _json_format(json_encode($data), $options); +} + +function _pretty_print_json($json) +{ + return _json_format($json, JSON_PRETTY_PRINT); +} + +function _json_format($json, $options = 448) +{ + $prettyPrint = (bool) ($options & JSON_PRETTY_PRINT); + $unescapeUnicode = (bool) ($options & JSON_UNESCAPED_UNICODE); + $unescapeSlashes = (bool) ($options & JSON_UNESCAPED_SLASHES); + + if (!$prettyPrint && !$unescapeUnicode && !$unescapeSlashes) + { + return $json; + } + + $result = ''; + $pos = 0; + $strLen = strlen($json); + $indentStr = ' '; + $newLine = "\n"; + $outOfQuotes = true; + $buffer = ''; + $noescape = true; + + for ($i = 0; $i < $strLen; $i++) + { + // Grab the next character in the string + $char = substr($json, $i, 1); + + // Are we inside a quoted string? + if ('"' === $char && $noescape) + { + $outOfQuotes = !$outOfQuotes; + } + + if (!$outOfQuotes) + { + $buffer .= $char; + $noescape = '\\' === $char ? !$noescape : true; + continue; + } + elseif ('' !== $buffer) + { + if ($unescapeSlashes) + { + $buffer = str_replace('\\/', '/', $buffer); + } + + if ($unescapeUnicode && function_exists('mb_convert_encoding')) + { + // http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha + $buffer = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', + function ($match) + { + return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); + }, $buffer); + } + + $result .= $buffer . $char; + $buffer = ''; + continue; + } + elseif(false !== strpos(" \t\r\n", $char)) + { + continue; + } + + if (':' === $char) + { + // Add a space after the : character + $char .= ' '; + } + elseif (('}' === $char || ']' === $char)) + { + $pos--; + $prevChar = substr($json, $i - 1, 1); + + if ('{' !== $prevChar && '[' !== $prevChar) + { + // If this character is the end of an element, + // output a new line and indent the next line + $result .= $newLine; + for ($j = 0; $j < $pos; $j++) + { + $result .= $indentStr; + } + } + else + { + // Collapse empty {} and [] + $result = rtrim($result) . "\n\n" . $indentStr; + } + } + + $result .= $char; + + // If the last character was the beginning of an element, + // output a new line and indent the next line + if (',' === $char || '{' === $char || '[' === $char) + { + $result .= $newLine; + + if ('{' === $char || '[' === $char) + { + $pos++; + } + + for ($j = 0; $j < $pos; $j++) + { + $result .= $indentStr; + } + } + } + // If buffer not empty after formating we have an unclosed quote + if (strlen($buffer) > 0) + { + //json is incorrectly formatted + $result = false; + } + + return $result; +} ?>