/** * \brief update all related elements after adding or updating an element * * splitInputForElements() prepare the data for adding or updating NetworkPortInstantiation and * NetworkName. This method will update NetworkPortInstantiation and NetworkName. I must be call * after NetworkPort::add or NetworkPort::update otherwise, the networkport ID will not be known * and the dependencies won't have a valid items_id field. * * @since version 0.84 * * @param $history (default 1) * * @see splitInputForElements() for preparing the input **/ function updateDependencies($history = 1) { $instantiation = $this->getInstantiation(); if ($instantiation !== false && count($this->input_for_instantiation) > 0) { $this->input_for_instantiation['networkports_id'] = $this->getID(); if ($instantiation->isNewID($instantiation->getID())) { $instantiation->add($this->input_for_instantiation, $history); } else { $instantiation->update($this->input_for_instantiation, $history); } } unset($this->input_for_instantiation); if (count($this->input_for_NetworkName) > 0 && !isset($_POST['several'])) { // Check to see if the NetworkName is empty $empty_networkName = empty($this->input_for_NetworkName['name']) && empty($this->input_for_NetworkName['fqdns_id']); if ($empty_networkName && is_array($this->input_for_NetworkName['_ipaddresses'])) { foreach ($this->input_for_NetworkName['_ipaddresses'] as $ip_address) { if (!empty($ip_address)) { $empty_networkName = false; break; } } } $network_name = new NetworkName(); if (isset($this->input_for_NetworkName['id'])) { if ($empty_networkName) { // If the NetworkName is empty, then delete it ! $network_name->delete($this->input_for_NetworkName, $history); } else { // Else, update it $network_name->update($this->input_for_NetworkName, $history); } } else { if (!$empty_networkName) { // Only create a NetworkName if it is not empty $this->input_for_NetworkName['itemtype'] = 'NetworkPort'; $this->input_for_NetworkName['items_id'] = $this->getID(); $network_name->add($this->input_for_NetworkName, $history); } } } unset($this->input_for_NetworkName); if (count($this->input_for_NetworkPortConnect) > 0) { if (isset($this->input_for_NetworkPortConnect['networkports_id_1']) && isset($this->input_for_NetworkPortConnect['networkports_id_2']) && !empty($this->input_for_NetworkPortConnect['networkports_id_2'])) { $nn = new NetworkPort_NetworkPort(); $nn->add($this->input_for_NetworkPortConnect); } } unset($this->input_for_NetworkPortConnect); }
/** * Connect this port to another one in DB * *@param $destination_port ID of destination port *@return nothing **/ function connectDB($destination_port = '') { global $DB; $ptap = new PluginFusioninventoryAgentsProcesses(); $queryVerif = "SELECT *\n FROM `glpi_networking_wire`\n WHERE `end1` IN ('" . $this->getValue('ID') . "', '" . $destination_port . "')\n AND `end2` IN ('" . $this->getValue('ID') . "', '" . $destination_port . "');"; if ($resultVerif = $DB->query($queryVerif)) { if ($DB->numrows($resultVerif) == "0") { // no existing connection between those 2 ports $this->disconnectDB($this->getValue('ID')); // disconnect this port $this->disconnectDB($destination_port); // disconnect destination port $nn = new NetworkPort_NetworkPort(); if ($nn->add(array('networkports_id_1' => $this->getValue('ID'), 'networkports_id_2' => $destination_port))) { //connect those 2 ports $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('query_nb_connections_created' => '1')); PluginFusioninventorySnmphistory::addLogConnection("make", $this->getValue('ID')); } } } }
function hubNetwork($p_oPort) { global $DB; $nw = new Netwire(); $np = new Netport(); $nn = new NetworkPort_NetworkPort(); // List of macs : $p_oPort->getPortsToConnect // recherche dans unknown_device table le hub // qui a un port connecte sur le $port_ID // Get port connected on switch port if ($ID = $nw->getOppositeContact($p_oPort->getValue('ID'))) { $np->getFromDB($ID); if ($np->fields["device_type"] == $this->type) { $this->getFromDB($np->fields["on_device"]); if ($this->fields["hub"] == "1") { // We will update ports and wire return; } } } // sinon on cree un nouveau unknown_device type hub // + creation des ports qui sont connectes aux mac $input = array(); $input['hub'] = "1"; $input['name'] = "hub"; $id_unknown = $this->add($input); $input = array(); $input["on_device"] = $id_unknown; $input["device_type"] = $this->type; $input["name"] = "Link"; $id_port = $np->add($input); $nn->add(array('networkports_id_1' => $p_oPort->getValue('ID'), 'networkports_id_2' => $id_port)); foreach ($p_oPort->getMacsToConnect() as $ifmac) { $input = array(); $input["on_device"] = $id_unknown; $input["device_type"] = $this->type; $id_port = $np->add($input); // TODO : recherche le port qui a cet $ifmac $query = "SELECT * FROM `glpi_networking_ports`\n WHERE `ifmac` = '" . $ifmac . "' "; $result = $DB->query($query); if ($DB->numrows($result) == 1) { $line = $DB->fetch_assoc($result); $nn->add(array('networkports_id_1' => $line['ID'], 'networkports_id_2' => $id_port)); } else { // Create device inconnu } } }
/** * Creation of a hub * * @param $pfNetworkport object Informations of the network port * * @return id of the hub (unmanageddevice) * **/ function createHub($pfNetworkport, $a_mac) { $Netport = new NetworkPort(); $nn = new NetworkPort_NetworkPort(); //$pfAgentsProcesses = new PluginFusionInventoryAgentsProcesses; // Find in the mac connected to the if they are in hub without link port connected foreach ($a_mac as $ifmac) { $a_ports = $Netport->find("`mac`='" . $ifmac . "'"); foreach ($a_ports as $data) { $ID = $nn->getOppositeContact($pfNetworkport->getNetworkPorts_id()); if ($ID) { $Netport->getFromDB($ID); if ($Netport->fields["itemtype"] == $this->getType()) { if ($this->fields["hub"] == "1") { $a_portLink = $Netport->find("`name`='Link'\n AND `items_id`='" . $this->fields['id'] . "'\n AND `itemtype`='" . $this->getType() . "'"); foreach ($a_portLink as $dataLink) { if ($nn->getOppositeContact($dataLink['id'])) { } else { // We have founded a hub orphelin $this->disconnectDB($pfNetworkport->fields['networkports_id']); $this->disconnectDB($dataLink['id']); $nn->add(array('networkports_id_1' => $pfNetworkport->fields['networkports_id'], 'networkports_id_2' => $dataLink['id'])); $this->releaseHub($this->fields['id'], $pfNetworkport, $a_mac); return $this->fields['id']; } } } } } } } // Not found, creation hub and link port $input = array(); $input['hub'] = "1"; $input['name'] = "hub"; if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } $hub_id = $this->add($input); $input = array(); $input["items_id"] = $hub_id; $input["itemtype"] = $this->getType(); $input["name"] = "Link"; $input['instantiation_type'] = "NetworkPortEthernet"; $port_id = $Netport->add($input); $this->disconnectDB($pfNetworkport->fields['networkports_id']); $this->disconnectDB($port_id); if ($nn->add(array('networkports_id_1' => $pfNetworkport->fields['networkports_id'], 'networkports_id_2' => $port_id))) { } return $hub_id; }
function plugin_item_purge_fusioninventory($parm) { switch (get_class($parm)) { case 'NetworkPort_NetworkPort': // If remove connection of a hub port (unknown device), we must delete this port too $NetworkPort = new NetworkPort(); $NetworkPort_Vlan = new NetworkPort_Vlan(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $networkPort_NetworkPort = new NetworkPort_NetworkPort(); $a_hubs = array(); $port_id = $NetworkPort->getContact($parm->getField('networkports_id_1')); $NetworkPort->getFromDB($parm->getField('networkports_id_1')); if ($NetworkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { $pfUnmanaged->getFromDB($NetworkPort->fields['items_id']); if ($pfUnmanaged->fields['hub'] == '1') { $a_hubs[$NetworkPort->fields['items_id']] = 1; $NetworkPort->delete($NetworkPort->fields); } } $NetworkPort->getFromDB($port_id); if ($port_id) { if ($NetworkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { $pfUnmanaged->getFromDB($NetworkPort->fields['items_id']); if ($pfUnmanaged->fields['hub'] == '1') { $a_hubs[$NetworkPort->fields['items_id']] = 1; } } } $port_id = $NetworkPort->getContact($parm->getField('networkports_id_2')); $NetworkPort->getFromDB($parm->getField('networkports_id_2')); if ($NetworkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { if ($pfUnmanaged->getFromDB($NetworkPort->fields['items_id'])) { if ($pfUnmanaged->fields['hub'] == '1') { $a_vlans = $NetworkPort_Vlan->getVlansForNetworkPort($NetworkPort->fields['id']); foreach ($a_vlans as $vlan_id) { $NetworkPort_Vlan->unassignVlan($NetworkPort->fields['id'], $vlan_id); } $a_hubs[$NetworkPort->fields['items_id']] = 1; $NetworkPort->delete($NetworkPort->fields); } } } if ($port_id) { $NetworkPort->getFromDB($port_id); if ($NetworkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { $pfUnmanaged->getFromDB($NetworkPort->fields['items_id']); if ($pfUnmanaged->fields['hub'] == '1') { $a_hubs[$NetworkPort->fields['items_id']] = 1; } } } // If hub have no port, delete it foreach (array_keys($a_hubs) as $unkowndevice_id) { $a_networkports = $NetworkPort->find("`itemtype`='PluginFusioninventoryUnmanaged'\n AND `items_id`='" . $unkowndevice_id . "' "); if (count($a_networkports) < 2) { $pfUnmanaged->delete(array('id' => $unkowndevice_id), 1); } else { if (count($a_networkports) == '2') { $switchPorts_id = 0; $otherPorts_id = 0; foreach ($a_networkports as $data) { if ($data['name'] == 'Link') { $switchPorts_id = $NetworkPort->getContact($data['id']); } else { if ($otherPorts_id == '0') { $otherPorts_id = $NetworkPort->getContact($data['id']); } else { $switchPorts_id = $NetworkPort->getContact($data['id']); } } } $pfUnmanaged->disconnectDB($switchPorts_id); // disconnect this port $pfUnmanaged->disconnectDB($otherPorts_id); // disconnect destination port $networkPort_NetworkPort->add(array('networkports_id_1' => $switchPorts_id, 'networkports_id_2' => $otherPorts_id)); } } } break; case 'NetworkEquipment': // Delete all ports $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_networkequipments`\n WHERE `networkequipments_id`='" . $parm->fields["id"] . "';"; $DB->query($query_delete); $query_select = "SELECT `glpi_plugin_fusioninventory_networkports`.`id`,\n `glpi_networkports`.`id` as nid\n FROM `glpi_plugin_fusioninventory_networkports`\n LEFT JOIN `glpi_networkports`\n ON `glpi_networkports`.`id` = `networkports_id`\n WHERE `items_id`='" . $parm->fields["id"] . "'\n AND `itemtype`='NetworkEquipment';"; $result = $DB->query($query_select); while ($data = $DB->fetch_array($result)) { $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_networkports`\n WHERE `id`='" . $data["id"] . "';"; $DB->query($query_delete); $query_delete = "DELETE FROM `glpi_plugin_fusinvsnmp_networkportlogs`\n WHERE `networkports_id`='" . $data['nid'] . "'"; $DB->query($query_delete); } break; case "Printer": $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_printers`\n WHERE `printers_id`='" . $parm->fields["id"] . "';"; $DB->query($query_delete); $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_printercartridges`\n WHERE `printers_id`='" . $parm->fields["id"] . "';"; $DB->query($query_delete); $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_printerlogs`\n WHERE `printers_id`='" . $parm->fields["id"] . "';"; $DB->query($query_delete); break; case 'PluginFusioninventoryUnmanaged': $query_delete = "DELETE FROM `glpi_plugin_fusinvsnmp_unmanageds`\n WHERE `plugin_fusioninventory_unmanageds_id`='" . $parm->fields["id"] . "';"; $DB->query($query_delete); break; } return $parm; }
} } Event::log(0, "networkport", 5, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][74]); glpi_header($_SERVER['HTTP_REFERER']); } else { if (isset($_POST["update"])) { $np->check($_POST['id'], 'w'); $np->update($_POST); Event::log($_POST["id"], "networkport", 4, "inventory", $_SESSION["glpiname"] . " " . $LANG['log'][21]); glpi_header($_SERVER['HTTP_REFERER']); } else { if (isset($_POST["connect"])) { if (isset($_POST["dport"]) && count($_POST["dport"])) { foreach ($_POST["dport"] as $sport => $dport) { if ($sport && $dport) { $nn->add(array('networkports_id_1' => $sport, 'networkports_id_2' => $dport)); } } } glpi_header($_SERVER['HTTP_REFERER']); } else { if (isset($_GET["disconnect"])) { $nn->check($_GET['id'], 'd'); if (isset($_GET["id"])) { $nn->delete($_GET); $fin = ""; if (isset($_GET["sport"])) { $fin = "?sport=" . $_GET["sport"]; } glpi_header($_SERVER['HTTP_REFERER'] . $fin); }
/** * @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)); } } } } } }