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; }
if (isset($_POST["restore"])) { $pfUnmanaged->check($_POST['id'], DELETE); if ($pfUnmanaged->restore($_POST)) { Event::log($_POST["id"], "PluginFusioninventoryUnmanaged", 4, "inventory", $_SESSION["glpiname"] . " " . __('restoration of the item', 'fusioninventory') . " " . $pfUnmanaged->getField('name')); } $pfUnmanaged->redirectToList(); } else { if (isset($_POST["purge"]) || isset($_GET["purge"])) { Session::checkRight('plugin_fusioninventory_unmanaged', PURGE); $pfUnmanaged->check($_POST['id'], PURGE); $pfUnmanaged->delete($_POST, 1); $pfUnmanaged->redirectToList(); } else { if (isset($_POST["update"])) { $pfUnmanaged->check($_POST['id'], UPDATE); $pfUnmanaged->update($_POST); Html::back(); } else { if (isset($_POST["import"])) { $Import = 0; $NoImport = 0; list($Import, $NoImport) = $pfUnmanaged->import($_POST['id'], $Import, $NoImport); Session::addMessageAfterRedirect(__('Number of imported devices', 'fusioninventory') . " : " . $Import); Session::addMessageAfterRedirect(__('Number of devices not imported because type not defined', 'fusioninventory') . " : " . $NoImport); if ($Import == "0") { Html::back(); } else { Html::redirect($CFG_GLPI['root_doc'] . "/plugins/fusioninventory/front/unmanaged.php"); } } }