Improvements. networkmap class
Former-commit-id: b2e940cbb28112fe2ac9088ce2e76fd5b48239f9
This commit is contained in:
parent
6fb6963501
commit
95d2259236
|
@ -113,13 +113,20 @@ class NetworkMap
|
|||
public $dotGraph;
|
||||
|
||||
/**
|
||||
* Node list.
|
||||
* Node list processed by NetworkMap class.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $nodes;
|
||||
|
||||
/**
|
||||
* Node list RAW.
|
||||
* A simple list of nodes, could content information of agents, modules...
|
||||
* Is the 'raw' information.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $nodes;
|
||||
public $rawNodes;
|
||||
|
||||
/**
|
||||
* Useful to translate id_node to id_agent or id_module.
|
||||
|
@ -215,11 +222,13 @@ class NetworkMap
|
|||
*/
|
||||
public function __construct($options=false)
|
||||
{
|
||||
global $config;
|
||||
|
||||
// Default mapOptions values.
|
||||
// Defines the command to generate positions.
|
||||
$this->mapOptions['generation_method'] = LAYOUT_SPRING1;
|
||||
$this->mapOptions['width'] = 0;
|
||||
$this->mapOptions['height'] = 0;
|
||||
$this->mapOptions['width'] = $config['networkmap_max_width'];
|
||||
$this->mapOptions['height'] = $config['networkmap_max_width'];
|
||||
$this->mapOptions['simple'] = 0;
|
||||
$this->mapOptions['font_size'] = 12;
|
||||
$this->mapOptions['nooverlap'] = 1;
|
||||
|
@ -241,7 +250,7 @@ class NetworkMap
|
|||
'x_offs' => 0,
|
||||
'y_offs' => 0,
|
||||
'z_dash' => 0.5,
|
||||
'node_sep' => 3,
|
||||
'node_sep' => 5,
|
||||
'rank_sep' => 5,
|
||||
'mindist' => 1,
|
||||
'kval' => 0.1,
|
||||
|
@ -260,7 +269,7 @@ class NetworkMap
|
|||
|
||||
// Array of nodes, agents, virtual, etc.
|
||||
if (isset($options['nodes'])) {
|
||||
$this->nodes = $options['nodes'];
|
||||
$this->rawNodes = $options['nodes'];
|
||||
}
|
||||
|
||||
// Array of relations.
|
||||
|
@ -362,8 +371,8 @@ class NetworkMap
|
|||
'background_options' => 0,
|
||||
'source_period' => 60,
|
||||
'filter' => $this->mapOptions['map_filter'],
|
||||
'width' => 0,
|
||||
'height' => 0,
|
||||
'width' => $config['networkmap_max_width'],
|
||||
'height' => $config['networkmap_max_width'],
|
||||
'center_x' => 0,
|
||||
'center_y' => 0,
|
||||
];
|
||||
|
@ -815,11 +824,16 @@ class NetworkMap
|
|||
// Handmade ones.
|
||||
// Add also parent relationship.
|
||||
$parent_id = $node['id_parent'];
|
||||
$parent_node = $this->nodes[$parent_id]['id_node'];
|
||||
$parent_node = $this->getNodeData($parent_id, 'id_node');
|
||||
|
||||
// Store relationship.
|
||||
if ($parent_node) {
|
||||
$relations[$parent_node] = $node['id_node'];
|
||||
$relations[] = [
|
||||
'id_parent' => $parent_node,
|
||||
'parent_type' => NODE_GENERIC,
|
||||
'id_child' => $node['id_node'],
|
||||
'child_type' => NODE_GENERIC,
|
||||
];
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1421,7 +1435,13 @@ class NetworkMap
|
|||
|
||||
case NODE_GENERIC:
|
||||
default:
|
||||
$item['color'] = $node['color'];
|
||||
foreach ($source_data as $k => $v) {
|
||||
$node[$k] = $v;
|
||||
}
|
||||
|
||||
$node['style']['label'] = $node['name'];
|
||||
$node['style']['shape'] = 'circle';
|
||||
$item['color'] = self::getColorByStatus($node['status']);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1645,7 +1665,7 @@ class NetworkMap
|
|||
}
|
||||
|
||||
$edge = "\n".$data['from'].' -- '.$data['to'];
|
||||
$edge .= '[len='.$this->mapOptions['map_filter']['rank_sep'];
|
||||
$edge .= '[len='.$this->mapOptions['map_filter']['node_sep'];
|
||||
$edge .= ', color="#BDBDBD", headclip=false, tailclip=false,';
|
||||
$edge .= ' edgeURL=""];'."\n";
|
||||
|
||||
|
@ -1690,8 +1710,12 @@ class NetworkMap
|
|||
$graph = '';
|
||||
|
||||
if ($nodes === false) {
|
||||
// Search for nodes.
|
||||
$nodes = $this->calculateNodes();
|
||||
if ($this->rawNodes) {
|
||||
$nodes = $this->rawNodes;
|
||||
} else {
|
||||
// Search for nodes.
|
||||
$nodes = $this->calculateNodes();
|
||||
}
|
||||
}
|
||||
|
||||
// Search for relations.
|
||||
|
@ -1718,8 +1742,10 @@ class NetworkMap
|
|||
$i = 1;
|
||||
$orphans = [];
|
||||
foreach ($nodes as $k => $node) {
|
||||
if (isset($node['id_agente']) === true
|
||||
&& $node['id_agente'] > 0
|
||||
if (isset($node['type']) && $node['type'] == NODE_AGENTE
|
||||
|| (isset($node['type']) === false
|
||||
&& isset($node['id_agente']) === true
|
||||
&& $node['id_agente'] > 0)
|
||||
) {
|
||||
// Origin is agent or module.
|
||||
if (isset($node['id_agente_modulo']) === true
|
||||
|
@ -1852,6 +1878,8 @@ class NetworkMap
|
|||
*/
|
||||
private function parseGraphvizMapFile($graphviz_file)
|
||||
{
|
||||
global $config;
|
||||
|
||||
if (isset($graphviz_file) === false
|
||||
|| is_file($graphviz_file) === false
|
||||
) {
|
||||
|
@ -1869,9 +1897,16 @@ class NetworkMap
|
|||
if (preg_match('/^graph.*$/', $line) != 0) {
|
||||
// Graph definition.
|
||||
$fields = explode(' ', $line);
|
||||
$this->map['width'] = ($fields[2] * 10 * GRAPHVIZ_RADIUS_CONVERSION_FACTOR);
|
||||
$this->map['height'] = ($fields[3] * 10 * GRAPHVIZ_RADIUS_CONVERSION_FACTOR);
|
||||
|
||||
$this->map['width'] = 0;
|
||||
$this->map['height'] = 0;
|
||||
if ($this->map['width'] > $config['networkmap_max_width']) {
|
||||
$this->map['width'] = $config['networkmap_max_width'];
|
||||
}
|
||||
|
||||
if ($this->map['height'] > $config['networkmap_max_width']) {
|
||||
$this->map['height'] = $config['networkmap_max_width'];
|
||||
}
|
||||
} else if (preg_match('/^node.*$/', $line) != 0) {
|
||||
// Node.
|
||||
$fields = explode(' ', $line);
|
||||
|
@ -2425,6 +2460,49 @@ class NetworkMap
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generates a simple interface to interact with nodes.
|
||||
*
|
||||
* @return string HTML code for simple interface.
|
||||
*/
|
||||
public function loadSimpleInterface()
|
||||
{
|
||||
$output = '<div id="open_version_dialog" style="display: none;">';
|
||||
$output .= __(
|
||||
'In the Open version of %s can not be edited nodes or map',
|
||||
get_product_name()
|
||||
);
|
||||
$output .= '</div>';
|
||||
|
||||
$output .= '<div id="dialog_node_edit" style="display: none;" title="';
|
||||
$output .= __('Edit node').'">';
|
||||
$output .= '<div style="text-align: left; width: 100%;">';
|
||||
|
||||
$table = new StdClass();
|
||||
$table->id = 'node_details';
|
||||
$table->width = '100%';
|
||||
|
||||
$table->data = [];
|
||||
$table->data[0][0] = '<strong>'.__('Agent').'</strong>';
|
||||
$table->data[0][1] = '';
|
||||
$table->data[1][0] = '<strong>'.__('Adresses').'</strong>';
|
||||
$table->data[1][1] = '';
|
||||
$table->data[2][0] = '<strong>'.__('OS type').'</strong>';
|
||||
$table->data[2][1] = '';
|
||||
$table->data[3][0] = '<strong>'.__('Group').'</strong>';
|
||||
$table->data[3][1] = '';
|
||||
|
||||
$output .= ui_toggle(
|
||||
html_print_table($table, true),
|
||||
__('Node Details'),
|
||||
__('Node Details'),
|
||||
false,
|
||||
true
|
||||
);
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Show an advanced interface to manage dialogs.
|
||||
*
|
||||
|
@ -2899,7 +2977,6 @@ class NetworkMap
|
|||
$minimap_display = '';
|
||||
if ($this->mapOptions['pure']) {
|
||||
$minimap_display = 'none';
|
||||
$minimap_display = '';
|
||||
}
|
||||
|
||||
$networkmap = $this->map;
|
||||
|
@ -3001,7 +3078,7 @@ class NetworkMap
|
|||
$output .= $this->loadMapSkel();
|
||||
$output .= $this->loadMapData();
|
||||
$output .= $this->loadController();
|
||||
$output .= $this->loadAdvancedInterface();
|
||||
$output .= $this->loadSimpleInterface();
|
||||
}
|
||||
|
||||
if ($return === false) {
|
||||
|
|
|
@ -1,5 +1,33 @@
|
|||
/* global jQuery */
|
||||
/* global $ */
|
||||
/* global context_minimap */
|
||||
/* global minimap_w */
|
||||
/* global minimap_h */
|
||||
/* global minimap_relation */
|
||||
/* global graph */
|
||||
/* global translation */
|
||||
/* global scale */
|
||||
/* global width_svg */
|
||||
/* global height_svg */
|
||||
/* global networkmap_dimensions */
|
||||
/* global node_radius */
|
||||
/* global holding_area_dimensions */
|
||||
/* global networkmap_id */
|
||||
/* global enterprise_installed */
|
||||
/* global force */
|
||||
/* global layer_graph_nodes */
|
||||
/* global layer_graph_links */
|
||||
/* global ellipsize */
|
||||
/* global d3 */
|
||||
/* global node_selected */
|
||||
|
||||
/* exported delete_link */
|
||||
/* exported update_fictional_node */
|
||||
/* exported update_node_name */
|
||||
/* exported change_shape */
|
||||
|
||||
function draw_minimap() {
|
||||
//Clean the canvas
|
||||
// Clean the canvas.
|
||||
context_minimap.clearRect(0, 0, minimap_w, minimap_h);
|
||||
|
||||
context_minimap.beginPath();
|
||||
|
@ -20,6 +48,9 @@ function draw_minimap() {
|
|||
jQuery.each(graph.nodes, function(key, value) {
|
||||
if (typeof value == "undefined") return;
|
||||
|
||||
var center_orig_x;
|
||||
var center_orig_y;
|
||||
|
||||
context_minimap.beginPath();
|
||||
//Paint the item
|
||||
if (graph.nodes.length > 100) {
|
||||
|
@ -96,11 +127,11 @@ function inner_minimap_box(param_x, param_y) {
|
|||
return false;
|
||||
}
|
||||
|
||||
function set_center(id, event) {
|
||||
pos_x = width_svg / 2 - translation[0] / scale;
|
||||
pos_y = height_svg / 2 - translation[1] / scale;
|
||||
|
||||
function set_center(id) {
|
||||
var pos_x = width_svg / 2 - translation[0] / scale;
|
||||
var pos_y = height_svg / 2 - translation[1] / scale;
|
||||
var params = [];
|
||||
|
||||
params.push("set_center=1");
|
||||
params.push("id=" + id);
|
||||
params.push("x=" + pos_x);
|
||||
|
@ -111,11 +142,7 @@ function set_center(id, event) {
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
success: function(data) {
|
||||
if (data["correct"]) {
|
||||
}
|
||||
}
|
||||
url: "ajax.php"
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -164,7 +191,7 @@ function delete_link(
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
url: "ajax.php",
|
||||
success: function(data) {
|
||||
if (data["correct"]) {
|
||||
var found = -1;
|
||||
|
@ -222,7 +249,7 @@ function update_fictional_node(id_db_node) {
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
url: "ajax.php",
|
||||
success: function(data) {
|
||||
if (data["correct"]) {
|
||||
$("#dialog_node_edit").dialog("close");
|
||||
|
@ -262,7 +289,7 @@ function update_node_name(id_db_node) {
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
url: "ajax.php",
|
||||
success: function(data) {
|
||||
if (data["correct"]) {
|
||||
$("#dialog_node_edit").dialog("close");
|
||||
|
@ -308,13 +335,13 @@ function change_shape(id_db_node) {
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
url: "ajax.php",
|
||||
success: function(data) {
|
||||
$("#shape_icon_in_progress").css("display", "none");
|
||||
if (data["correct"]) {
|
||||
$("#shape_icon_correct").css("display", "");
|
||||
|
||||
count = graph.nodes.length;
|
||||
var count = graph.nodes.length;
|
||||
|
||||
jQuery.each(graph.nodes, function(i, element) {
|
||||
if (element.id_db == id_db_node) {
|
||||
|
@ -364,6 +391,7 @@ function change_shape(id_db_node) {
|
|||
return d.y - d.image_height / 2;
|
||||
})
|
||||
.attr("width", function(d) {
|
||||
console.log(d);
|
||||
return node_radius / 0.8;
|
||||
})
|
||||
.attr("height", function(d) {
|
||||
|
@ -585,7 +613,7 @@ function update_link(row_index, id_link) {
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
url: "ajax.php",
|
||||
success: function(data) {
|
||||
$(".edit_icon_progress_" + row_index).css("display", "none");
|
||||
|
||||
|
@ -607,12 +635,10 @@ function update_link(row_index, id_link) {
|
|||
"']"
|
||||
).prop("selected", true);
|
||||
|
||||
var id = "";
|
||||
var index = -1;
|
||||
$.each(graph.links, function(j, link) {
|
||||
if (link["id_db"] == id_link) {
|
||||
index = j;
|
||||
id = String(id_link);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -706,7 +732,7 @@ function move_to_networkmap(node) {
|
|||
data: params.join("&"),
|
||||
dataType: "json",
|
||||
type: "POST",
|
||||
url: (action = "ajax.php"),
|
||||
url: "ajax.php",
|
||||
success: function(data) {
|
||||
if (data["correct"]) {
|
||||
window.location =
|
||||
|
@ -726,6 +752,7 @@ function edit_node(data_node, dblClick) {
|
|||
|
||||
//Only select one node
|
||||
var selection = d3.selectAll(".node_selected");
|
||||
var id;
|
||||
|
||||
if (selection[0].length == 1) {
|
||||
edit_node = selection[0].pop();
|
||||
|
@ -746,8 +773,8 @@ function edit_node(data_node, dblClick) {
|
|||
.select(edit_node)
|
||||
.attr("id")
|
||||
.replace("id_node_", "");
|
||||
id_networkmap_lenght = networkmap_id.toString().length;
|
||||
id_node_length = id.length - id_networkmap_lenght;
|
||||
var id_networkmap_lenght = networkmap_id.toString().length;
|
||||
var id_node_length = id.length - id_networkmap_lenght;
|
||||
id = id.substring(0, id_node_length);
|
||||
node_selected = graph.nodes[id];
|
||||
|
||||
|
|
|
@ -70,8 +70,8 @@ if (enterprise_installed()) {
|
|||
$name = (string) get_parameter('name', '');
|
||||
|
||||
// Default size values
|
||||
$width = 4000;
|
||||
$height = 4000;
|
||||
$width = $config['networkmap_max_width'];
|
||||
$height = $config['networkmap_max_width'];
|
||||
|
||||
$method = (string) get_parameter('method', 'fdp');
|
||||
|
||||
|
@ -232,8 +232,8 @@ if ($new_networkmap || $save_networkmap) {
|
|||
$name = (string) get_parameter('name', '');
|
||||
|
||||
// Default size values
|
||||
$width = 4000;
|
||||
$height = 4000;
|
||||
$width = $config['networkmap_max_width'];
|
||||
$height = $config['networkmap_max_width'];
|
||||
|
||||
$method = (string) get_parameter('method', 'fdp');
|
||||
|
||||
|
|
Loading…
Reference in New Issue