From 5cce7ac2d00d7cb67aa6a74c4bd01cb92c5cf813 Mon Sep 17 00:00:00 2001 From: Arturo Gonzalez Date: Wed, 15 Feb 2017 10:29:45 +0100 Subject: [PATCH] Fixed interface links editor in networkmaps. Ticket #260 --- .../functions_pandora_networkmap.js | 163 +++++++++++++----- 1 file changed, 117 insertions(+), 46 deletions(-) diff --git a/pandora_console/include/javascript/functions_pandora_networkmap.js b/pandora_console/include/javascript/functions_pandora_networkmap.js index 9bea9f1f6b..5468bdef0f 100644 --- a/pandora_console/include/javascript/functions_pandora_networkmap.js +++ b/pandora_console/include/javascript/functions_pandora_networkmap.js @@ -141,7 +141,7 @@ function delete_link(source_id, source_module_id, target_id, target_module_id, i url: action="ajax.php", success: function (data) { if (data['correct']) { - found = -1; + var found = -1; jQuery.each(graph.links, function(i, element) { if (element.id_db == id_link) { @@ -152,6 +152,27 @@ function delete_link(source_id, source_module_id, target_id, target_module_id, i graph.links.splice(found, 1); } + $("#layer_graph_links_" + networkmap_id).remove(); + $("#layer_graph_nodes_" + networkmap_id).remove(); + + window.layer_graph_links = window.layer_graph + .append("g") + .attr("id", "layer_graph_links_" + networkmap_id); + window.layer_graph_nodes = window.layer_graph + .append("g") + .attr("id", "layer_graph_nodes_" + networkmap_id); + + force.nodes(graph.nodes) + .links(graph.links) + .start(); + + window.node = layer_graph_nodes.selectAll(".node"); + window.link = layer_graph_links.selectAll(".link"); + + draw_elements_graph(); + init_drag_and_drop(); + set_positions_graph(); + draw_elements_graph(); set_positions_graph(); } @@ -484,7 +505,7 @@ function update_link(row_index, id_link) { params.push("source_text=" + text_source_interface); params.push("target_text=" + text_target_interface); params.push("page=enterprise/operation/agentes/pandora_networkmap.view"); - + jQuery.ajax ({ data: params.join ("&"), dataType: 'json', @@ -500,47 +521,69 @@ function update_link(row_index, id_link) { .prop("selected", true); $("select[name='interface_target_" + row_index + "'] option[value='" + interface_target + "']") .prop("selected", true); - - jQuery.each(graph.links, function(j, link) { + + var id = ""; + var index = -1; + $.each(graph.links, function(j, link) { if (link['id_db'] == id_link) { - - var temp_link = {}; - temp_link["id_db"] = String(id_link); - if (data['type_source'] == 1) { - temp_link["arrow_start"] = "module"; - temp_link["id_module_start"] = interface_source; - } - else { - temp_link["arrow_start"] = ""; - temp_link["id_agent_start"] = interface_source; - temp_link["id_module_start"] = 0; - } - if (data['type_target'] == 1) { - temp_link["arrow_end"] = "module"; - temp_link["id_module_end"] = interface_target; - } - else { - temp_link["arrow_end"] = ""; - temp_link["id_agent_end"] = interface_target; - temp_link["id_module_end"] = 0; - } - temp_link["status_start"] = "0"; - temp_link["status_end"] = "0"; - - jQuery.each(graph.nodes, function(k, node) { - if (node['id_agent'] == data['id_db_target']) { - temp_link["target"] = graph.nodes[k]; - } - if (node['id_agent'] == data['id_db_source']) { - temp_link["source"] = graph.nodes[k]; - } - }); - graph.links.splice(j, 1, temp_link); + index = j; + id = String(id_link); } }); - - //graph.links.push(temp_link); + delete_link_from_id(index); + + var temp_link = {}; + temp_link["id_db"] = String(data['id_db_link']); + if (data['type_source'] == 1) { + temp_link["arrow_start"] = "module"; + temp_link["id_module_start"] = interface_source; + } + else { + temp_link["arrow_start"] = ""; + temp_link["id_agent_start"] = interface_source; + temp_link["id_module_start"] = 0; + } + if (data['type_target'] == 1) { + temp_link["arrow_end"] = "module"; + temp_link["id_module_end"] = interface_target; + } + else { + temp_link["arrow_end"] = ""; + temp_link["id_agent_end"] = interface_target; + temp_link["id_module_end"] = 0; + } + temp_link["status_start"] = "0"; + temp_link["status_end"] = "0"; + + $.each(graph.nodes, function(k, node) { + if (node['id_agent'] == data['id_db_target']) { + temp_link["target"] = graph.nodes[k]; + } + if (node['id_agent'] == data['id_db_source']) { + temp_link["source"] = graph.nodes[k]; + } + }); + + add_new_link(temp_link); + + $("#layer_graph_links_" + networkmap_id).remove(); + $("#layer_graph_nodes_" + networkmap_id).remove(); + + window.layer_graph_links = window.layer_graph + .append("g") + .attr("id", "layer_graph_links_" + networkmap_id); + window.layer_graph_nodes = window.layer_graph + .append("g") + .attr("id", "layer_graph_nodes_" + networkmap_id); + + force.nodes(graph.nodes) + .links(graph.links) + .start(); + + window.node = layer_graph_nodes.selectAll(".node"); + window.link = layer_graph_links.selectAll(".link"); + draw_elements_graph(); init_drag_and_drop(); set_positions_graph(); @@ -552,6 +595,14 @@ function update_link(row_index, id_link) { }); } +function delete_link_from_id (index) { + graph.links.splice(index, 1); +} + +function add_new_link (new_link) { + graph.links.push(new_link); +} + function edit_node(data, dblClick) { if (enterprise_installed) { var flag_edit_node = true; @@ -603,7 +654,6 @@ function edit_node(data, dblClick) { dataType: 'json', type: 'POST', url: action="ajax.php", - async: false, success: function (data) { var adressess = ""; for (adress in data['adressess']) { @@ -626,7 +676,6 @@ function edit_node(data, dblClick) { dataType: 'json', type: 'POST', url: action="ajax.php", - async: false, success: function (data) { if (data.length == 0) { $("#interface_information").find('tbody') @@ -718,7 +767,10 @@ function edit_node(data, dblClick) { .attr('class', "edit_icon_fail_" + i); $(".edit_icon_link", template_relation_row) .attr('class', "edit_icon_link_" + i) - .attr('href', 'javascript: update_link(' + i + "," + link_each.id_db + ');'); + .click(function() { + update_link(i, link_each.id_db); + } + ); var params = []; params.push("get_intefaces=1"); @@ -730,7 +782,6 @@ function edit_node(data, dblClick) { dataType: 'json', type: 'POST', url: action="ajax.php", - async: false, success: function (data) { if (data['correct']) { $("select[name='interface_source_" + i + "']", template_relation_row).empty(); @@ -761,7 +812,6 @@ function edit_node(data, dblClick) { dataType: 'json', type: 'POST', url: action="ajax.php", - async: false, success: function (data) { if (data['correct']) { $("select[name='interface_target_" + i + "']", template_relation_row).empty(); @@ -2749,8 +2799,28 @@ function draw_elements_graph() { link = link.data(force.links(), function(d) { return d.source.id + networkmap_id + "-" + d.target.id + networkmap_id; }); + link_temp = link.enter() - .append("g"); + .append("g") + .attr("id", function(d) { + return "link_id_" + d.id_db + networkmap_id; + }) + .attr("class", function(d) { + var holding_area_text = ""; + if ((d.source.state == 'holding_area') || + (d.target.state == 'holding_area')) { + + holding_area_text = " holding_area_link "; + } + + return "link " + + "source_" + d.source.id + networkmap_id + " " + + "target_" + d.target.id + networkmap_id + " " + + holding_area_text + + "id_module_start_" + d.id_module_start + " " + + "id_module_end_" + d.id_module_end; + }); + link.exit().remove(); link_temp.append("path") @@ -2869,6 +2939,7 @@ function draw_elements_graph() { }); node = node.data(force.nodes(), function(d) { return d.id;}); + node_temp = node.enter() .append("g") .attr("id", function(d) { @@ -3101,7 +3172,7 @@ function draw_elements_graph() { .classed('dragable_node', true) //own dragable .on("click", selected_node) .on("contextmenu", function(d) { show_menu("node", d);}); - + node.exit().remove(); }