/** * @test */ public function ImportNetworkEquipment() { global $DB; self::restore_database(); // Load session rights $_SESSION['glpidefault_entity'] = 0; Session::initEntityProfiles(2); Session::changeProfile(4); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $networkEquipment = new NetworkEquipment(); $networkPort = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $input = array('name' => 'switch', 'entities_id' => 0, 'item_type' => 'NetworkEquipment', 'sysdescr' => 'Cisco machin chose', 'locations_id' => 1, 'is_dynamic' => 1, 'serial' => 'XXS6BEF3', 'comment' => 'this is a comment', 'plugin_fusioninventory_configsecurities_id' => 1); $unmanageds_id = $pfUnmanaged->add($input); // * Add networkport $input = array(); $input['itemtype'] = 'PluginFusioninventoryUnmanaged'; $input['items_id'] = $unmanageds_id; $input['instantiation_type'] = 'NetworkPortEthernet'; $input['name'] = 'general'; $input['mac'] = '00:00:00:43:ae:0f'; $input['is_dynamic'] = 1; $networkports_id = $networkPort->add($input); $input = array(); $input['items_id'] = $networkports_id; $input['itemtype'] = 'NetworkPort'; $input['name'] = ''; $input['is_dynamic'] = 1; $networknames_id = $networkName->add($input); $input = array(); $input['entities_id'] = 0; $input['itemtype'] = 'NetworkName'; $input['items_id'] = $networknames_id; $input['name'] = '192.168.20.1'; $input['is_dynamic'] = 1; $iPAddress->add($input); $pfUnmanaged->import($unmanageds_id); $cnt = countElementsInTable("glpi_networkequipments"); $this->assertEquals(1, $cnt, "May have network equipment added"); $cnt = countElementsInTable("glpi_plugin_fusioninventory_unmanageds"); $this->assertEquals(0, $cnt, "Unknown device may be deleted"); $networkEquipment->getFromDB(1); $this->assertEquals('XXS6BEF3', $networkEquipment->fields['serial'], "Serial"); $this->assertEquals('switch', $networkEquipment->fields['name'], "Name"); $this->assertEquals(1, $networkEquipment->fields['is_dynamic'], "is_dynamic"); $this->assertEquals(1, $networkEquipment->fields['locations_id'], "locations_id"); $this->assertEquals('this is a comment', $networkEquipment->fields['comment'], "comment"); $networkPort->getFromDB(1); $a_reference = array('name' => 'general', 'id' => '1', 'items_id' => '1', 'itemtype' => 'NetworkEquipment', 'entities_id' => '0', 'is_recursive' => '0', 'logical_number' => '0', 'instantiation_type' => 'NetworkPortEthernet', 'mac' => '00:00:00:43:ae:0f', 'comment' => '', 'is_deleted' => '0', 'is_dynamic' => '1'); $this->assertEquals($a_reference, $networkPort->fields, "Networkport"); $networkName->getFromDB(1); $a_reference = array('id' => '1', 'entities_id' => '0', 'items_id' => '1', 'itemtype' => 'NetworkPort', 'comment' => NULL, 'fqdns_id' => '0', 'is_deleted' => '0', 'is_dynamic' => '1', 'name' => ''); $this->assertEquals($a_reference, $networkName->fields, "Networkname"); $iPAddress->getFromDB(1); $a_reference = array('name' => '192.168.20.1', 'id' => '1', 'entities_id' => '0', 'items_id' => '1', 'itemtype' => 'NetworkName', 'version' => '4', 'binary_0' => '0', 'binary_1' => '0', 'binary_2' => '65535', 'binary_3' => '3232240641', 'is_deleted' => '0', 'is_dynamic' => '1', 'mainitems_id' => '1', 'mainitemtype' => 'NetworkEquipment'); $this->assertEquals($a_reference, $iPAddress->fields, "IPAddress"); }
function _updateNetworkInfo($arrayinventory, $item_type, $id, $instanciation_type, $check_addresses) { $NetworkPort = new NetworkPort(); $port = current($NetworkPort->find("`itemtype`='{$item_type}' AND `items_id`='{$id}'" . " AND `instantiation_type`='{$instanciation_type}'", "", 1)); $port_id = 0; if (isset($port['id'])) { if (isset($arrayinventory['MAC']) and !empty($arrayinventory['MAC'])) { $input = array(); $input['id'] = $port['id']; $input['mac'] = $arrayinventory['MAC']; $NetworkPort->update($input); } $port_id = $port['id']; } else { $input = array(); $input['itemtype'] = $item_type; $input['items_id'] = $id; $input['instantiation_type'] = $instanciation_type; $input['name'] = "management"; if (isset($arrayinventory['MAC']) && !empty($arrayinventory['MAC'])) { $input['mac'] = $arrayinventory['MAC']; } $port_id = $NetworkPort->add($input); } $NetworkName = new NetworkName(); $name = current($NetworkName->find("`itemtype`='NetworkPort' AND `items_id`='" . $port_id . "'", "", 1)); $name_id = 0; if (isset($name['id'])) { $name_id = $name['id']; } else { $input = array(); $input['itemtype'] = 'NetworkPort'; $input['items_id'] = $port_id; $name_id = $NetworkName->add($input); } if (isset($arrayinventory['IP'])) { $IPAddress = new IPAddress(); if ($check_addresses) { $addresses = $IPAddress->find("`itemtype`='NetworkName'\n AND `items_id`='" . $name_id . "'", '', 1); } else { // Case of NetworkEquipment $a_ips = $IPAddress->find("`itemtype`='NetworkName'\n AND `items_id`='" . $name_id . "'\n AND `name`='" . $arrayinventory['IP'] . "'", '', 1); if (count($a_ips) > 0) { $addresses = $a_ips; } else { $addresses = array(); } } if (count($addresses) == 0) { $input = array(); $input['itemtype'] = 'NetworkName'; $input['items_id'] = $name_id; $input['name'] = $arrayinventory['IP']; $IPAddress->add($input); } else { $address = current($addresses); if ($address['name'] != $arrayinventory['IP']) { $input = array(); $input['id'] = $address['id']; $input['name'] = $arrayinventory['IP']; $IPAddress->update($input); } } } }
/** * \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); }
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GLPI. If not, see <http://www.gnu.org/licenses/>. -------------------------------------------------------------------------- */ /** @file * @brief */ include '../inc/includes.php'; $nn = new NetworkName(); if (isset($_POST["add"])) { $nn->check(-1, CREATE, $_POST); if ($newID = $nn->add($_POST)) { Event::log($newID, "networkname", 5, "inventory", sprintf(__('%s adds an item'), $_SESSION["glpiname"])); if ($_SESSION['glpibackcreated']) { Html::redirect($nn->getFormURL() . "?id=" . $newID); } } Html::back(); } else { if (isset($_POST["purge"])) { $nn->check($_POST['id'], PURGE); $nn->delete($_POST, 1); Event::log($_POST["id"], "networkname", 5, "inventory", sprintf(__('%s purges an item'), $_SESSION["glpiname"])); if ($node = getItemForItemtype($nn->fields["itemtype"])) { if ($node->can($nn->fields["items_id"], READ)) { Html::redirect($node->getLinkURL()); }
/** * @param $mac * @param $name * @param $computers_id * @param $instantiation_type * @param $inst_input * @param $ips * @param $check_name * @param $dohistory * @param $already_known_ports * @return ID */ private static function updateNetworkPort($mac, $name, $computers_id, $instantiation_type, $inst_input, $ips, $check_name, $dohistory, $already_known_ports) { global $DB; $network_port = new NetworkPort(); // Then, find or create the base NetworkPort $query = "SELECT `id`, `is_dynamic`\n FROM `glpi_networkports`\n WHERE `itemtype` = 'Computer'\n AND `items_id` = '{$computers_id}'\n AND `mac` = '{$mac}'"; // If there is virtual ports, then, filter by port's name if ($check_name) { $query .= " AND `name` = '{$name}'"; } if (count($already_known_ports) > 0) { $query .= " AND `id` NOT IN (" . implode(',', $already_known_ports) . ")"; } // We order by is_dynamic to be sure to get the static ones first ! $query .= " ORDER BY `is_dynamic`, `id`"; $ports = $DB->request($query); if ($ports->numrows() == 0) { $port_input = array('name' => $name, 'mac' => $mac, 'items_id' => $computers_id, 'itemtype' => 'Computer', '_no_history' => !$dohistory, 'instantiation_type' => $instantiation_type, '_create_children' => 1, 'is_dynamic' => 1, 'is_deleted' => 0); $networkports_id = $network_port->add($port_input, array(), $dohistory); if ($networkports_id === false) { return -1; } $inst_input['networkports_id'] = $networkports_id; $instantiation = $network_port->getInstantiation(); $instantiation->update($inst_input); unset($instantiation); } else { $line = $ports->next(); $networkports_id = $line['id']; $network_port->getFromDB($networkports_id); if (!$check_name && $network_port->fields['name'] != $name) { $port_input = array('id' => $network_port->getID(), 'name' => $name, 'is_dynamic' => 1); $network_port->update($port_input); } if ($network_port->fields['instantiation_type'] != $instantiation_type && $network_port->fields['is_dynamic'] == 1) { $network_port->switchInstantiationType($instantiation_type); $inst_input['networkports_id'] = $network_port->getID(); $instantiation = $network_port->getInstantiation(); $instantiation->add($inst_input); unset($instantiation); } if ($network_port->fields['instantiation_type'] == $instantiation_type) { $instantiation = $network_port->getInstantiation(); $inst_input['id'] = $instantiation->getID(); $inst_input['networkports_id'] = $network_port->getID(); $instantiation->update($inst_input); unset($instantiation); } } if ($network_port->isNewItem()) { return -1; } $network_name = new NetworkName(); $query = "SELECT `id`, `is_dynamic`\n FROM `glpi_networknames`\n WHERE `itemtype` = 'NetworkPort'\n AND `items_id` = '{$networkports_id}'\n ORDER BY `is_dynamic`"; if (!$ips || count($ips) == 0) { foreach ($DB->request($query) as $line) { if ($line['is_dynamic']) { $network_name->delete($line, true, $dohistory); } } } else { $names = $DB->request($query); if ($names->numrows() == 0) { $name_input = array('itemtype' => 'NetworkPort', 'items_id' => $networkports_id, 'is_dynamic' => 1, 'is_deleted' => 0, '_no_history' => !$dohistory, 'name' => 'OCS-INVENTORY-NG'); $networknames_id = $network_name->add($name_input); } else { $line = $names->next(); $networknames_id = $line['id']; foreach ($names as $line) { if ($line['is_dynamic'] == 1 && $line['id'] != $networknames_id) { $network_port->delete($line, true, $dohistory); } } } $ip_address = new IPAddress(); $already_known_addresses = array(); $query = "SELECT `id`, `name`, `is_dynamic`, `mainitems_id`\n FROM `glpi_ipaddresses`\n WHERE `itemtype` = 'NetworkName'\n AND `items_id` = '{$networknames_id}'\n ORDER BY `is_dynamic`"; foreach ($DB->request($query) as $line) { if (in_array($line['name'], $ips) && !empty($line['mainitems_id'])) { $already_known_addresses[] = $line['id']; $ips = array_diff($ips, array($line['name'])); } elseif ($line['is_dynamic'] == 1) { $ip_address->delete($line, true, $dohistory); } } } if ($ips) { foreach ($ips as $ip) { $ip_input = array('name' => $ip, 'itemtype' => 'NetworkName', 'items_id' => $networknames_id, '_no_history' => !$dohistory, 'is_dynamic' => 1, 'is_deleted' => 0); $ip_address->add($ip_input); } } return $network_port->getID(); }
/** * @test */ public function PrinterToInventoryWithoutIP() { self::restore_database(); $printer = new Printer(); $networkport = new NetworkPort(); $networkName = new NetworkName(); $pfPrinter = new PluginFusioninventoryPrinter(); $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $computer = new Computer(); $pfAgent = new PluginFusioninventoryAgent(); $communication = new PluginFusioninventoryCommunication(); // Create computers + agents $input = array('entities_id' => 0, 'name' => 'computer1'); $computers_id = $computer->add($input); $input = array('entities_id' => 0, 'name' => 'computer1', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer1', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id); $pfAgent->add($input); // Create printer $input = array('name' => 'printer 001', 'entities_id' => 0); $printers_id = $printer->add($input); // Add port $networkports_id = $networkport->add(array('itemtype' => 'Printer', 'instantiation_type' => 'NetworkPortEthernet', 'items_id' => $printers_id, 'entities_id' => 0)); $networknames_id = $networkName->add(array('entities_id' => 0, 'itemtype' => 'NetworkPort', 'items_id' => $networkports_id)); $input = array('printers_id' => 1, 'plugin_fusioninventory_configsecurities_id' => 2); $pfPrinter->add($input); // Add task // create task $input = array('entities_id' => 0, 'name' => 'network inventory', 'is_active' => 1); $tasks_id = $pfTask->add($input); // create taskjob $input = array('plugin_fusioninventory_tasks_id' => $tasks_id, 'entities_id' => 0, 'name' => 'inventory', 'method' => 'networkinventory', 'targets' => '[{"Printer":"' . $printers_id . '"}]', 'actors' => '[{"PluginFusioninventoryAgent":"1"}]'); $pfTaskjob->add($input); PluginFusioninventoryTask::cronTaskscheduler(); $data = $pfTask->getJoblogs(array(1)); // Task is prepared // Agent will get data $communication->getTaskAgent(1); $message = $communication->getMessage(); $json = json_encode($message); $array = json_decode($json, TRUE); $ref = array(); $this->assertEquals($ref, $array, 'XML of SNMP inventory task'); }
public function Cisco1Unmanaged() { global $DB; $DB->connect(); self::restore_database(); $a_lldp = array('ifdescr' => 'GigabitEthernet0/10', 'logical_number' => '', 'sysdescr' => '', 'model' => '', 'ip' => '192.168.200.124', 'mac' => '', 'name' => ''); $pfINetworkEquipmentLib = new PluginFusioninventoryInventoryNetworkEquipmentLib(); $networkEquipment = new NetworkEquipment(); $networkport = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $pfNetworkPort = new PluginFusioninventoryNetworkPort(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); // Nortel switch $networkequipments_id = $networkEquipment->add(array('name' => 'cisco1', 'entities_id' => 0)); $networkports_id = $networkport->add(array('itemtype' => 'NetworkEquipment', 'items_id' => $networkequipments_id, 'entities_id' => 0)); // Unmanaged $unmanageds_id = $pfUnmanaged->add(array('name' => 'otherswitch', 'entities_id' => 0)); $networkports_unknown_id = $networkport->add(array('itemtype' => 'PluginFusioninventoryUnmanaged', 'items_id' => $unmanageds_id, 'entities_id' => 0)); $networknames_id = $networkName->add(array('entities_id' => 0, 'itemtype' => 'NetworkPort', 'items_id' => $networkports_unknown_id)); $iPAddress->add(array('entities_id' => 0, 'itemtype' => 'NetworkName', 'items_id' => $networknames_id, 'name' => '192.168.200.124')); $pfINetworkEquipmentLib->importConnectionLLDP($a_lldp, $networkports_id); $a_portslinks = getAllDatasFromTable('glpi_networkports_networkports'); $this->assertEquals(1, count($a_portslinks), 'May have 1 connection between 2 network ports'); $a_networkports = getAllDatasFromTable('glpi_networkports'); $this->assertEquals(3, count($a_networkports), 'May have 3 network ports (' . print_r($a_networkports, TRUE) . ')'); $a_unkowns = getAllDatasFromTable('glpi_plugin_fusioninventory_unmanageds'); $this->assertEquals(1, count($a_unkowns), 'May have only one unknown device (' . print_r($a_unkowns, TRUE) . ')'); $a_networkport_ref = array('id' => '3', 'items_id' => $unmanageds_id, 'itemtype' => 'PluginFusioninventoryUnmanaged', 'entities_id' => '0', 'is_recursive' => '0', 'logical_number' => '0', 'name' => 'GigabitEthernet0/10', 'instantiation_type' => 'NetworkPortEthernet', 'mac' => NULL, 'comment' => NULL, 'is_deleted' => '0', 'is_dynamic' => '0'); $networkport->getFromDB(3); $this->assertEquals($a_networkport_ref, $networkport->fields, 'New unknown port created'); $a_ref = array('id' => 1, 'networkports_id_1' => $networkports_id, 'networkports_id_2' => 3); $this->assertEquals($a_ref, current($a_portslinks), 'Link port'); }
function getPortIDfromDeviceIP($IP, $ifDescr, $sysdescr, $sysname, $model) { global $DB; $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $NetworkPort = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $PortID = ""; // search port have ifdescr + ip (in most cases not find it) $queryPort = "SELECT `glpi_networkports`.`id`\n FROM `glpi_plugin_fusioninventory_networkports`\n LEFT JOIN `glpi_networkports`\n ON `glpi_plugin_fusioninventory_networkports`.`networkports_id`=\n `glpi_networkports`.`id`\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n\n WHERE (`ifdescr`='" . $ifDescr . "'\n OR `glpi_networkports`.`name`='" . $ifDescr . "')\n AND `glpi_networkports`.`itemtype`='NetworkEquipment'\n AND `glpi_ipaddresses`.`name`='" . $IP . "'"; $resultPort = $DB->query($queryPort); if ($DB->numrows($resultPort) == 0) { // Search a management port of networkequipment have this IP $queryManagement = "SELECT `glpi_networkports`.`itemtype`,\n `glpi_networkports`.`items_id` FROM `glpi_networkports`\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n\n WHERE `glpi_ipaddresses`.`name`='" . $IP . "'\n AND `instantiation_type`='NetworkPortAggregate'\n LIMIT 1"; $resultManagement = $DB->query($queryManagement); if ($DB->numrows($resultManagement) == 1) { $dataManagement = $DB->fetch_assoc($resultManagement); // Seach a port have this ifdescr for this same networkequipment $queryPort = "SELECT `glpi_networkports`.`id`\n FROM `glpi_plugin_fusioninventory_networkports`\n LEFT JOIN `glpi_networkports`\n ON `glpi_plugin_fusioninventory_networkports`.`networkports_id`=\n `glpi_networkports`.`id`\n WHERE `glpi_networkports`.`itemtype`='" . $dataManagement['itemtype'] . "'\n AND `glpi_networkports`.`items_id`='" . $dataManagement['items_id'] . "'\n AND (`ifdescr`='" . $ifDescr . "'\n OR `glpi_networkports`.`name`='" . $ifDescr . "')\n LIMIT 1"; $resultPort = $DB->query($queryPort); if ($DB->numrows($resultPort) == 1) { $dataPort = $DB->fetch_assoc($resultPort); $PortID = $dataPort["id"]; } } } else { $dataPort = $DB->fetch_assoc($resultPort); $PortID = $dataPort['id']; } // Detect IP Phone if ($PortID == "") { if (strstr($model, "Phone") || $model == '') { $queryPort = "SELECT glpi_networkports.* FROM `glpi_phones`\n LEFT JOIN `glpi_networkports`\n ON `glpi_phones`.`id`=`glpi_networkports`.`items_id`\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n\n WHERE `glpi_ipaddresses`.`name`='" . $IP . "'\n AND `glpi_networkports`.`itemtype`='Phone'\n AND `glpi_phones`.`name`='" . $sysname . "'\n LIMIT 1"; $resultPort = $DB->query($queryPort); if ($DB->numrows($resultPort) == 1) { $dataPort = $DB->fetch_assoc($resultPort); if (isset($dataPort['id'])) { $PortID = $dataPort["id"]; } } } } if ($PortID == "") { $query = "SELECT * FROM `glpi_plugin_fusioninventory_unmanageds`\n WHERE `ip`='" . $IP . "'\n LIMIT 1"; $result = $DB->query($query); if ($DB->numrows($result) == "1") { $data = $DB->fetch_assoc($result); // Search port and add if required $query1 = "SELECT *\n FROM `glpi_networkports`\n WHERE `itemtype`='PluginFusioninventoryUnmanaged'\n AND `items_id`='" . $data['id'] . "'\n AND `name`='" . $ifDescr . "'\n LIMIT 1"; $result1 = $DB->query($query1); if ($DB->numrows($result1) == "1") { $data1 = $DB->fetch_assoc($result1); $PortID = $data1['id']; } else { // Add port $input = array(); $input['items_id'] = $data['id']; $input['itemtype'] = 'PluginFusioninventoryUnmanaged'; $input['ip'] = $IP; $input['name'] = $ifDescr; $input['instantiation_type'] = 'NetworkPortEthernet'; $PortID = $NetworkPort->add($input); } // Update unmanaged device $input = array(); $input['id'] = $data['id']; $input['ip'] = $IP; if (strstr($model, "Phone")) { $input['item_type'] = 'Phone'; } if ($sysname != '') { $input['name'] = $sysname; } if ($sysdescr != '') { $input['sysdescr'] = $sysdescr; } $pfUnmanaged->update($input); return $PortID; } $query0 = "SELECT `glpi_networkports`.* FROM `glpi_networkports`\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n\n WHERE `glpi_networkports`.`itemtype`='PluginFusioninventoryUnmanaged'\n AND `glpi_ipaddresses`.`name`='" . $IP . "'\n LIMIT 1"; $result0 = $DB->query($query0); if ($DB->numrows($result0) == 1) { $data0 = $DB->fetch_assoc($result0); // Search port and add if required $query1 = "SELECT *\n FROM `glpi_networkports`\n WHERE `itemtype`='PluginFusioninventoryUnmanaged'\n AND `items_id`='" . $data0['items_id'] . "'\n AND `name`='" . $ifDescr . "'\n LIMIT 1"; $result1 = $DB->query($query1); if ($DB->numrows($result1) == "1") { $data1 = $DB->fetch_assoc($result1); $PortID = $data1['id']; } else { // Add port $input = array(); $input['items_id'] = $data0['items_id']; $input['itemtype'] = 'PluginFusioninventoryUnmanaged'; $input['name'] = $ifDescr; $input['instantiation_type'] = 'NetworkPortEthernet'; $PortID = $NetworkPort->add($input); $input = array(); $input['itemtype'] = 'NetworkPort'; $input['items_id'] = $PortID; $networknames_id = $networkName->add($input); $input = array(); $input['itemtype'] = 'NetworkName'; $input['items_id'] = $networknames_id; $input['name'] = $IP; $iPAddress->add($input); } return $PortID; } // Add unmanaged device $input = array(); $input['ip'] = $IP; if (strstr($model, "Phone")) { $input['item_type'] = 'Phone'; } if ($sysname != '') { $input['name'] = $sysname; } if ($model != '') { $input['comment'] = $model; } if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } if ($sysdescr != '') { $input['sysdescr'] = $sysdescr; } $unkonwn_id = $pfUnmanaged->add($input); // Add port $input = array(); $input['items_id'] = $unkonwn_id; $input['itemtype'] = 'PluginFusioninventoryUnmanaged'; $input['name'] = $ifDescr; $input['instantiation_type'] = 'NetworkPortEthernet'; $PortID = $NetworkPort->add($input); $input = array(); $input['itemtype'] = 'NetworkPort'; $input['items_id'] = $PortID; $networknames_id = $networkName->add($input); $input = array(); $input['itemtype'] = 'NetworkName'; $input['items_id'] = $networknames_id; $input['name'] = $IP; $iPAddress->add($input); return $PortID; } return $PortID; }
function manageNetworkPort($inventory_networkports, $computers_id, $no_history) { global $DB; $networkPort = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $iPNetwork = new IPNetwork(); $networkPortEthernet = new NetworkPortEthernet(); $item_DeviceNetworkCard = new Item_DeviceNetworkCard(); foreach ($inventory_networkports as $a_networkport) { if ($a_networkport['mac'] != '') { $a_networkports = $networkPort->find("`mac`='" . $a_networkport['mac'] . "'\n AND `itemtype`='PluginFusioninventoryUnmanaged'", "", 1); if (count($a_networkports) > 0) { $input = current($a_networkports); $unmanageds_id = $input['items_id']; $input['logical_number'] = $a_networkport['logical_number']; $input['itemtype'] = 'Computer'; $input['items_id'] = $computers_id; $input['is_dynamic'] = 1; $input['name'] = $a_networkport['name']; $networkPort->update($input, !$no_history); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $pfUnmanaged->delete(array('id' => $unmanageds_id), 1); } } } // end get port from unknwon device $db_networkport = array(); if ($no_history === FALSE) { $query = "SELECT `id`, `name`, `mac`, `instantiation_type`, `logical_number`\n FROM `glpi_networkports`\n WHERE `items_id` = '{$computers_id}'\n AND `itemtype`='Computer'\n AND `is_dynamic`='1'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $idtmp = $data['id']; unset($data['id']); if (is_null($data['mac'])) { $data['mac'] = ''; } if (preg_match("/[^a-zA-Z0-9 \\-_\\(\\)]+/", $data['name'])) { $data['name'] = Toolbox::addslashes_deep($data['name']); } $db_networkport[$idtmp] = array_map('strtolower', $data); } } $simplenetworkport = array(); foreach ($inventory_networkports as $key => $a_networkport) { // Add ipnetwork if not exist if ($a_networkport['gateway'] != '' && $a_networkport['netmask'] != '' && $a_networkport['subnet'] != '') { if (countElementsInTable('glpi_ipnetworks', "`address`='" . $a_networkport['subnet'] . "'\n AND `netmask`='" . $a_networkport['netmask'] . "'\n AND `gateway`='" . $a_networkport['gateway'] . "'\n AND `entities_id`='" . $_SESSION["plugin_fusioninventory_entity"] . "'") == 0) { $input_ipanetwork = array('name' => $a_networkport['subnet'] . '/' . $a_networkport['netmask'] . ' - ' . $a_networkport['gateway'], 'network' => $a_networkport['subnet'] . ' / ' . $a_networkport['netmask'], 'gateway' => $a_networkport['gateway'], 'entities_id' => $_SESSION["plugin_fusioninventory_entity"]); $iPNetwork->add($input_ipanetwork, array(), !$no_history); } } // End add ipnetwork $a_field = array('name', 'mac', 'instantiation_type'); foreach ($a_field as $field) { if (isset($a_networkport[$field])) { $simplenetworkport[$key][$field] = $a_networkport[$field]; } } } foreach ($simplenetworkport as $key => $arrays) { $arrayslower = array_map('strtolower', $arrays); foreach ($db_networkport as $keydb => $arraydb) { $logical_number = $arraydb['logical_number']; unset($arraydb['logical_number']); if ($arrayslower == $arraydb) { if ($inventory_networkports[$key]['logical_number'] != $logical_number) { $input = array(); $input['id'] = $keydb; $input['logical_number'] = $inventory_networkports[$key]['logical_number']; $networkPort->update($input, !$no_history); } // Add / update instantiation_type if (isset($inventory_networkports[$key]['instantiation_type'])) { if ($inventory_networkports[$key]['instantiation_type'] == 'NetworkPortEthernet') { $portsethernet = $networkPortEthernet->find("`networkports_id`='" . $keydb . "'", '', 1); if (count($portsethernet) == 1) { $portethernet = current($portsethernet); $input = $portethernet; } else { $input = array('networkports_id' => $keydb); } if (isset($inventory_networkports[$key]['speed'])) { $input['speed'] = $inventory_networkports[$key]['speed']; $input['speed_other_value'] = $inventory_networkports[$key]['speed']; } if (isset($inventory_networkports[$key]['mac'])) { $networkcards = $item_DeviceNetworkCard->find("`mac`='" . $inventory_networkports[$key]['mac'] . "' " . " AND `itemtype`='Computer'" . " AND `items_id`='" . $computers_id . "'", '', 1); if (count($networkcards) == 1) { $networkcard = current($networkcards); $input['items_devicenetworkcards_id'] = $networkcard['id']; } } $input['_no_history'] = $no_history; if (isset($input['id'])) { $networkPortEthernet->update($input); } else { $networkPortEthernet->add($input); } } } // Get networkname $a_networknames_find = current($networkName->find("`items_id`='" . $keydb . "'\n AND `itemtype`='NetworkPort'", "", 1)); if (!isset($a_networknames_find['id'])) { $a_networkport['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; $a_networkport['items_id'] = $computers_id; $a_networkport['itemtype'] = "Computer"; $a_networkport['is_dynamic'] = 1; $a_networkport['_no_history'] = $no_history; $a_networkport['items_id'] = $keydb; unset($a_networkport['_no_history']); $a_networkport['is_recursive'] = 0; $a_networkport['itemtype'] = 'NetworkPort'; unset($a_networkport['name']); $a_networkport['_no_history'] = $no_history; $a_networknames_id = $networkName->add($a_networkport, array(), !$no_history); $a_networknames_find['id'] = $a_networknames_id; } // Same networkport, verify ipaddresses $db_addresses = array(); $query = "SELECT `id`, `name` FROM `glpi_ipaddresses`\n WHERE `items_id` = '" . $a_networknames_find['id'] . "'\n AND `itemtype`='NetworkName'"; $result = $DB->query($query); while ($data = $DB->fetch_assoc($result)) { $db_addresses[$data['id']] = $data['name']; } $a_computerinventory_ipaddress = $inventory_networkports[$key]['ipaddress']; foreach ($a_computerinventory_ipaddress as $key2 => $arrays2) { foreach ($db_addresses as $keydb2 => $arraydb2) { if ($arrays2 == $arraydb2) { unset($a_computerinventory_ipaddress[$key2]); unset($db_addresses[$keydb2]); break; } } } if (count($a_computerinventory_ipaddress) == 0 and count($db_addresses) == 0) { // Nothing to do } else { if (count($db_addresses) != 0) { // Delete ip address in DB foreach (array_keys($db_addresses) as $idtmp) { $iPAddress->delete(array('id' => $idtmp), 1); } } if (count($a_computerinventory_ipaddress) != 0) { foreach ($a_computerinventory_ipaddress as $ip) { $input = array(); $input['items_id'] = $a_networknames_find['id']; $input['itemtype'] = 'NetworkName'; $input['name'] = $ip; $input['is_dynamic'] = 1; $iPAddress->add($input, array(), !$no_history); } } } unset($db_networkport[$keydb]); unset($simplenetworkport[$key]); unset($inventory_networkports[$key]); break; } } } if (count($inventory_networkports) == 0 and count($db_networkport) == 0) { // Nothing to do } else { if (count($db_networkport) != 0) { // Delete networkport in DB foreach ($db_networkport as $idtmp => $data) { $networkPort->delete(array('id' => $idtmp), 1); } } if (count($inventory_networkports) != 0) { foreach ($inventory_networkports as $a_networkport) { $a_networkport['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; $a_networkport['items_id'] = $computers_id; $a_networkport['itemtype'] = "Computer"; $a_networkport['is_dynamic'] = 1; $a_networkport['_no_history'] = $no_history; $a_networkport['items_id'] = $networkPort->add($a_networkport, array(), !$no_history); unset($a_networkport['_no_history']); $a_networkport['is_recursive'] = 0; $a_networkport['itemtype'] = 'NetworkPort'; unset($a_networkport['name']); $a_networkport['_no_history'] = $no_history; $a_networknames_id = $networkName->add($a_networkport, array(), !$no_history); foreach ($a_networkport['ipaddress'] as $ip) { $input = array(); $input['items_id'] = $a_networknames_id; $input['itemtype'] = 'NetworkName'; $input['name'] = $ip; $input['is_dynamic'] = 1; $input['_no_history'] = $no_history; $iPAddress->add($input, array(), !$no_history); } if (isset($a_networkport['instantiation_type'])) { if ($a_networkport['instantiation_type'] == 'NetworkPortEthernet') { $input = array('networkports_id' => $a_networkport['items_id']); if (isset($a_networkport['speed'])) { $input['speed'] = $a_networkport['speed']; $input['speed_other_value'] = $a_networkport['speed']; } if (isset($a_networkport['mac'])) { $networkcards = $item_DeviceNetworkCard->find("`mac`='" . $a_networkport['mac'] . "' " . " AND `itemtype`='Computer'" . " AND `items_id`='" . $computers_id . "'", '', 1); if (count($networkcards) == 1) { $networkcard = current($networkcards); $input['items_devicenetworkcards_id'] = $networkcard['id']; } } $input['_no_history'] = $no_history; $networkPortEthernet->add($input); } } } } } }
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GLPI. If not, see <http://www.gnu.org/licenses/>. -------------------------------------------------------------------------- */ /** @file * @brief */ include '../inc/includes.php'; $nn = new NetworkName(); if (isset($_POST["add"])) { $nn->check(-1, 'w', $_POST); $newID = $nn->add($_POST); Event::log($newID, "networkname", 5, "inventory", sprintf(__('%s adds an item'), $_SESSION["glpiname"])); Html::back(); } else { if (isset($_POST["delete"])) { $nn->check($_POST['id'], 'd'); $nn->delete($_POST); Event::log($_POST["id"], "networkname", 5, "inventory", sprintf(__('%s purges an item'), $_SESSION["glpiname"])); if ($node = getItemForItemtype($nn->fields["itemtype"])) { if ($node->can($nn->fields["items_id"], 'r')) { Html::redirect($node->getLinkURL()); } } $nn->redirectToList(); } else { if (isset($_POST["update"])) {
/** * Import IPs * * @param $p_ips IPs code to import * @param $networkequipments_id id of network equipment * * @return errors string to be alimented if import ko / '' if ok **/ function internalPorts($a_ips, $networkequipments_id, $mac, $networkname_name) { $networkPort = new NetworkPort(); $iPAddress = new IPAddress(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $networkName = new NetworkName(); // Get agregated ports $a_networkPortAggregates = current($networkPort->find("`itemtype`='NetworkEquipment'\n AND `items_id`='" . $networkequipments_id . "'\n AND `instantiation_type`='NetworkPortAggregate'\n AND `logical_number` = '0'", '', 1)); $a_ips_DB = array(); $networkports_id = 0; if (isset($a_networkPortAggregates['id'])) { $a_networkPortAggregates['mac'] = $mac; $networkPort->update($a_networkPortAggregates); $networkports_id = $a_networkPortAggregates['id']; } else { $input = array(); $input['itemtype'] = 'NetworkEquipment'; $input['items_id'] = $networkequipments_id; $input['instantiation_type'] = 'NetworkPortAggregate'; $input['name'] = 'general'; $input['mac'] = $mac; $networkports_id = $networkPort->add($input); } // Get networkname $a_networknames_find = current($networkName->find("`items_id`='" . $networkports_id . "'\n AND `itemtype`='NetworkPort'", "", 1)); $networknames_id = 0; if (isset($a_networknames_find['id'])) { $networknames_id = $a_networknames_find['id']; $a_networknames_find['name'] = $networkname_name; $networkName->update($a_networknames_find); } else { $input = array(); $input['items_id'] = $networkports_id; $input['itemtype'] = 'NetworkPort'; $input['name'] = $networkname_name; $networknames_id = $networkName->add($input); } $a_ips_fromDB = $iPAddress->find("`itemtype`='NetworkName'\n AND `items_id`='" . $networknames_id . "'"); foreach ($a_ips_fromDB as $data) { $a_ips_DB[$data['id']] = $data['name']; } foreach ($a_ips as $key => $ip) { foreach ($a_ips_DB as $keydb => $ipdb) { if ($ip == $ipdb) { unset($a_ips[$key]); unset($a_ips_DB[$keydb]); break; } } } if (count($a_ips) == 0 and count($a_ips_DB) == 0) { // Nothing to do } else { if (count($a_ips_DB) != 0 && count($a_ips) != 0) { // Delete IPs in DB foreach ($a_ips_DB as $idtmp => $ip) { $iPAddress->delete(array('id' => $idtmp)); } } if (count($a_ips) != 0) { foreach ($a_ips as $ip) { if ($ip != '127.0.0.1') { $input = array(); $input['entities_id'] = 0; $input['itemtype'] = 'NetworkName'; $input['items_id'] = $networknames_id; $input['name'] = $ip; $iPAddress->add($input); // Search in unmanaged device if device with IP (LLDP) is yet added, in this case, // we get id of this unmanaged device $a_manageds = $pfUnmanaged->find("`ip`='" . $ip . "'", "", 1); if (count($a_manageds) > 0) { $datas = current($a_unmanageds); $this->unmanagedCDP = $datas['id']; } } } } } }