static function addLogConnection($status, $port) { $pfNetworkPortConnectionLog = new PluginFusioninventoryNetworkPortConnectionLog(); $NetworkPort_NetworkPort = new NetworkPort_NetworkPort(); $input = array(); // Récupérer le port de la machine associé au port du switch // Récupérer le type de matériel $input["networkports_id_source"] = $port; $opposite_port = $NetworkPort_NetworkPort->getOppositeContact($port); if (!$opposite_port) { return; } $input['networkports_id_destination'] = $opposite_port; $input['date_mod'] = date("Y-m-d H:i:s"); if ($status == 'remove') { $input['creation'] = 0; } else { if ($status == 'make') { $input['creation'] = 1; } } $pfNetworkPortConnectionLog->add($input); }
/** * Get port opposite port ID if linked item * * @param $ID networking port ID * * @return ID of the NetworkPort found, false if not found **/ function getContact($ID) { $wire = new NetworkPort_NetworkPort(); if ($contact_id = $wire->getOppositeContact($ID)) { return $contact_id; } return false; }
/** * Remove all connections on a hub * * @param $hub_id integer id of the hub * @param $pfNetworkport object Informations of the network port * * @return nothing * **/ function releaseHub($hub_id, $pfNetworkport, $a_mac) { $Netport = new NetworkPort(); $nn = new NetworkPort_NetworkPort(); $a_macOnSwitch = array(); foreach ($a_mac as $ifmac) { $a_macOnSwitch["{$ifmac}"] = 1; } // get all ports of hub $releasePorts = array(); $a_ports = $Netport->find("`items_id`='" . $hub_id . "' AND `itemtype`='" . $this->getType() . "' " . "AND (`name` != 'Link' OR `name` IS NULL)"); foreach (array_keys($a_ports) as $ports_id) { $id = $nn->getOppositeContact($ports_id); if ($id) { $Netport->getFromDB($id); if (!isset($a_macOnSwitch[$Netport->fields["mac"]])) { $releasePorts[$ports_id] = 1; } } } }
/** * Function used to detect if port has multiple mac connected */ static function isPortHasMultipleMac($networkports_id) { $nw = new NetworkPort_NetworkPort(); $networkPort = new NetworkPort(); $is_multiple = FALSE; $opposite_port = $nw->getOppositeContact($networkports_id); if ($opposite_port != "" && $opposite_port != 0) { $networkPort->getFromDB($opposite_port); if ($networkPort->fields["itemtype"] == 'PluginFusioninventoryUnmanaged') { $pfUnmanaged = new PluginFusioninventoryUnmanaged(); if ($pfUnmanaged->getFromDB($networkPort->fields['items_id'])) { if ($pfUnmanaged->fields['hub'] == 1) { $is_multiple = TRUE; } } } } return $is_multiple; }
/** * 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>"; }
/** * @test */ public function NetworkPortConnection() { global $DB; $DB->connect(); $networkPort = new NetworkPort(); $networkPort_NetworkPort = new NetworkPort_NetworkPort(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $a_networkports = $networkPort->find("`logical_number`='10001'"); $this->assertEquals(1, count($a_networkports), 'Number of networkport 10001 may be 1'); $a_networkport = current($a_networkports); $opposites_id = $networkPort_NetworkPort->getOppositeContact($a_networkport['id']); $networkPort->getFromDB($opposites_id); $pfUnmanaged->getFromDB($networkPort->fields['items_id']); $this->assertEquals(0, $pfUnmanaged->fields['hub'], 'May not be a hub'); $a_networkports = $networkPort->find("`items_id`='" . $pfUnmanaged->fields['id'] . "'\n AND `itemtype`='PluginFusioninventoryUnmanaged'"); $this->assertEquals(1, count($a_networkports), 'Number of networkport of unknown ports may be 1'); }
/** * Display a connection of a networking port * * @param $device1 the device of the port * @param $netport to be displayed * @param $withtemplate **/ static function showConnection(&$device1, &$netport, $withtemplate = '') { global $CFG_GLPI, $LANG; if (!$device1->can($device1->fields["id"], 'r')) { return false; } $contact = new NetworkPort_NetworkPort(); $canedit = $device1->can($device1->fields["id"], 'w'); $ID = $netport->fields["id"]; if ($contact_id = $contact->getOppositeContact($ID)) { $netport->getFromDB($contact_id); if (class_exists($netport->fields["itemtype"])) { $device2 = new $netport->fields["itemtype"](); if ($device2->getFromDB($netport->fields["items_id"])) { echo "\n<table width='100%'>\n"; echo "<tr " . ($device2->fields["is_deleted"] ? "class='tab_bg_2_2'" : "") . ">"; echo "<td><strong>"; if ($device2->can($device2->fields["id"], 'r')) { echo $netport->getLink(); echo "</strong>\n"; showToolTip($netport->fields['comment']); echo " " . $LANG['networking'][25] . " <strong>"; echo $device2->getLink(); echo "</strong>"; if ($device1->fields["entities_id"] != $device2->fields["entities_id"]) { echo "<br>(" . Dropdown::getDropdownName("glpi_entities", $device2->getEntityID()) . ")"; } // 'w' on dev1 + 'r' on dev2 OR 'r' on dev1 + 'w' on dev2 if ($canedit || $device2->can($device2->fields["id"], 'w')) { echo "</td>\n<td class='right'><strong>"; if ($withtemplate != 2) { echo "<a href=\"" . $netport->getFormURL() . "?disconnect=" . "disconnect&id=" . $contact->fields['id'] . "\">" . $LANG['buttons'][10] . "</a>"; } else { " "; } echo "</strong>"; } } else { if (rtrim($netport->fields["name"]) != "") { echo $netport->fields["name"]; } else { echo $LANG['common'][0]; } echo "</strong> " . $LANG['networking'][25] . " <strong>"; echo $device2->getName(); echo "</strong><br>(" . Dropdown::getDropdownName("glpi_entities", $device2->getEntityID()) . ")"; } echo "</td></tr></table>\n"; } } } else { echo "\n<table width='100%'><tr>"; if ($canedit) { echo "<td class='left'>"; if ($withtemplate != 2 && $withtemplate != 1) { self::dropdownConnect($ID, array('name' => 'dport', 'entity' => $device1->fields["entities_id"], 'entity_sons' => $device1->isRecursive())); } else { echo " "; } echo "</td>\n"; } echo "<td><div id='not_connected_display{$ID}'>" . $LANG['connect'][1] . "</div></td>"; echo "</tr></table>\n"; } }
echo "<tr><th>" . $LANG['common'][15] . "</th>"; echo "<th>" . $LANG['reports'][52] . "</th>"; echo "<th>" . $LANG['networking'][14] . "</th>"; echo "<th>" . $LANG['reports'][46] . "</th>"; echo "<th>" . $LANG['device_iface'][2] . "</th>"; echo "<th>" . $LANG['reports'][47] . "</th>"; echo "<th>" . $LANG['networking'][14] . "</th>"; echo "<th>" . $LANG['device_iface'][2] . "</th>"; echo "<th>" . $LANG['reports'][36] . "</th>"; echo "</tr>"; while ($ligne = $DB->fetch_array($result)) { $prise = $ligne['prise']; $ID = $ligne['id']; $lieu = Dropdown::getDropdownName("glpi_locations", $ID); $nw = new NetworkPort_NetworkPort(); $networkports_id_1 = $nw->getOppositeContact($ligne['IDport']); $np = new NetworkPort(); $ordi = ""; $ip2 = ""; $mac2 = ""; $portordi = ""; if ($networkports_id_1) { $np->getFromDB($networkports_id_1); $ordi = ''; if (class_exists($np->fields["itemtype"])) { $item = new $np->fields["itemtype"](); if ($item->getFromDB($np->fields["items_id"])) { $ordi = $item->getName(); } } $ip2 = $np->fields['ip'];
/** * @param $values * @param $add (true by default) * @param $rights array **/ function processAfterInsertOrUpdate($values, $add = true, $rights = array()) { global $DB; //Should the port be connected to another one ? $use_name = isset($values['NetworkPort']["netname"]) || !empty($values['NetworkPort']["netname"]); $use_logical_number = isset($values['NetworkPort']["netport"]) || !empty($values['NetworkPort']["netport"]); $use_mac = isset($values['NetworkPort']["netmac"]) || !empty($values['NetworkPort']["netmac"]); if (!$use_name && !$use_logical_number && !$use_mac) { return false; } // Find port in database $sql = "SELECT `glpi_networkports`.`id`\n FROM `glpi_networkports`, `glpi_networkequipments`\n WHERE `glpi_networkports`.`itemtype`='NetworkEquipment'\n AND `glpi_networkports`.`items_id` = `glpi_networkequipments`.`id`\n AND `glpi_networkequipments`.`is_template` = '0'\n AND `glpi_networkequipments`.`entities_id`\n = '" . $values['NetworkPort']["entities_id"] . "'"; if ($use_name) { $sql .= " AND `glpi_networkequipments`.`name` = '" . $values['NetworkPort']["netname"] . "'"; } if ($use_logical_number) { $sql .= " AND `glpi_networkports`.`logical_number` = '" . $values['NetworkPort']["netport"] . "'"; } if ($use_mac) { $sql .= " AND `glpi_networkports`.`mac` = '" . $values['NetworkPort']["netmac"] . "'"; } $res = $DB->query($sql); //if at least one parameter is given $nb = $DB->numrows($res); if ($nb == 1) { //Get data for this port $netport = $DB->fetch_array($res); $netport_netport = new NetworkPort_NetworkPort(); //If this port already connected to another one ? if (!$netport_netport->getOppositeContact($netport['id'])) { //No, add a new port to port connection $tmp['networkports_id_1'] = $values['NetworkPort']['id']; $tmp['networkports_id_2'] = $netport['id']; $netport_netport->add($tmp); } } //TODO add injection warning if no port found or more than one }
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)); } } } } } }
function Query($ID, $PluginArchiresView, $for) { global $DB; $this->getFromDB($ID); $types = array(); $devices = array(); $ports = array(); if ($PluginArchiresView->fields["computer"] != 0) { $types[] = 'Computer'; } if ($PluginArchiresView->fields["printer"] != 0) { $types[] = 'Printer'; } if ($PluginArchiresView->fields["peripheral"] != 0) { $types[] = 'Peripheral'; } if ($PluginArchiresView->fields["phone"] != 0) { $types[] = 'Phone'; } if ($PluginArchiresView->fields["networking"] != 0) { $types[] = 'NetworkEquipment'; } $query_switch = "SELECT `glpi_networkports`.`name` AS port,\n `glpi_networkports`.`id` AS idport\n FROM `glpi_networkequipments`\n LEFT JOIN `glpi_networkports`\n ON (`glpi_networkports`.`itemtype` = 'NetworkEquipment'\n AND `glpi_networkports`.`items_id` = `glpi_networkequipments`.`id`)\n WHERE `glpi_networkequipments`.`id` = '" . $this->fields["networkequipments_id"] . "'\n AND `glpi_networkequipments`.`is_deleted` = '0'\n AND `glpi_networkequipments`.`is_template` = '0'" . getEntitiesRestrictRequest(" AND", "glpi_networkequipments"); if ($result_switch = $DB->query($query_switch)) { while ($ligne = $DB->fetch_array($result_switch)) { $port = $ligne['port']; $nw = new NetworkPort_NetworkPort(); $end = $nw->getOppositeContact($ligne['idport']); if ($end) { foreach ($types as $key => $val) { $itemtable = getTableForItemType($val); $fieldsnp = "`np`.`id`, `np`.`items_id`, `np`.`logical_number`,\n `np`.`instantiation_type`, `glpi_ipaddresses`.`name` AS ip,\n `ipn`.`netmask`, `np`.`name` AS namep"; $query = "SELECT `{$itemtable}`.`id` AS idc, {$fieldsnp} , `{$itemtable}`.`name`,\n `{$itemtable}`.`" . getForeignKeyFieldForTable(getTableForItemType($val . "Type")) . "`\n AS `type`,\n `{$itemtable}`.`users_id`, `{$itemtable}`.`groups_id`,\n `{$itemtable}`.`contact`, `{$itemtable}`.`states_id`,\n `{$itemtable}`.`entities_id`,`{$itemtable}`.`locations_id`\n FROM `glpi_networkports` np,\n `{$itemtable}`,\n `glpi_ipnetworks` AS ipn\n LEFT JOIN `glpi_networknames`\n ON (`glpi_networknames`.`itemtype` = 'NetworkPort'\n AND `glpi_networkports`.`id` = `glpi_networknames`.`items_id`)\n LEFT JOIN `glpi_ipaddresses`\n ON (`glpi_ipaddresses`.`itemtype` = 'NetworkName'\n AND `glpi_networknames`.`id` = `glpi_ipaddresses`.`items_id`)\n WHERE `glpi_networkports`.`instantiation_type` = 'NetworkPortEthernet' "; if ($this->fields["vlans_id"] > "0") { $query .= ", `glpi_networkports_vlans` nv"; } $query .= " WHERE `np`.`itemtype` = '{$val}'\n AND `np`.`items_id` = `{$itemtable}`.`id`\n AND `np`.`id` ='{$end}'\n AND `{$itemtable}`.`is_deleted` = '0'\n AND `{$itemtable}`.`is_template` = '0'" . getEntitiesRestrictRequest(" AND", $itemtable); if ($this->fields["vlans_id"] > "0") { $query .= " AND `nv`.`networkports_id` = `np`.`id`\n AND vlans_id= '" . $this->fields["vlans_id"] . "'"; } if ($this->fields["networks_id"] > "0" && $val != 'Phone' && $val != 'Peripheral') { $query .= " AND `{$itemtable}`.`networks_id` = '" . $this->fields["networks_id"] . "'"; } if ($this->fields["states_id"] > "0") { $query .= " AND `{$itemtable}`.`states_id` = '" . $this->fields["states_id"] . "'"; } if ($this->fields["groups_id"] > "0") { $query .= " AND `{$itemtable}`.`groups_id` = '" . $this->fields["groups_id"] . "'"; } //types $PluginArchiresQueryType = new PluginArchiresQueryType(); $query .= $PluginArchiresQueryType->queryTypeCheck($this->getType(), $ID, $val); $query .= "ORDER BY `np`.`ip` ASC "; if ($result = $DB->query($query)) { while ($data = $DB->fetch_array($result)) { if ($PluginArchiresView->fields["display_state"] != 0) { $devices[$val][$data["items_id"]]["states_id"] = $data["states_id"]; } $devices[$val][$data["items_id"]]["type"] = $data["type"]; $devices[$val][$data["items_id"]]["name"] = $data["name"]; $devices[$val][$data["items_id"]]["users_id"] = $data["users_id"]; $devices[$val][$data["items_id"]]["groups_id"] = $data["groups_id"]; $devices[$val][$data["items_id"]]["contact"] = $data["contact"]; $devices[$val][$data["items_id"]]["entity"] = $data["entities_id"]; $devices[$val][$data["items_id"]]["locations_id"] = $data["locations_id"]; $ports[$data["id"]]["items_id"] = $data["items_id"]; $ports[$data["id"]]["logical_number"] = $data["logical_number"]; $ports[$data["id"]]["networkinterfaces_id"] = $data["networkinterfaces_id"]; $ports[$data["id"]]["ip"] = $data["ip"]; $ports[$data["id"]]["netmask"] = $data["netmask"]; $ports[$data["id"]]["namep"] = $data["namep"]; $ports[$data["id"]]["idp"] = $data["id"]; $ports[$data["id"]]["itemtype"] = $val; //ip if ($data["ip"]) { if (!empty($devices[$val][$data["items_id"]]["ip"])) { $devices[$val][$data["items_id"]]["ip"] .= " - "; $devices[$val][$data["items_id"]]["ip"] .= $data["ip"]; } else { $devices[$val][$data["items_id"]]["ip"] = $data["ip"]; } } //fin ip } } } } } } //The networking $query = "SELECT `n`.`id` AS `idn`, `np`.`id`, `np`.`items_id`, `np`.`logical_number`,\n `np`.`networkinterfaces_id` , `glpi_ipaddresses`.`name` AS ip,\n `np`.`name` AS `namep`,\n `n`.`ip` AS `nip`,`ipn`.`netmask`, `n`.`name`,\n `n`.`networkequipmenttypes_id` AS `type`, `n`.`users_id`, `n`.`groups_id`,\n `n`.`contact`, `n`.`states_id`, `n`.`entities_id`,`n`.`locations_id`\n FROM `glpi_networkports` `np`, `glpi_networkequipments` `n`,\n `glpi_ipnetworks` AS ipn\n LEFT JOIN `glpi_networknames`\n ON (`glpi_networknames`.`itemtype` = 'NetworkPort'\n AND `glpi_networkports`.`id` = `glpi_networknames`.`items_id`)\n LEFT JOIN `glpi_ipaddresses`\n ON (`glpi_ipaddresses`.`itemtype` = 'NetworkName'\n AND `glpi_networknames`.`id` = `glpi_ipaddresses`.`items_id`)"; if ($this->fields["vlans_id"] > "0") { $query .= ", `glpi_networkports_vlans` nv "; } $query .= "WHERE `np`.`itemtype` = 'NetworkEquipment'\n AND `np`.`items_id` = `n`.`id`\n AND `n`.`id` = '" . $this->fields["networkequipments_id"] . "'\n AND `n`.`is_deleted` = '0'\n AND `n`.`is_template` = '0'"; if ($this->fields["vlans_id"] > "0") { $query .= " AND `nv`.`networkports_id` = `np`.`id`\n AND vlans_id= '" . $this->fields["vlans_id"] . "' "; } $query .= "ORDER BY `np`.`ip` ASC "; if ($result = $DB->query($query)) { while ($data = $DB->fetch_array($result)) { if ($PluginArchiresView->fields["display_state"] != 0) { $devices['NetworkEquipment'][$data["items_id"]]["states_id"] = $data["states_id"]; } $devices['NetworkEquipment'][$data["items_id"]]["name"] = $data["name"]; $devices['NetworkEquipment'][$data["items_id"]]["type"] = $data["type"]; $devices['NetworkEquipment'][$data["items_id"]]["users_id"] = $data["users_id"]; $devices['NetworkEquipment'][$data["items_id"]]["groups_id"] = $data["groups_id"]; $devices['NetworkEquipment'][$data["items_id"]]["contact"] = $data["contact"]; $devices['NetworkEquipment'][$data["items_id"]]["ip"] = $data["nip"]; $devices['NetworkEquipment'][$data["items_id"]]["entity"] = $data["entities_id"]; $devices['NetworkEquipment'][$data["items_id"]]["locations_id"] = $data["locations_id"]; $ports[$data["id"]]["items_id"] = $data["items_id"]; $ports[$data["id"]]["logical_number"] = $data["logical_number"]; $ports[$data["id"]]["networkinterfaces_id"] = $data["networkinterfaces_id"]; $ports[$data["id"]]["ip"] = $data["ip"]; $ports[$data["id"]]["netmask"] = $data["netmask"]; $ports[$data["id"]]["namep"] = $data["namep"]; $ports[$data["id"]]["idp"] = $data["id"]; $ports[$data["id"]]["itemtype"] = 'NetworkEquipment'; } } if ($for) { return $devices; } return $ports; }