/** * Display detail networkport based on glpi core networkport and fusioninventory * networkport * * @param array $data with id ant fusionid * @param boolean $monitoring true if monitoring installed && actived * @param boolean $aggrega true if this port is aggregate port * * @return nothing */ function showNetworkPortDetail($data, $monitoring, $aggrega = 0) { global $CFG_GLPI, $DB; $nw = new NetworkPort_NetworkPort(); $networkName = new NetworkName(); $networkPort = new NetworkPort(); $pfNetworkPort = new PluginFusioninventoryNetworkPort(); $iPAddress = new IPAddress(); $networkPort->getFromDB($data['id']); $pfNetworkPort->getFromDB($data['fusionid']); $background_img = ""; if ($pfNetworkPort->fields["trunk"] == "1" && (strstr($pfNetworkPort->fields["ifstatus"], "up") || $pfNetworkPort->fields["ifstatus"] == 1)) { $background_img = " style='background-image: url(\"" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/port_trunk.png\"); '"; } else { if (PluginFusioninventoryNetworkPort::isPortHasMultipleMac($data['id']) && (strstr($pfNetworkPort->fields["ifstatus"], "up") || $pfNetworkPort->fields["ifstatus"] == 1)) { $background_img = " style='background-image: url(\"" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/multiple_mac_addresses.png\"); '"; } else { if (strstr($pfNetworkPort->fields["ifstatus"], "up") || $pfNetworkPort->fields["ifstatus"] == 1) { $background_img = " style='background-image: url(\"" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/connected_trunk.png\"); '"; } } } echo "<tr class='tab_bg_1 center' height='40'" . $background_img . ">"; if ($aggrega) { echo "<td style='background-color: #f2f2f2;'></td><td>"; } if (!$aggrega) { if ($networkPort->fields['instantiation_type'] == 'NetworkPortAggregate') { echo "<td>"; } else { echo "<td colspan='2'>"; } } echo "<a href='networkport.form.php?id=" . $networkPort->fields["id"] . "'>" . $networkPort->fields["name"] . "</a>"; Html::showToolTip($pfNetworkPort->fields['ifdescr']); if (!$aggrega) { if ($networkPort->fields['instantiation_type'] == 'NetworkPortAggregate') { echo "<td><i><font style='color: grey'>" . __('Aggregation port') . "</font></i></td>"; } } if ($monitoring == '1') { echo "<td>"; $state = PluginMonitoringNetworkport::isMonitoredNetworkport($data['id']); if (Session::haveRight("plugin_monitoring_componentscatalog", UPDATE)) { $checked = ''; if ($state) { $checked = 'checked'; } echo "<input type='checkbox' name='networkports_id[]' value='" . $data['id'] . "' " . $checked . "/>"; } else { if (Session::haveRight("plugin_monitoring_componentscatalog", READ)) { echo Dropdown::getYesNo($state); } } echo "</td>"; } $a_pref = DisplayPreference::getForTypeUser('PluginFusioninventoryNetworkport', Session::getLoginUserID()); foreach ($a_pref as $data_array) { switch ($data_array) { case 3: echo "<td>" . $pfNetworkPort->fields["ifmtu"] . "</td>"; break; case 5: echo "<td>" . $this->byteSize($pfNetworkPort->fields["ifspeed"], 1000) . "bps</td>"; break; case 6: echo "<td>"; if (strstr($pfNetworkPort->fields["ifstatus"], "up") || strstr($pfNetworkPort->fields["ifinternalstatus"], "1")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/pics/greenbutton.png'/>"; } else { if (strstr($pfNetworkPort->fields["ifstatus"], "down") || strstr($pfNetworkPort->fields["ifinternalstatus"], "2")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/pics/redbutton.png'/>"; } else { if (strstr($pfNetworkPort->fields["ifstatus"], "testing") || strstr($pfNetworkPort->fields["ifinternalstatus"], "3")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/yellowbutton.png'/>"; } } } echo "</td>"; break; case 7: echo "<td>" . $pfNetworkPort->fields["iflastchange"] . "</td>"; break; case 8: echo "<td>"; if ($pfNetworkPort->fields["ifinoctets"] == "0") { echo "-"; } else { echo $this->byteSize($pfNetworkPort->fields["ifinoctets"], 1000) . "o"; } echo " / "; if ($pfNetworkPort->fields["ifinoctets"] == "0") { echo "-"; } else { echo $this->byteSize($pfNetworkPort->fields["ifoutoctets"], 1000) . "o"; } echo "</td>"; break; case 9: $color = ''; if ($pfNetworkPort->fields["ifinerrors"] != "0" || $pfNetworkPort->fields["ifouterrors"] != "0") { $color = "background='#cf9b9b' class='tab_bg_1_2'"; } if ($pfNetworkPort->fields["ifinerrors"] == "0") { echo "<td " . $color . ">-"; } else { echo "<td " . $color . ">"; echo $pfNetworkPort->fields["ifinerrors"]; } echo " / "; if ($pfNetworkPort->fields["ifouterrors"] == "0") { echo "-"; } else { echo $pfNetworkPort->fields["ifouterrors"]; } echo "</td>"; break; case 10: if ($pfNetworkPort->fields["portduplex"] == 2) { echo "<td background='#cf9b9b' class='tab_bg_1_2'>"; echo __('Half', 'fusioninventory'); echo '</td>'; } else { if ($pfNetworkPort->fields["portduplex"] == 3) { echo '<td>'; echo __('Full', 'fusioninventory'); echo '</td>'; } else { echo "<td></td>"; } } break; case 11: // ** internal mac echo "<td>" . $networkPort->fields["mac"] . "</td>"; break; case 13: // ** Mac address and link to device which are connected to this port $opposite_port = $nw->getOppositeContact($data["id"]); if ($opposite_port != "" && $opposite_port != 0) { $networkPortOpposite = new NetworkPort(); if ($networkPortOpposite->getFromDB($opposite_port)) { $data_device = $networkPortOpposite->fields; $item = new $data_device["itemtype"](); $item->getFromDB($data_device["items_id"]); $link1 = $item->getLink(1); $link = str_replace($item->getName(0), $data_device["mac"], $item->getLink()); // * GetIP $a_networknames = current($networkName->find("`itemtype`='NetworkPort'\n AND `items_id`='" . $item->getID() . "'", "", 1)); $a_ipaddresses = current($iPAddress->find("`itemtype`='NetworkName'\n AND `items_id`='" . $a_networknames['id'] . "'", "", 1)); $link2 = str_replace($item->getName(0), $a_ipaddresses['name'], $item->getLink()); if ($data_device["itemtype"] == 'PluginFusioninventoryUnmanaged') { $icon = $this->getItemtypeIcon($item->fields["item_type"]); if ($item->getField("accepted") == "1") { echo "<td style='background:#bfec75'\n class='tab_bg_1_2'>" . $icon . $link1; } else { echo "<td background='#cf9b9b'\n class='tab_bg_1_2'>" . $icon . $link1; } if (!empty($link)) { echo "<br/>" . $link; } if (!empty($link2)) { echo "<br/>" . $link2; } if ($item->getField("hub") == "1") { $this->displayHubConnections($data_device["items_id"], $background_img); } echo "</td>"; } else { $icon = $this->getItemtypeIcon($data_device["itemtype"]); echo "<td>" . $icon . $link1; if (!empty($link)) { echo "<br/>" . $link; } if (!empty($link2)) { echo "<br/>" . $link2; } if ($data_device["itemtype"] == 'Phone') { $query_devicephone = "SELECT *\n FROM `glpi_networkports`\n WHERE `itemtype`='Phone'\n AND `items_id`='" . $data_device["items_id"] . "'\n AND `id`!='" . $data_device["id"] . "'\n LIMIT 1"; $result_devicephone = $DB->query($query_devicephone); if ($DB->numrows($result_devicephone) > 0) { $data_devicephone = $DB->fetch_assoc($result_devicephone); $computer_ports_id = $nw->getOppositeContact($data_devicephone["id"]); if ($computer_ports_id) { $networkport = new NetworkPort(); $networkport->getFromDB($computer_ports_id); if ($networkport->fields['itemtype'] == 'Computer') { echo "<hr/>"; echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/computer_icon.png' " . "style='float:left'/> "; $computer = new Computer(); $computer->getFromDB($networkport->fields["items_id"]); $link1 = $computer->getLink(1); $link = str_replace($computer->getName(0), $networkport->fields["mac"], $computer->getLink()); $link2 = str_replace($computer->getName(0), $networkport->fields["ip"], $computer->getLink()); echo $icon . $link1; if (!empty($link)) { echo "<br/>" . $link; } if (!empty($link2)) { echo "<br/>" . $link2; } } } } } echo "</td>"; } } else { echo "<td></td>"; } } else { echo "<td></td>"; } break; case 14: // ** Connection status echo "<td>"; if (strstr($pfNetworkPort->fields["ifstatus"], "up") || strstr($pfNetworkPort->fields["ifstatus"], "1")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/wired_on.png'/>"; } else { if (strstr($pfNetworkPort->fields["ifstatus"], "down") || strstr($pfNetworkPort->fields["ifstatus"], "2")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/wired_off.png'/>"; } else { if (strstr($pfNetworkPort->fields["ifstatus"], "testing") || strstr($pfNetworkPort->fields["ifstatus"], "3")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/yellowbutton.png'/>"; } else { if (strstr($pfNetworkPort->fields["ifstatus"], "dormant") || strstr($pfNetworkPort->fields["ifstatus"], "5")) { echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/orangebutton.png'/>"; } } } } echo "</td>"; break; case 12: echo "<td>"; $canedit = Session::haveRight('networking', UPDATE); $used = array(); $query_vlan = "SELECT * FROM glpi_networkports_vlans\n WHERE networkports_id='" . $data["id"] . "'"; $result_vlan = $DB->query($query_vlan); if ($DB->numrows($result_vlan) > 0) { echo "<table cellpadding='0' cellspacing='0'>"; while ($line = $DB->fetch_array($result_vlan)) { $used[] = $line["vlans_id"]; $vlan = new Vlan(); $vlan->getFromDB($line["vlans_id"]); if ($line['tagged'] == '1') { $state = 'T'; } else { $state = 'U'; } echo "<tr><td>" . $vlan->fields['name'] . " [" . $vlan->fields['tag'] . "] " . $state; echo "</td><td>"; if ($canedit) { echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/networkport.form.php?unassign_vlan=unassigned&id=" . $line["id"] . "'>"; echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/delete.png\" alt='" . __('Delete', 'fusioninventory') . "' title='" . __('Delete', 'fusioninventory') . "'></a>"; } else { echo " "; } echo "</td>"; echo "</tr>"; } echo "</table>"; } else { echo " "; } echo "</td>"; break; case 15: echo "<td align='center'>"; if ($pfNetworkPort->fields['ifstatus'] == 1) { echo __('Connected'); } else { if ($pfNetworkPort->fields['lastup'] == "0000-00-00 00:00:00") { echo '-'; } else { $time = strtotime(date('Y-m-d H:i:s')) - strtotime($pfNetworkPort->fields['lastup']); echo Html::timestampToString($time, FALSE); } } echo "</td>"; break; case 16: echo "<td>" . $pfNetworkPort->fields["ifalias"] . "</td>"; break; } } echo "</tr>"; }
function importConnectionMac($a_portconnection, $networkports_id) { $wire = new NetworkPort_NetworkPort(); $networkPort = new NetworkPort(); $pfNetworkPort = new PluginFusioninventoryNetworkPort(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $a_snmpports = current($pfNetworkPort->find("`networkports_id`='" . $networkports_id . "'", "", 1)); $pfNetworkPort->getFromDB($a_snmpports['id']); $count = count($a_portconnection); $pfNetworkPort->loadNetworkport($networkports_id); if ($pfNetworkPort->getValue('trunk') != '1') { if ($count == '2') { // detect if phone IP is one of the 2 devices $phonecase = 0; $macNotPhone_id = 0; $macNotPhone = ''; $phonePort_id = 0; foreach ($a_portconnection as $ifmac) { $a_ports = $networkPort->find("`mac`='" . $ifmac . "'", "", 1); $a_port = current($a_ports); if ($a_port['itemtype'] == 'Phone') { // Connect phone on switch port and other (computer..) in this phone $phonePort_id = $a_port['id']; $phonecase++; } else { $macNotPhone_id = $a_port['id']; $macNotPhone = $ifmac; } } if ($phonecase == '1') { $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $phonePort_id)); $networkPort->getFromDB($phonePort_id); $Phone = new Phone(); $Phone->getFromDB($networkPort->fields['items_id']); $a_portsPhone = $networkPort->find("`items_id`='" . $networkPort->fields['items_id'] . "'\n AND `itemtype`='Phone'\n AND `name`='Link'", '', 1); $portLink_id = 0; if (count($a_portsPhone) == '1') { $a_portPhone = current($a_portsPhone); $portLink_id = $a_portPhone['id']; } else { // Create Port Link $input = array(); $input['name'] = 'Link'; $input['itemtype'] = 'Phone'; $input['items_id'] = $Phone->fields['id']; $input['entities_id'] = $Phone->fields['entities_id']; $portLink_id = $networkPort->add($input); } $opposite_id = FALSE; if ($opposite_id == $wire->getOppositeContact($portLink_id)) { if ($opposite_id != $macNotPhone_id) { $pfNetworkPort->disconnectDB($portLink_id); // disconnect this port $pfNetworkPort->disconnectDB($macNotPhone_id); // disconnect destination port } } if (!isset($macNotPhone_id)) { // Create unmanaged ports $unmanagedn_infos = array(); $unmanagedn_infos["name"] = ''; if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } $newID = $pfUnmanaged->add($unmanagedn_infos); // Add networking_port $port_add = array(); $port_add["items_id"] = $newID; $port_add["itemtype"] = 'PluginFusioninventoryUnmanaged'; $port_add['mac'] = $macNotPhone; $port_add['instantiation_type'] = "NetworkPortEthernet"; $macNotPhone_id = $networkPort->add($port_add); } $wire->add(array('networkports_id_1' => $portLink_id, 'networkports_id_2' => $macNotPhone_id)); } else { $pfUnmanaged->hubNetwork($pfNetworkPort, $a_portconnection); } } else { if ($count > 1) { // MultipleMac $pfUnmanaged->hubNetwork($pfNetworkPort, $a_portconnection); } else { // One mac on port foreach ($a_portconnection as $ifmac) { //Only 1 time $a_ports = $networkPort->find("`mac`='" . $ifmac . "' AND `logical_number`='1'", "", 1); if (count($a_ports) == 0) { $a_ports = $networkPort->find("`mac`='" . $ifmac . "'", "", 1); } if (count($a_ports) > 0) { $a_port = current($a_ports); $hub = 0; $id = $networkPort->getContact($a_port['id']); if ($id and $networkPort->getFromDB($id)) { if ($networkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { $pfUnmanaged->getFromDB($networkPort->fields['items_id']); if ($pfUnmanaged->fields['hub'] == '1') { $hub = 1; } } } $direct_id = $networkPort->getContact($networkports_id); if ($id and $id != $networkports_id and $hub == '0') { $directconnect = 0; if (!$direct_id) { $directconnect = 1; } else { $networkPort->getFromDB($direct_id); if ($networkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { // 1. Hub connected to this switch port $pfUnmanaged->connectPortToHub(array($a_port), $networkPort->fields['items_id']); } else { // 2. direct connection $directconnect = 1; } } if ($directconnect == '1') { $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $pfNetworkPort->disconnectDB($a_port['id']); // disconnect destination port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id'])); } } else { if ($id and $hub == '1') { $directconnect = 0; if (!$direct_id) { $directconnect = 1; } else { $networkPort->getFromDB($direct_id); $ddirect = $networkPort->fields; $networkPort->getFromDB($id); if ($ddirect['items_id'] == $networkPort->fields['items_id'] and $ddirect['itemtype'] == $networkPort->fields['itemtype']) { // 1.The hub where this device is connected is yet connected // to this switch port // => Do nothing } else { // 2. The hub where this device is connected to is not connected // to this switch port if ($ddirect['itemtype'] == 'PluginFusioninventoryUnmanaged') { // b. We have a hub connected to the switch port $pfUnmanaged->connectPortToHub(array($a_port), $ddirect['items_id']); } else { // a. We have a direct connexion to another device // (on the switch port) $directconnect = 1; } } } if ($directconnect == '1') { $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $pfNetworkPort->disconnectDB($a_port['id']); // disconnect destination port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id'])); } } else { if ($id) { // Yet connected } else { // Not connected $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id'])); } } } } else { // Create unmanaged device $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $input = array(); $manufacturer = PluginFusioninventoryInventoryExternalDB::getManufacturerWithMAC($ifmac); $input['name'] = $manufacturer; if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } $newID = $pfUnmanaged->add($input); $input['itemtype'] = "PluginFusioninventoryUnmanaged"; $input['items_id'] = $newID; $input['mac'] = $ifmac; $input['instantiation_type'] = "NetworkPortEthernet"; $newPortID = $networkPort->add($input); $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $newPortID)); } } } } } }