function showForm($input = '') { global $DB, $LANG, $CFG_GLPI, $INFOFORM_PAGES; $CommonItem = new CommonItem(); $np = new Netport(); echo "<table class='tab_cadre' cellpadding='5' width='950'>"; echo "<tr class='tab_bg_1'>"; echo "<th>"; echo $LANG['plugin_fusioninventory']["processes"][1]; echo " <a href='" . GLPI_ROOT . "/plugins/fusioninventory/front/agents.processes.form.php'>(" . $LANG['common'][66] . ")</a>"; echo "</th>"; echo "<th>"; echo $LANG['common'][27]; echo "</th>"; echo "<th>"; echo $LANG['common'][1]; echo "</th>"; echo "<th>"; echo $LANG['joblist'][0]; echo "</th>"; echo "<th>"; echo $LANG['common'][1]; echo "</th>"; echo "</tr>"; if (!isset($input['process_number'])) { $condition = ''; } else { $condition = "WHERE `process_number`='" . $input['process_number'] . "'"; if (isset($input['created'])) { $condition .= " AND `creation`='" . $input['created'] . "' "; } } $query = "SELECT * FROM `" . $this->table . "`\n " . $condition . "\n ORDER BY `date`DESC , `process_number` DESC"; if ($result = $DB->query($query)) { while ($data = $DB->fetch_array($result)) { echo "<tr class='tab_bg_1 center'>"; echo "<td>"; echo "<a href='" . GLPI_ROOT . "/plugins/fusioninventory/front/agents.processes.form.php?h_process_number=" . $data['process_number'] . "'>" . $data['process_number'] . "</a>"; echo "</td>"; echo "<td>"; echo convDateTime($data['date']); echo "</td>"; echo "<td>"; $np->getFromDB($data['FK_port_source']); $CommonItem->getFromDB($np->fields["device_type"], $np->fields["on_device"]); $link1 = $CommonItem->getLink(1); $link = "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/networking.port.php?ID=" . $np->fields["ID"] . "\">"; if (rtrim($np->fields["name"]) != "") { $link .= $np->fields["name"]; } else { $link .= $LANG['common'][0]; } $link .= "</a>"; echo $link . " " . $LANG['networking'][25] . " " . $link1; echo "</td>"; echo "<td>"; if ($data['creation'] == '1') { echo "<img src='" . GLPI_ROOT . "/plugins/fusioninventory/pics/connection_ok.png'/>"; } else { echo "<img src='" . GLPI_ROOT . "/plugins/fusioninventory/pics/connection_notok.png'/>"; } echo "</td>"; echo "<td>"; $np->getFromDB($data['FK_port_destination']); $CommonItem->getFromDB($np->fields["device_type"], $np->fields["on_device"]); $link1 = $CommonItem->getLink(1); $link = "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/networking.port.php?ID=" . $np->fields["ID"] . "\">"; if (rtrim($np->fields["name"]) != "") { $link .= $np->fields["name"]; } else { $link .= $LANG['common'][0]; } $link .= "</a>"; echo $link . " " . $LANG['networking'][25] . " " . $link1; echo "</td>"; echo "</tr>"; } } echo "</table>"; }
/** * Get port OID list for the SNMP model && create ports in DB if they don't exists * * @param $ID_Device : ID of device * @param $type : type of device (NETWORKING_TYPE, PRINTER_TYPE ...) * @param $oidsModel : oid list from model SNMP * @param $oidvalues : list of values from agent query * @param $ArrayPort_LogicalNum_SNMPNum : array logical port number => SNMP port number (ifindex) * @param $ArrayPort_LogicalNum_SNMPName : array logical port number => SNMP Port name * * @return $oidList : array with logic number => portsID from snmp * **/ static function getOIDPorts($ID_Device, $type, $oidsModel, $oidvalues, $ArrayPort_LogicalNum_SNMPName, $ArrayPort_LogicalNum_SNMPNum) { global $DB, $LANG; if ($_SESSION['fusioninventory_logs'] == "1") { $logs = new PluginFusioninventoryLogs(); } $manufCisco = new PluginFusioninventoryManufacturerCisco(); $netwire = new Netwire(); $np = new Netport(); $ptp = new PluginFusioninventoryPort(); if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", ">>>>>>>>>> Get OID ports list (SNMP model) and create ports in DB if not exists <<<<<<<<<<", $type, $ID_Device, 1); } $portcounter = $oidvalues[$oidsModel[1][0][""]][""]; if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "oid port counter : " . $oidsModel[1][0][""] . " = " . $portcounter, $type, $ID_Device, 1); } $oid_ifType = $oidsModel[0][1]['ifType']; if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "type of port : " . $oid_ifType, $type, $ID_Device, 1); } asort($ArrayPort_LogicalNum_SNMPNum); // Reorder ports with good logic number $query = "SELECT `last_PID_update`\n FROM `glpi_plugin_fusioninventory_networking`\n WHERE `FK_networking`='" . $ID_Device . "'\n AND `last_PID_update`='0';"; $result = $DB->query($query); if ($DB->numrows($result) == 1) { foreach ($ArrayPort_LogicalNum_SNMPNum as $num => $ifIndex) { $query_update = "UPDATE `glpi_networking_ports`\n SET `logical_number`='" . $ifIndex . "'\n WHERE `on_device`='" . $ID_Device . "'\n AND `device_type`='" . $type . "'\n AND `name`='" . $ArrayPort_LogicalNum_SNMPName[$num] . "';"; $DB->query($query_update); } } // Get query SNMP to have number of ports if (isset($portcounter) and !empty($portcounter)) { // ** Add ports in DataBase if they don't exists $logicalnumberlist = "("; foreach ($ArrayPort_LogicalNum_SNMPNum as $num => $ifIndex) { //$i is the logical number $logicalnumberlist .= $ifIndex . ","; //for ($i=0 ; $i < $portcounter ; $i++) { // Get type of port $ifType = $oidvalues[$oid_ifType . "." . $ArrayPort_LogicalNum_SNMPNum[$num]][""]; $oidList[$i] = $ArrayPort_LogicalNum_SNMPNum[$num]; if (strstr($ifType, "ethernetCsmacd") or $ifType == "6" or $ifType == "ethernet-csmacd(6)" or strstr($ifType, "iso88023Csmacd") or $ifType == "7") { $goodname = 1; if ($manufCisco->ListVirtualPorts($oidvalues[".1.3.6.1.2.1.1.1.0"][""], $ArrayPort_LogicalNum_SNMPName[$num]) == true) { $goodname = 0; $deleteportname[] = $ifIndex; unset($oidList[$ifIndex]); } if ($goodname == 1) { $query = "SELECT `ID`, `name`\n FROM `glpi_networking_ports`\n WHERE `on_device`='" . $ID_Device . "'\n AND `device_type`='" . $type . "'\n AND `logical_number`='" . $ifIndex . "';"; $result = $DB->query($query); if ($DB->numrows($result) == 0) { unset($array); $array["logical_number"] = $ifIndex; $array["name"] = $ArrayPort_LogicalNum_SNMPName[$num]; $array["on_device"] = $ID_Device; $array["device_type"] = $type; $IDport = $np->add($array); Event::log(0, "networking", 5, "inventory", "FusionInventory " . $LANG["log"][70]); if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "Add port in DB (glpi_networking_ports) : " . $ArrayPort_LogicalNum_SNMPName[$i], $type, $ID_Device, 1); } } else { $IDport = $DB->result($result, 0, "ID"); if ($DB->result($result, 0, "name") != $ArrayPort_LogicalNum_SNMPName[$num]) { unset($array); $array["name"] = $ArrayPort_LogicalNum_SNMPName[$num]; $array["ID"] = $DB->result($result, 0, "ID"); $np->update($array); if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "Update port in DB (glpi_networking_ports) : ID" . $DB->result($result, 0, "ID") . " & name " . $ArrayPort_LogicalNum_SNMPName[$i], $type, $ID_Device, 1); } } } if ($type == NETWORKING_TYPE) { $queryFusionInventoryPort = "SELECT `ID`\n FROM `glpi_plugin_fusioninventory_networking_ports`\n WHERE `FK_networking_ports`='" . $IDport . "';"; $resultFusionInventoryPort = $DB->query($queryFusionInventoryPort); if ($DB->numrows($resultFusionInventoryPort) == 0) { $queryInsert = "INSERT INTO `glpi_plugin_fusioninventory_networking_ports`\n (`FK_networking_ports`)\n VALUES ('" . $IDport . "');"; $DB->query($queryInsert); if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "Add port in DB (glpi_plugin_fusioninventory_networking_ports) : ID " . $IDport, $type, $ID_Device, 1); } } } } } } $logicalnumberlist .= ")"; } // Delete all ports that will be not here $nn = new NetworkPort_NetworkPort(); foreach ($deleteportname as $id => $i) { $query = "SELECT *\n FROM `glpi_networking_ports`\n WHERE `on_device`='" . $ID_Device . "'\n AND `device_type`='" . $type . "'\n AND `logical_number`='" . $i . "';"; $result = $DB->query($query); $data = $DB->fetch_assoc($result); PluginFusioninventorySnmphistory::addLogConnection("remove", $netwire->getOppositeContact($data['ID']), $FK_process); PluginFusioninventorySnmphistory::addLogConnection("remove", $data['ID'], $FK_process); if ($nn->getFromDBForNetworkPort($data['ID'])) { $nn->delete($data); } $ptp->deleteFromDB($data["ID"], 1); $np->delete($data); } // Delete ports where logical number in glpi_plugin_fusioninventory_networking_ports // not exist on switch : it's ports reorder not well $logicalnumberlist = str_replace(",)", ")", $logicalnumberlist); $query = "SELECT *\n FROM `glpi_networking_ports`\n WHERE `on_device`='" . $ID_Device . "'\n AND `device_type`='" . $type . "'\n AND `logical_number` NOT IN " . $logicalnumberlist . ";"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { PluginFusioninventorySnmphistory::addLogConnection("remove", $netwire->getOppositeContact($data['ID']), $FK_process); PluginFusioninventorySnmphistory::addLogConnection("remove", $data['ID'], $FK_process); if ($nn->getFromDBForNetworkPort($data['ID'])) { $nn->delete($data); } $np->delete($data); $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_networking_ports`\n WHERE `FK_networking_ports`='" . $data["ID"] . "';"; $DB->query($query_delete); } return $oidList; }
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 } } }
function computerState($target, $ID) { global $DB, $LANG; $np = new Netport(); $pta = new PluginFusioninventoryAgents(); echo "<br/>"; echo "<div align='center'>"; echo "<form method='post' name='' id='' action=\"" . $target . "\">"; echo "<table class='tab_cadre_fixe'>"; echo "<tr>"; echo "<th colspan='2'>"; echo $LANG['plugin_fusioninventory']["agents"][15]; echo "</th>"; echo "</tr>"; $a_datas = $this->find("`device_id`='" . $ID . "'", "", "1"); if (empty($a_datas)) { // Ajouter une entrée $this->fields['device_id'] = $ID; $this->fields['date_mod'] = date("Y-m-d H:i:s"); $data['ID'] = $this->addToDB(); $data['date_mod'] = $this->fields['date_mod']; $data['state'] = 0; } else { // Afficher l'état foreach ($a_datas as $device_id => $values) { $data = $a_datas[$device_id]; } } echo "<tr class='tab_bg_1'>"; echo "<td align='center'>"; echo convDateTime($data['date_mod']); echo " : </td>"; echo "<td align='center'>"; switch ($data['state']) { case 0: echo $LANG['plugin_fusioninventory']["agents"][16]; break; case 1: echo $LANG['plugin_fusioninventory']["agents"][22]; break; case 2: echo $LANG['plugin_fusioninventory']["agents"][17]; break; case 3: echo $LANG['plugin_fusioninventory']["agents"][18]; break; case 4: echo $LANG['plugin_fusioninventory']["agents"][19]; break; case 5: echo $LANG['plugin_fusioninventory']["agents"][20]; break; case 6: echo $LANG['plugin_fusioninventory']["agents"][21]; break; default: break; } echo "</td>"; echo "</tr>"; $ip = ""; if ($data['state'] == 0 or $data['state'] == 6) { $a_data = $np->find("`on_device`='" . $ID . "' AND `device_type`='1'"); foreach ($a_data as $port_id => $port) { echo "<tr class='tab_bg_1'>"; echo "<td align='center'>"; if (!($fp = fsockopen($port['ifaddr'], 62354, $errno, $errstr, 1))) { echo $port['ifaddr'] . " : </td><td align='center'><b>" . $LANG['plugin_fusioninventory']["task"][9] . "</b>"; } else { echo $port['ifaddr'] . " : </td><td align='center'><b>" . $LANG['plugin_fusioninventory']["task"][8] . "</b>"; $ip = $port['ifaddr']; fclose($fp); } echo "</td>"; echo "</tr>"; } } echo "<tr class='tab_bg_2'>"; echo "<td align='center' colspan='2'>"; $a_datasagent = $pta->find("`on_device`='" . $ID . "' AND `device_type`='1' ", "", "1"); if (!empty($a_datasagent)) { foreach ($a_datasagent as $agent_id => $dataagent) { echo "<input type='hidden' name='agentID' value='" . $agent_id . "'/>"; } } echo "<input type='hidden' name='ID' value='" . $ID . "'/>"; echo "<input type='hidden' name='ip' value='" . $ip . "'/>"; echo "<input type='submit' name='startagent' value=\"" . $LANG['plugin_fusioninventory']["task"][12] . "\" class='submit' >"; echo "</td>"; echo "</tr>"; echo "</table>"; echo "</form>"; echo "</div>"; $glpiroot = GLPI_ROOT . "/plugins/fusioninventory/front/"; if (strstr($_SERVER["PHP_SELF"], "fusioninventory")) { $glpiroot = '../plugins/fusioninventory/front/'; } if ($data['state'] > 0 and $data['state'] < 6) { echo "<script type='text/javascript'>\nExt.getCmp('fusioninventory_1').getUpdater().startAutoRefresh(3,'" . GLPI_ROOT . "/plugins/fusioninventory/front/agents.state.php?ID=" . $ID . "');\n \n </script>"; } else { echo "<script type='text/javascript'>\nExt.getCmp('fusioninventory_1').getUpdater().stopAutoRefresh();\n\n </script>"; } }
function addToDB() { if ($this->getName()) { $cfg_ocs = getOcsConf($_SESSION["ocs_server_id"]); parent::getEmpty(); $this->fields = array(); $this->fields["name"] = $this->getName(); $this->fields["comments"] = $this->port . '\\n' . $this->error; $this->fields["date_mod"] = date("Y-m-d H:i:s"); $this->fields["is_global"] = 0; $this->fields["model"] = ocsImportDropdown("glpi_dropdown_model_printers", "name", $this->driver); if ($this->fgLPT) { $this->fields["flags_par"] = 1; } if ($this->fgCOM) { $this->fields["flags_serial"] = 1; } if ($this->fgUSB) { $this->fields["flags_usb"] = 1; } if ($this->id = parent::addToDB()) { if ($cfg_ocs["default_state"]) { updateState(PRINTER_TYPE, $this->id, $cfg_ocs["default_state"], 0, 0); } // Si connexion directe : connexion avec lien du lieu et du contact foreach ($this->servers as $server => &$queue) { // Si serveur : le lieu et le contact seront ceux du serveur if ($server === $this->server) { $queue->connectToServer($this->id); } else { $queue->connectToUC($this->id); } } // Connexion des files d'impression foreach ($this->queues as $host => &$queue) { if ($host != $queue->server) { $queue->connectToUC($this->id); } } // Connexion IP if ($this->IP != '') { $netport = array(); $netport["ifaddr"] = $this->IP; $netport["ifmac"] = ''; //$line2["MACADDR"]; $netport["iface"] = ocsImportDropdown("glpi_dropdown_iface", "name", "Ethernet"); $netport["name"] = "Ethernet"; $netport["on_device"] = $this->id; $netport["logical_number"] = 0; $netport["device_type"] = PRINTER_TYPE; $np = new Netport(); $np->add($netport); } } } return $this->id; }
/** * Manage connection to unknown device * *@param $p_mac MAC address *@param $p_ip IP address *@return nothing **/ function PortUnknownConnection($p_mac, $p_ip) { $ptud = new PluginFusioninventoryUnknownDevice(); $unknown_infos["name"] = ''; $newID = $ptud->add($unknown_infos); // Add networking_port $np = new Netport(); $port_add["on_device"] = $newID; $port_add["device_type"] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $port_add["ifaddr"] = $p_ip; $port_add['ifmac'] = $p_mac; $dport = $np->add($port_add); $ptsnmp = new PluginFusioninventorySNMP(); $this->connectDB($dport); }
function showAgentWol($on_device, $device_type) { global $LANG; $np = new Netport(); $pfia = new PluginFusioninventoryAgents(); $count_agent_on = 0; $existantantip = array(); $existantantip["127.0.0.1"] = 1; switch ($device_type) { case COMPUTER_TYPE: // Choisir parmi les agents qui repondent et on le SNMP d'activé echo "<input type='hidden' name='device' value='" . $device_type . "-" . $on_device . "' />"; echo "<table>"; $a_agents = $pfia->find('module_wakeonlan=1'); foreach ($a_agents as $IDagent => $data) { $a_portsList = $np->find('on_device=' . $data['on_device'] . ' AND device_type=' . $data['device_type']); foreach ($a_portsList as $ID => $datapl) { if (!isset($existantantip[$datapl['ifaddr']])) { $existantantip[$datapl['ifaddr']] = 1; if ($this->getStateAgent($datapl['ifaddr'], $IDagent)) { $count_agent_on++; } } } } echo "</table>"; break; } if ($count_agent_on == 0) { echo "<tr class='tab_bg_1'>"; echo "<td align='center' colspan='2'>"; echo "<b>" . $LANG['plugin_fusioninventory']["task"][13] . "</b>"; echo "</td>"; echo "</tr>"; } }
function import_netdiscovery($p_xml, $agentKey) { global $DB, $LANG; $test = ''; $p_criteria = array(); $walks = new PluginFusioninventoryWalk(); $ptap = new PluginFusioninventoryAgentsProcesses(); $pta = new PluginFusioninventoryAgents(); $config_discovery = new PluginFusioninventoryConfig(); $np = new Netport(); $ptud = new PluginFusioninventoryUnknownDevice(); if (isset($p_xml->AGENT->START)) { $ptap->updateProcess($p_xml->PROCESSNUMBER, array('start_time_discovery' => date("Y-m-d H:i:s"))); } else { if (isset($p_xml->AGENT->END)) { $ptap->updateProcess($p_xml->PROCESSNUMBER, array('end_time_discovery' => date("Y-m-d H:i:s"))); } else { if (isset($p_xml->AGENT->EXIT)) { $ptap->endProcess($p_xml->PROCESSNUMBER, date("Y-m-d H:i:s")); } else { if (isset($p_xml->AGENT->NBIP)) { $ptap->updateProcess($p_xml->PROCESSNUMBER, array('discovery_nb_ip' => $p_xml->AGENT->NBIP)); } } } } if (isset($p_xml->AGENT->AGENTVERSION)) { $agent = $pta->InfosByKey($agentKey); $agent['fusioninventory_agent_version'] = $p_xml->AGENT->AGENTVERSION; $agent['last_agent_update'] = date("Y-m-d H:i:s"); $pta->update($agent); } $walkdata = ''; $count_discovery_devices = 0; foreach ($p_xml->DEVICE as $discovery) { $count_discovery_devices++; } $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('discovery_nb_found' => $count_discovery_devices)); foreach ($p_xml->DEVICE as $discovery) { if ($discovery->MODELSNMP != "") { $query = "SELECT *\n FROM `glpi_plugin_fusioninventory_model_infos`\n WHERE `discovery_key`='" . $discovery->MODELSNMP . "'\n LIMIT 0,1;"; $result = $DB->query($query); $data = $DB->fetch_assoc($result); $FK_model = $data['ID']; } else { $FK_model = 0; } $discovery->MAC = strtolower($discovery->MAC); if (empty($FK_model)) { $FK_model = 0; } unset($p_criteria); $p_criteria['ip'] = $discovery->IP; if (!empty($discovery->NETBIOSNAME)) { $p_criteria['name'] = $discovery->NETBIOSNAME; } else { if (!empty($discovery->SNMPHOSTNAME)) { $p_criteria['name'] = $discovery->SNMPHOSTNAME; } } $p_criteria['serial'] = $discovery->SERIAL; $p_criteria['macaddr'] = $discovery->MAC; $discovery_criteria = PluginFusioninventoryDiscovery::criteria($p_criteria); if (!$discovery_criteria) { $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('discovery_nb_import' => '1')); // Add in unknown device $ptud->getEmpty(); if (!empty($discovery->NETBIOSNAME)) { $ptud->fields['name'] = $discovery->NETBIOSNAME; } else { if (!empty($discovery->SNMPHOSTNAME)) { $ptud->fields['name'] = $discovery->SNMPHOSTNAME; } } $ptud->fields['dnsname'] = $discovery->DNSHOSTNAME; $ptud->fields['FK_entities'] = $discovery->ENTITY; $ptud->fields['serial'] = $discovery->SERIAL; $ptud->fields['contact'] = $discovery->USERSESSION; if (!empty($discovery->WORKGROUP)) { $ptud->fields['domain'] = Dropdown::importExternal("Domain", $discovery->WORKGROUP, $discovery->ENTITY); } $ptud->fields['comments'] = $discovery->DESCRIPTION; $ptud->fields['type'] = $discovery->TYPE; $ptud->fields['FK_model_infos'] = $FK_model; $ptud->fields['FK_snmp_connection'] = $discovery->AUTHSNMP; if ($discovery->AUTHSNMP != "") { $ptud->fields['snmp'] = 1; } $ptud->fields['location'] = 0; $ptud->fields['deleted'] = 0; if ($ptud->fields['domain'] == '') { $ptud->fields['domain'] = 0; } if ($ptud->fields['type'] == '') { $ptud->fields['type'] = 0; } if ($ptud->fields['snmp'] == '') { $ptud->fields['snmp'] = 0; } if ($ptud->fields['FK_model_infos'] == '') { $ptud->fields['FK_model_infos'] = 0; } if ($ptud->fields['FK_snmp_connection'] == '') { $ptud->fields['FK_snmp_connection'] = 0; } if ($ptud->fields['accepted'] == '') { $ptud->fields['accepted'] = 0; } $explodeprocess = explode("/", $_SESSION['glpi_plugin_fusioninventory_processnumber']); $ptud->fields['FK_agent'] = intval($explodeprocess[1]); $ptud->fields['hub'] = 0; $data = $ptud->fields; unset($data['ID']); $newID = $ptud->add($data); unset($data); // Add networking_port $port_add["on_device"] = $newID; $port_add["device_type"] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $port_add["ifaddr"] = $discovery->IP; $port_add['ifmac'] = $discovery->MAC; $port_add['name'] = $discovery->NETPORTVENDOR; $port_ID = $np->add($port_add); unset($port_add); } else { # Update device //echo "discovery_criteria :".$discovery_criteria; $a_device = explode("||", $discovery_criteria); // $a_device[0] == id, $a_device[1] = type $ci = new commonitem(); $ci->getFromDB($a_device[1], $a_device[0]); $a_lockable = PluginFusioninventoryLock::getLockFields($a_device[1], $a_device[0]); $data = array(); $data['ID'] = $ci->getField('ID'); if ($a_device[1] == PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN) { $data['FK_snmp_connection'] = 0; if ($ci->getField('name') && !in_array('name', $a_lockable)) { if (!empty($discovery->NETBIOSNAME)) { $data['name'] = $discovery->NETBIOSNAME; } else { if (!empty($discovery->SNMPHOSTNAME)) { $data['name'] = $discovery->SNMPHOSTNAME; } } } if ($ci->getField('dnsname') && !in_array('dnsname', $a_lockable)) { $data['dnsname'] = $discovery->DNSHOSTNAME; } if ($ci->getField('FK_entities') && !in_array('FK_entities', $a_lockable)) { $data['FK_entities'] = $discovery->ENTITY; } if ($ci->getField('serial') && !in_array('serial', $a_lockable)) { $data['serial'] = $discovery->SERIAL; } if ($ci->getField('contact') && !in_array('contact', $a_lockable)) { $data['contact'] = $discovery->USERSESSION; } if ($ci->getField('domain') && !in_array('domain', $a_lockable)) { $data['domain'] = 0; if (!empty($discovery->WORKGROUP)) { $data['domain'] = Dropdown::importExternal("Domain", $discovery->WORKGROUP, $discovery->ENTITY); } } if ($ci->getField('FK_snmp_connection') && !in_array('FK_snmp_connection', $a_lockable)) { $data['FK_snmp_connection'] = $discovery->AUTHSNMP; } if ($ci->getField('snmp') && !in_array('snmp', $a_lockable)) { $data['snmp'] = 0; if ($discovery->AUTHSNMP != "") { $data['snmp'] = 1; } } $data['type'] = $discovery->TYPE; $explodeprocess = explode("/", $_SESSION['glpi_plugin_fusioninventory_processnumber']); $data['FK_agent'] = intval($explodeprocess[1]); } if ($ci->getField('FK_model_infos') && !in_array('FK_model_infos', $a_lockable)) { $data['FK_model_infos'] = $FK_model; } if ($ci->getField('comments') && !in_array('comments', $a_lockable)) { $data['comments'] = $discovery->DESCRIPTION; } if ($a_device[1] == NETWORKING_TYPE) { if (!in_array('ifaddr', $a_lockable)) { $data["ifaddr"] = $discovery->IP; } if (!in_array('ifmac', $a_lockable)) { $data['ifmac'] = $discovery->MAC; } } else { // TODO: manage ports $np = new Netport(); $query = "SELECT ID FROM glpi_networking_ports\n WHERE (on_device = '" . $a_device[0] . "' AND device_type = '" . $a_device[1] . "')\n AND `ifaddr` NOT IN ('', '127.0.0.1')\n ORDER BY name, logical_number"; if ($result = $DB->query($query)) { if ($DB->numrows($result) == 1) { $data2 = $DB->fetch_assoc($result); $np->getFromDB($data2["ID"]); $port = array(); $port['ID'] = $data2["ID"]; $port["ifaddr"] = $discovery->IP; $port['ifmac'] = $discovery->MAC; $port['name'] = $discovery->NETPORTVENDOR; $np->update($port); } else { if ($DB->numrows($result) > 1) { $ptae = new PluginFusioninventoryAgentsErrors(); $error_input['ID'] = $a_device[0]; $error_input['TYPE'] = $a_device[1]; $error_input['MESSAGE'] = 'Unable to determine network port of device to update with values : ' . $discovery->IP . '(ip), ' . $discovery->MAC . '(mac), ' . $discovery->NETPORTVENDOR . '(name)'; $error_input['agent_type'] = 'NETDISCOVERY'; $ptae->addError($error_input); } } } } $ci->obj->update($data); $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('discovery_nb_exists' => '1')); } } }
static function showHistory($ID_port) { global $DB, $LANG, $INFOFORM_PAGES, $CFG_GLPI; include GLPI_ROOT . "/plugins/fusioninventory/inc_constants/snmp.mapping.constant.php"; $CommonItem = new CommonItem(); $np = new Netport(); $query = "\n SELECT * FROM(\n SELECT * FROM (\n SELECT ID, date as date, process_number as process_number,\n FK_port_source, FK_port_destination,\n creation as Field, NULL as old_value, NULL as new_value\n\n FROM glpi_plugin_fusioninventory_snmphistoryconnections\n WHERE `FK_port_source`='" . $ID_port . "'\n OR `FK_port_destination`='" . $ID_port . "'\n ORDER BY date DESC\n LIMIT 0,30\n )\n AS DerivedTable1\n UNION ALL\n SELECT * FROM (\n SELECT ID, date_mod as date, FK_process as process_number,\n FK_ports AS FK_port_source, NULL as FK_port_destination,\n Field, old_value, new_value\n\n FROM glpi_plugin_fusioninventory_snmphistories\n WHERE `FK_ports`='" . $ID_port . "'\n ORDER BY date DESC\n LIMIT 0,30\n )\n AS DerivedTable2)\n AS MainTable\n ORDER BY date DESC, ID DESC\n LIMIT 0,30"; //echo $query."<br/>"; $text = "<table class='tab_cadre' cellpadding='5' width='950'>"; $text .= "<tr class='tab_bg_1'>"; $text .= "<th colspan='8'>"; $text .= "Historique"; $text .= "</th>"; $text .= "</tr>"; $text .= "<tr class='tab_bg_1'>"; $text .= "<th>" . $LANG['plugin_fusioninventory']["snmp"][50] . "</th>"; $text .= "<th>" . $LANG["common"][1] . "</th>"; $text .= "<th>" . $LANG["event"][18] . "</th>"; $text .= "<th></th>"; $text .= "<th></th>"; $text .= "<th></th>"; $text .= "<th>" . $LANG["common"][27] . "</th>"; $text .= "</tr>"; if ($result = $DB->query($query)) { while ($data = $DB->fetch_array($result)) { $text .= "<tr class='tab_bg_1'>"; if (!empty($data["FK_port_destination"])) { // Connections and disconnections if ($data['Field'] == '1') { $text .= "<td align='center'><img src='" . GLPI_ROOT . "/plugins/fusioninventory/pics/connection_ok.png'/></td>"; } else { $text .= "<td align='center'><img src='" . GLPI_ROOT . "/plugins/fusioninventory/pics/connection_notok.png'/></td>"; } if ($ID_port == $data["FK_port_source"]) { $np->getFromDB($data["FK_port_destination"]); if (isset($np->fields["on_device"])) { $CommonItem->getFromDB($np->fields["device_type"], $np->fields["on_device"]); $link1 = $CommonItem->getLink(1); $link = "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/networking.port.php?ID=" . $np->fields["ID"] . "\">"; if (rtrim($np->fields["name"]) != "") { $link .= $np->fields["name"]; } else { $link .= $LANG['common'][0]; } $link .= "</a>"; $text .= "<td align='center'>" . $link . " " . $LANG['networking'][25] . " " . $link1 . "</td>"; } else { $text .= "<td align='center'><font color='#ff0000'>" . $LANG['common'][28] . "</font></td>"; } } else { if ($ID_port == $data["FK_port_destination"]) { $np->getFromDB($data["FK_port_source"]); if (isset($np->fields["on_device"])) { $CommonItem->getFromDB($np->fields["device_type"], $np->fields["on_device"]); $link1 = $CommonItem->getLink(1); $link = "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/networking.port.php?ID=" . $np->fields["ID"] . "\">"; if (rtrim($np->fields["name"]) != "") { $link .= $np->fields["name"]; } else { $link .= $LANG['common'][0]; } $link .= "</a>"; $text .= "<td align='center'>" . $link . " " . $LANG['networking'][25] . " " . $link1 . "</td>"; } else { $text .= "<td align='center'><font color='#ff0000'>" . $LANG['common'][28] . "</font></td>"; } } } $text .= "<td align='center' colspan='4'></td>"; $text .= "<td align='center'>" . convDateTime($data["date"]) . "</td>"; } else { // Changes values $text .= "<td align='center' colspan='2'></td>"; $text .= "<td align='center'>" . $FUSIONINVENTORY_MAPPING[NETWORKING_TYPE][$data["Field"]]['name'] . "</td>"; $text .= "<td align='center'>" . $data["old_value"] . "</td>"; $text .= "<td align='center'>-></td>"; $text .= "<td align='center'>" . $data["new_value"] . "</td>"; $text .= "<td align='center'>" . convDateTime($data["date"]) . "</td>"; } $text .= "</tr>"; } } /* $pthc = new PluginFusioninventorySnmphistoryconnection; $data_connections = $pthc->find('`FK_port_source`="'.$ID_port.'" OR `FK_port_destination `="'.$ID_port.'"', '`date` DESC', '0,30'); $query = "SELECT * FROM `glpi_plugin_fusioninventory_snmphistories` WHERE `FK_ports`='".$ID_port."' ORDER BY `date_mod` DESC LIMIT 0,30;"; $text = "<table class='tab_cadre' cellpadding='5' width='950'>"; $text .= "<tr class='tab_bg_1'>"; $text .= "<th colspan='8'>"; $text .= "Historique"; $text .= "</th>"; $text .= "</tr>"; $text .= "<tr class='tab_bg_1'>"; $text .= "<th>".$LANG['plugin_fusioninventory']["snmp"][50]."</th>"; $text .= "<th>".$LANG["common"][1]."</th>"; $text .= "<th>".$LANG["networking"][15]."</th>"; $text .= "<th>".$LANG["event"][18]."</th>"; $text .= "<th></th>"; $text .= "<th></th>"; $text .= "<th></th>"; $text .= "<th>".$LANG["common"][27]."</th>"; $text .= "</tr>"; if ($result=$DB->query($query)) { while ($data=$DB->fetch_array($result)) { $text .= "<tr class='tab_bg_1'>"; if (($data["old_device_ID"] != "0") OR ($data["new_device_ID"] != "0")) { // Connections and disconnections if ($data["old_device_ID"] != "0") { $text .= "<td align='center'>".$LANG['plugin_fusioninventory']["history"][2]."</td>"; $CommonItem->getFromDB($data["old_device_type"],$data["old_device_ID"]); $text .= "<td align='center'>".$CommonItem->getLink(1)."</td>"; $text .= "<td align='center'>".$data["old_value"]."</td>"; } else if ($data["new_device_ID"] != "0") { $text .= "<td align='center'>".$LANG['plugin_fusioninventory']["history"][3]."</td>"; $CommonItem->getFromDB($data["new_device_type"],$data["new_device_ID"]); $text .= "<td align='center'>".$CommonItem->getLink(1)."</td>"; $text .= "<td align='center'>".$data["new_value"]."</td>"; } $text .= "<td align='center' colspan='4'></td>"; $text .= "<td align='center'>".convDateTime($data["date_mod"])."</td>"; } else if (($data["old_device_ID"] == "0") AND ($data["new_device_ID"] == "0") AND ($data["Field"] == "0")) { // Unknown Mac address if (!empty($data["old_value"])) { $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".$LANG['plugin_fusioninventory']["history"][2]."</td>"; $CommonItem->getFromDB($data["old_device_type"],$data["old_device_ID"]); $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".$CommonItem->getLink(1)."</td>"; $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".$data["old_value"]."</td>"; } else if (!empty($data["new_value"])) { $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".$LANG['plugin_fusioninventory']["history"][3]."</td>"; $CommonItem->getFromDB($data["new_device_type"],$data["new_device_ID"]); $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".$CommonItem->getLink(1)."</td>"; $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".$data["new_value"]."</td>"; } $text .= "<td align='center' colspan='4' background='#cf9b9b' class='tab_bg_1_2'></td>"; $text .= "<td align='center' background='#cf9b9b' class='tab_bg_1_2'>".convDateTime($data["date_mod"])."</td>"; } else { // Changes values $text .= "<td align='center' colspan='3'></td>"; $text .= "<td align='center'>".$data["Field"]."</td>"; $text .= "<td align='center'>".$data["old_value"]."</td>"; $text .= "<td align='center'>-></td>"; $text .= "<td align='center'>".$data["new_value"]."</td>"; $text .= "<td align='center'>".convDateTime($data["date_mod"])."</td>"; } $text .= "</tr>"; } } */ $text .= "<tr class='tab_bg_1'>"; $text .= "<th colspan='8'>"; $text .= "<a href='" . GLPI_ROOT . "/plugins/fusioninventory/report/switch_ports.history.php?FK_networking_ports=" . $ID_port . "'>Voir l'historique complet</a>"; $text .= "</th>"; $text .= "</tr>"; $text .= "</table>"; return $text; }
function plugin_pre_item_purge_fusioninventory($parm) { global $DB; if (isset($parm["_item_type_"])) { switch ($parm["_item_type_"]) { case NETWORKING_TYPE: // Delete all ports $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_networking`\n WHERE `FK_networking`='" . $parm["ID"] . "';"; $DB->query($query_delete); $query_select = "SELECT `glpi_plugin_fusioninventory_networking_ports`.`ID`\n FROM `glpi_plugin_fusioninventory_networking_ports`\n LEFT JOIN `glpi_networking_ports`\n ON `glpi_networking_ports`.`ID` = `FK_networking_ports`\n WHERE `on_device`='" . $parm["ID"] . "'\n AND `device_type`='" . NETWORKING_TYPE . "';"; $result = $DB->query($query_select); while ($data = $DB->fetch_array($result)) { $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_networking_ports`\n WHERE `ID`='" . $data["ID"] . "';"; $DB->query($query_delete); } $query_select = "SELECT `glpi_plugin_fusioninventory_networking_ifaddr`.`ID`\n FROM `glpi_plugin_fusioninventory_networking_ifaddr`\n LEFT JOIN `glpi_networking`\n ON `glpi_networking`.`ID` = `FK_networking`\n WHERE `FK_networking`='" . $parm["ID"] . "';"; $result = $DB->query($query_select); while ($data = $DB->fetch_array($result)) { $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_networking_ifaddr`\n WHERE `ID`='" . $data["ID"] . "';"; $DB->query($query_delete); } break; case PRINTER_TYPE: $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_printers`\n WHERE `FK_printers`='" . $parm["ID"] . "';"; $DB->query($query_delete); $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_printers_cartridges`\n WHERE `FK_printers`='" . $parm["ID"] . "';"; $DB->query($query_delete); $query_delete = "DELETE FROM `glpi_plugin_fusioninventory_printers_history`\n WHERE `FK_printers`='" . $parm["ID"] . "';"; $DB->query($query_delete); break; case PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN: // Delete ports and connections if exists $np = new Netport(); $nn = new NetworkPort_NetworkPort(); $query = "SELECT `ID`\n FROM `glpi_networking_ports`\n WHERE `on_device` = '" . $parm["ID"] . "'\n AND `device_type` = '" . PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN . "';"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { if ($nn->getFromDBForNetworkPort($data['ID'])) { $nn->delete($data); } $np->delete(array("ID" => $data["ID"])); } break; } } return $parm; }
function addWakeonlan($pxml) { $pta = new PluginFusioninventoryAgents(); $ptt = new PluginFusioninventoryTask(); $np = new Netport(); $agent = $pta->InfosByKey($pxml->DEVICEID); $sxml_option = $this->sxml->addChild('OPTION'); $sxml_option->addChild('NAME', 'WAKEONLAN'); $tasks = $ptt->ListTask($agent["ID"], "WAKEONLAN"); foreach ($tasks as $task_id => $taskInfos) { if ($taskInfos['device_type'] == COMPUTER_TYPE) { $a_portsList = $np->find('on_device=' . $taskInfos['on_device'] . ' AND device_type="' . COMPUTER_TYPE . '"'); foreach ($a_portsList as $ID => $data) { if ($data['ifaddr'] != "127.0.0.1") { $sxml_param = $sxml_option->addChild('PARAM'); $sxml_param->addAttribute('MAC', $data['ifmac']); $sxml_param->addAttribute('IP', $data['ifaddr']); } } } } }