/** * Import the devices for a computer * * @param $devicetype integer : device type * @param $computers_id integer : glpi computer id. * @param $ocsid integer : ocs computer id (ID). * @param $plugin_ocsinventoryng_ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $import_device array : already imported devices * @param $import_ip array : already imported ip * @param $dohistory boolean : log changes? * * @return Nothing (void). **/ static function updateDevices($devicetype, $computers_id, $ocsid, $plugin_ocsinventoryng_ocsservers_id, $cfg_ocs, $import_device, $import_ip, $dohistory) { global $PluginOcsinventoryngDBocs, $DB; $prevalue = $devicetype . self::FIELD_SEPARATOR; self::checkOCSconnection($plugin_ocsinventoryng_ocsservers_id); $do_clean = false; switch ($devicetype) { case "Item_DeviceMemory": $CompDevice = new $devicetype(); //Memoire if ($cfg_ocs["import_device_memory"]) { $do_clean = true; $query2 = "SELECT*\n FROM `memories`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { // TODO a revoir // pourquoi supprimer tous les importés ? // En 0.83 cette suppression était lié à la présence du tag // IMPORT_TAG_078, et donc exécuté 1 seule fois pour redressement // Cela pete, je pense, tous les lock //if (count($import_device)){ // $dohistory = false; // foreach ($import_device as $key => $val) { // $tmp = explode(self::FIELD_SEPARATOR,$key); // if (isset($tmp[1]) && $tmp[0] == "Item_DeviceMemory") { // $CompDevice->delete(array('id' => $tmp[1], // '_no_history' => true), 1); // unset($import_device[$key]); // } // } //} while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (isset($line2["CAPACITY"]) && $line2["CAPACITY"] != "No") { $ram["designation"] = ""; if ($line2["TYPE"] != "Empty Slot" && $line2["TYPE"] != "Unknown") { $ram["designation"] = $line2["TYPE"]; } if ($line2["DESCRIPTION"]) { if (!empty($ram["designation"])) { $ram["designation"] .= " - "; } $ram["designation"] .= $line2["DESCRIPTION"]; } if (!is_numeric($line2["CAPACITY"])) { $line2["CAPACITY"] = 0; } $ram["size_default"] = $line2["CAPACITY"]; if (!in_array(stripslashes($prevalue . $ram["designation"]), $import_device)) { $ram["frequence"] = $line2["SPEED"]; $ram["devicememorytypes_id"] = Dropdown::importExternal('DeviceMemoryType', $line2["TYPE"]); $DeviceMemory = new DeviceMemory(); $ram_id = $DeviceMemory->import($ram); if ($ram_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicememories_id' => $ram_id, 'size' => $line2["CAPACITY"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $ram["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'size' => $line2["CAPACITY"])); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceHardDrive": $CompDevice = new $devicetype(); //Disque Dur if ($cfg_ocs["import_device_hdd"]) { $do_clean = true; $query2 = "SELECT*\n FROM `storages`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (!empty($line2["DISKSIZE"]) && preg_match("/disk|spare\\sdrive/i", $line2["TYPE"])) { if ($line2["NAME"]) { $dd["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $dd["designation"] = $line2["MODEL"]; } else { $dd["designation"] = "Unknown"; } } if (!is_numeric($line2["DISKSIZE"])) { $line2["DISKSIZE"] = 0; } if (!in_array(stripslashes($prevalue . $dd["designation"]), $import_device)) { $dd["capacity_default"] = $line2["DISKSIZE"]; $DeviceHardDrive = new DeviceHardDrive(); $dd_id = $DeviceHardDrive->import($dd); if ($dd_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'deviceharddrives_id' => $dd_id, 'capacity' => $line2["DISKSIZE"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $dd["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'capacity' => $line2["DISKSIZE"])); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceDrive": $CompDevice = new $devicetype(); //lecteurs if ($cfg_ocs["import_device_drive"]) { $do_clean = true; $query2 = "SELECT*\n FROM `storages`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (empty($line2["DISKSIZE"]) || !preg_match("/disk/i", $line2["TYPE"])) { if ($line2["NAME"]) { $stor["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $stor["designation"] = $line2["MODEL"]; } else { $stor["designation"] = "Unknown"; } } if (!in_array(stripslashes($prevalue . $stor["designation"]), $import_device)) { $DeviceDrive = new DeviceDrive(); $stor_id = $DeviceDrive->import($stor); if ($stor_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicedrives_id' => $stor_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $stor["designation"]), $import_device); unset($import_device[$tmp]); } } } } } break; case "Item_DevicePci": $CompDevice = new $devicetype(); //Modems if ($cfg_ocs["import_device_modem"]) { $do_clean = true; $query2 = "SELECT*\n FROM `modems`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $mdm["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $mdm["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $mdm["comment"] = $line2["TYPE"] . "\r\n" . $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $mdm_id = $DevicePci->import($mdm); if ($mdm_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicepcis_id' => $mdm_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $mdm["designation"]), $import_device); unset($import_device[$tmp]); } } } } //Ports if ($cfg_ocs["import_device_port"]) { $query2 = "SELECT*\n FROM `ports`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $port["designation"] = ""; if ($line2["TYPE"] != "Other") { $port["designation"] .= $line2["TYPE"]; } if ($line2["NAME"] != "Not Specified") { $port["designation"] .= " " . $line2["NAME"]; } else { if ($line2["CAPTION"] != "None") { $port["designation"] .= " " . $line2["CAPTION"]; } } if (!empty($port["designation"])) { if (!in_array(stripslashes($prevalue . $port["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"]) && $line2["DESCRIPTION"] != "None") { $port["comment"] = $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $port_id = $DevicePci->import($port); if ($port_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicepcis_id' => $port_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $port["designation"]), $import_device); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceProcessor": $CompDevice = new $devicetype(); //Processeurs: if ($cfg_ocs["import_device_processor"]) { $do_clean = true; $query = "SELECT*\n FROM `hardware`\n WHERE `ID` = '{$ocsid}'\n ORDER BY `ID`"; $result = $PluginOcsinventoryngDBocs->query($query); if ($PluginOcsinventoryngDBocs->numrows($result) == 1) { $line = $PluginOcsinventoryngDBocs->fetch_array($result); $line = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line)); for ($i = 0; $i < $line["PROCESSORN"]; $i++) { $processor = array(); $processor["designation"] = $line["PROCESSORT"]; if (!is_numeric($line["PROCESSORS"])) { $line["PROCESSORS"] = 0; } $processor["frequency_default"] = $line["PROCESSORS"]; $processor["frequence"] = $line["PROCESSORS"]; if (!in_array(stripslashes($prevalue . $processor["designation"]), $import_device)) { $DeviceProcessor = new DeviceProcessor(); $proc_id = $DeviceProcessor->import($processor); if ($proc_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'deviceprocessors_id' => $proc_id, 'frequency' => $line["PROCESSORS"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $processor["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'frequency' => $line["PROCESSORS"])); unset($import_device[$tmp]); } } } } break; case "Item_DeviceNetworkCard": //Carte reseau if ($cfg_ocs["import_device_iface"] || $cfg_ocs["import_ip"]) { PluginOcsinventoryngNetworkPort::importNetwork($PluginOcsinventoryngDBocs, $cfg_ocs, $ocsid, $computers_id, $dohistory); } break; case "Item_DeviceGraphicCard": $CompDevice = new $devicetype(); //carte graphique if ($cfg_ocs["import_device_gfxcard"]) { $do_clean = true; $query2 = "SELECT DISTINCT(`NAME`) AS NAME,\n `MEMORY`\n FROM `videos`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n AND `NAME` != ''\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $video["designation"] = $line2["NAME"]; if (!is_numeric($line2["MEMORY"])) { $line2["MEMORY"] = 0; } if (!in_array(stripslashes($prevalue . $video["designation"]), $import_device)) { $video["memory_default"] = $line2["MEMORY"]; $DeviceGraphicCard = new DeviceGraphicCard(); $video_id = $DeviceGraphicCard->import($video); if ($video_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicegraphiccards_id' => $video_id, 'memory' => $line2["MEMORY"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $video["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'memory' => $line2["MEMORY"])); unset($import_device[$tmp]); } } } } break; case "Item_DeviceSoundCard": $CompDevice = new $devicetype(); //carte son if ($cfg_ocs["import_device_sound"]) { $do_clean = true; $query2 = "SELECT DISTINCT(`NAME`) AS NAME,\n `DESCRIPTION`\n FROM `sounds`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n AND `NAME` != ''\n ORDER BY `ID`"; $result2 = $PluginOcsinventoryngDBocs->query($query2); if ($PluginOcsinventoryngDBocs->numrows($result2) > 0) { while ($line2 = $PluginOcsinventoryngDBocs->fetch_array($result2)) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (!$cfg_ocs["ocs_db_utf8"] && !Toolbox::seems_utf8($line2["NAME"])) { $line2["NAME"] = Toolbox::encodeInUtf8($line2["NAME"]); } $snd["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $snd["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $snd["comment"] = $line2["DESCRIPTION"]; } $DeviceSoundCard = new DeviceSoundCard(); $snd_id = $DeviceSoundCard->import($snd); if ($snd_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicesoundcards_id' => $snd_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $id = array_search(stripslashes($prevalue . $snd["designation"]), $import_device); unset($import_device[$id]); } } } } break; } // Delete Unexisting Items not found in OCS if ($do_clean && count($import_device)) { foreach ($import_device as $key => $val) { if (!(strpos($key, $devicetype . '$$') === false)) { list($type, $id) = explode(self::FIELD_SEPARATOR, $key); $CompDevice->delete(array('id' => $id, '_no_history' => !$dohistory, 1), true); } } } //TODO Import IP if ($do_clean && count($import_ip) && $devicetype == "Item_DeviceNetworkCard") { foreach ($import_ip as $key => $val) { if ($key > 0) { $netport = new NetworkPort(); $netport->delete(array('id' => $key)); } } } //Alimentation //Carte mere }
/** * Add a new processor component * * @param type $data * @param type $computers_id * @param type $no_history * * @return nothing */ function addProcessor($data, $computers_id, $no_history) { $item_DeviceProcessor = new Item_DeviceProcessor(); $deviceProcessor = new DeviceProcessor(); $processors_id = $deviceProcessor->import($data); $data['deviceprocessors_id'] = $processors_id; $data['itemtype'] = 'Computer'; $data['items_id'] = $computers_id; $data['is_dynamic'] = 1; $data['_no_history'] = $no_history; $item_DeviceProcessor->add($data, array(), !$no_history); }
/** * @param $plugin_ocsinventoryng_ocsservers_id * @param $itemtype * @param int $ID * @param $ocsSnmp * @param $loc_id * @param $dom_id * @param $action * @param bool $linked * @return int */ static function addOrUpdateComputer($plugin_ocsinventoryng_ocsservers_id, $itemtype, $ID = 0, $ocsSnmp, $loc_id, $dom_id, $action, $linked = false) { global $DB; $snmpDevice = new $itemtype(); $cfg_ocs = PluginOcsinventoryngOcsServer::getConfig($plugin_ocsinventoryng_ocsservers_id); $input = array("is_dynamic" => 1, "entities_id" => isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0); if ($cfg_ocs['importsnmp_name'] && $action == "add" || $cfg_ocs['linksnmp_name'] && $linked || $action == "update" && $cfg_ocs['importsnmp_name'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_name'] && $linked) { $input["name"] = $ocsSnmp['META']['NAME']; } if ($cfg_ocs['importsnmp_contact'] && $action == "add" || $cfg_ocs['linksnmp_contact'] && $linked || $action == "update" && $cfg_ocs['importsnmp_name'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_name'] && $linked) { $input["contact"] = $ocsSnmp['META']['CONTACT']; } if ($cfg_ocs['importsnmp_comment'] && $action == "add" || $cfg_ocs['linksnmp_comment'] && $linked || $action == "update" && $cfg_ocs['importsnmp_name'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_name'] && $linked) { $input["comment"] = $ocsSnmp['META']['DESCRIPTION']; } if ($loc_id > 0) { $input["locations_id"] = $loc_id; } if ($dom_id > 0 && $itemtype != "Phone") { $input["domains_id"] = $dom_id; } $id_item = 0; if ($action == "add") { $id_item = $snmpDevice->add($input, array('unicity_error_message' => true), $cfg_ocs['history_hardware']); } else { $input["id"] = $ID; $id_item = $ID; if ($snmpDevice->getFromDB($id_item)) { $input["entities_id"] = $snmpDevice->fields['entities_id']; } $snmpDevice->update($input, $cfg_ocs['history_hardware'], array('unicity_error_message' => false, '_no_history' => !$cfg_ocs['history_hardware'])); } if ($id_item > 0 && isset($ocsSnmp['MEMORIES']) && ($cfg_ocs['importsnmp_computermemory'] && $action == "add" || $cfg_ocs['linksnmp_computermemory'] && $linked || $action == "update" && $cfg_ocs['importsnmp_computermemory'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_computermemory'] && $linked) && count($ocsSnmp['MEMORIES']) > 0 && $ocsSnmp['MEMORIES'][0]['CAPACITY'] > 0) { $dev['designation'] = __('Computer Memory', 'ocsinventoryng'); $item = new $itemtype(); $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0; if ($item->getFromDB($id_item)) { $entity = $item->fields['entities_id']; } $dev['entities_id'] = $entity; $device = new DeviceMemory(); $device_id = $device->import($dev); if ($device_id) { $CompDevice = new Item_DeviceMemory(); if ($cfg_ocs['history_devices']) { $table = getTableForItemType("Item_DeviceMemory"); $query = "DELETE\n FROM `" . $table . "`\n WHERE `items_id` = '" . $id_item . "'\n AND `itemtype` = '" . $itemtype . "'"; $DB->query($query); } // CANNOT USE BEFORE 9.1.2 - for _no_history problem // $CompDevice->deleteByCriteria(array('items_id' => $id_item, // 'itemtype' => $itemtype), 1); $CompDevice->add(array('items_id' => $id_item, 'itemtype' => $itemtype, 'size' => $ocsSnmp['MEMORIES'][0]['CAPACITY'], 'entities_id' => $entity, 'devicememories_id' => $device_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } if ($id_item > 0 && isset($ocsSnmp['NETWORKS']) && ($cfg_ocs['importsnmp_computernetworkcards'] && $action == "add" || $cfg_ocs['linksnmp_computernetworkcards'] && $linked || $action == "update" && $cfg_ocs['importsnmp_computernetworkcards'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_computernetworkcards'] && $linked) && count($ocsSnmp['NETWORKS']) > 0) { $CompDevice = new Item_DeviceNetworkCard(); if ($cfg_ocs['history_devices']) { $table = getTableForItemType("Item_DeviceNetworkCard"); $query = "DELETE\n FROM `" . $table . "`\n WHERE `items_id` = '" . $id_item . "'\n AND `itemtype` = '" . $itemtype . "'"; $DB->query($query); } // CANNOT USE BEFORE 9.1.2 - for _no_history problem // $CompDevice->deleteByCriteria(array('items_id' => $id_item, // 'itemtype' => $itemtype), 1); foreach ($ocsSnmp['NETWORKS'] as $k => $net) { $dev["designation"] = $net['SLOT']; $dev["comment"] = $net['TYPE']; $mac = $net['MACADDR']; /*$speed = 0; if (strstr($processor['SPEED'], "GHz")) { $speed = str_replace("GHz", "", $processor['SPEED']); $speed = $speed * 1000; } if (strstr($processor['SPEED'], "MHz")) { $speed = str_replace("MHz", "", $processor['SPEED']); }*/ $item = new $itemtype(); $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0; if ($item->getFromDB($id_item)) { $entity = $item->fields['entities_id']; } $dev['entities_id'] = $entity; $device = new DeviceNetworkCard(); $device_id = $device->import($dev); if ($device_id) { $CompDevice->add(array('items_id' => $id_item, 'itemtype' => $itemtype, 'mac' => $mac, 'entities_id' => $entity, 'devicenetworkcards_id' => $device_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } } if ($id_item > 0 && isset($ocsSnmp['SOFTWARES']) && ($cfg_ocs['importsnmp_computersoftwares'] && $action == "add" || $cfg_ocs['linksnmp_computersoftwares'] && $linked || $action == "update" && $cfg_ocs['importsnmp_computersoftwares'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_computersoftwares'] && $linked) && count($ocsSnmp['SOFTWARES']) > 0) { $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0; if ($item->getFromDB($id_item)) { $entity = $item->fields['entities_id']; } PluginOcsinventoryngOcsServer::updateSoftware($cfg_ocs, $id_item, $ocsSnmp["SOFTWARES"], $entity); } if ($id_item > 0 && isset($ocsSnmp['CPU']) && ($cfg_ocs['importsnmp_computerprocessors'] && $action == "add" || $cfg_ocs['linksnmp_computerprocessors'] && $linked || $action == "update" && $cfg_ocs['importsnmp_computerprocessors'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_computerprocessors'] && $linked) && count($ocsSnmp['CPU']) > 0) { $CompDevice = new Item_DeviceProcessor(); if ($cfg_ocs['history_devices']) { $table = getTableForItemType("Item_DeviceProcessor"); $query = "DELETE\n FROM `" . $table . "`\n WHERE `items_id` = '" . $id_item . "'\n AND `itemtype` = '" . $itemtype . "'"; $DB->query($query); } // CANNOT USE BEFORE 9.1.2 - for _no_history problem // $CompDevice->deleteByCriteria(array('items_id' => $id_item, // 'itemtype' => $itemtype), 1); foreach ($ocsSnmp['CPU'] as $k => $processor) { $dev["designation"] = $processor['TYPE']; $dev["manufacturers_id"] = Dropdown::importExternal('Manufacturer', PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $processor['MANUFACTURER'])); $speed = 0; if (strstr($processor['SPEED'], "GHz")) { $speed = str_replace("GHz", "", $processor['SPEED']); $speed = $speed * 1000; } if (strstr($processor['SPEED'], "MHz")) { $speed = str_replace("MHz", "", $processor['SPEED']); } $item = new $itemtype(); $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0; if ($item->getFromDB($id_item)) { $entity = $item->fields['entities_id']; } $dev['entities_id'] = $entity; $device = new DeviceProcessor(); $device_id = $device->import($dev); if ($device_id) { $CompDevice->add(array('items_id' => $id_item, 'itemtype' => $itemtype, 'frequency' => $speed, 'entities_id' => $entity, 'deviceprocessors_id' => $device_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } } if ($id_item > 0 && isset($ocsSnmp['VIRTUALMACHINES']) && ($cfg_ocs['importsnmp_computervm'] && $action == "add" || $cfg_ocs['linksnmp_computervm'] && $linked || $action == "update" && $cfg_ocs['importsnmp_computervm'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_computervm'] && $linked) && count($ocsSnmp['VIRTUALMACHINES']) > 0) { $already_processed = array(); $virtualmachine = new ComputerVirtualMachine(); foreach ($ocsSnmp['VIRTUALMACHINES'] as $k => $ocsVirtualmachine) { $ocsVirtualmachine = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($ocsVirtualmachine)); $vm = array(); $vm['name'] = $ocsVirtualmachine['NAME']; $vm['vcpu'] = $ocsVirtualmachine['CPU']; $vm['ram'] = $ocsVirtualmachine['MEMORY']; $vm['uuid'] = $ocsVirtualmachine['UUID']; $vm['computers_id'] = $id_item; $vm['is_dynamic'] = 1; $vm['virtualmachinestates_id'] = Dropdown::importExternal('VirtualMachineState', $ocsVirtualmachine['POWER']); //$vm['virtualmachinetypes_id'] = Dropdown::importExternal('VirtualMachineType', $ocsVirtualmachine['VMTYPE']); //$vm['virtualmachinesystems_id'] = Dropdown::importExternal('VirtualMachineType', $ocsVirtualmachine['SUBSYSTEM']); $query = "SELECT `id`\n FROM `glpi_computervirtualmachines`\n WHERE `computers_id`='{$id_item}'\n AND `is_dynamic`"; if ($ocsVirtualmachine['UUID']) { $query .= " AND `uuid`='" . $ocsVirtualmachine['UUID'] . "'"; } else { // Failback on name $query .= " AND `name`='" . $ocsVirtualmachine['NAME'] . "'"; } $results = $DB->query($query); if ($DB->numrows($results) > 0) { $id = $DB->result($results, 0, 'id'); } else { $id = 0; } if (!$id) { $virtualmachine->reset(); $id_vm = $virtualmachine->add($vm, array(), $cfg_ocs['history_vm']); if ($id_vm) { $already_processed[] = $id_vm; } } else { if ($virtualmachine->getFromDB($id)) { $vm['id'] = $id; $virtualmachine->update($vm, $cfg_ocs['history_vm']); } $already_processed[] = $id; } // Delete Unexisting Items not found in OCS //Look for all ununsed virtual machines $query = "SELECT `id`\n FROM `glpi_computervirtualmachines`\n WHERE `computers_id`='{$id_item}'\n AND `is_dynamic`"; if (!empty($already_processed)) { $query .= "AND `id` NOT IN (" . implode(',', $already_processed) . ")"; } foreach ($DB->request($query) as $data) { //Delete all connexions $virtualmachine->delete(array('id' => $data['id'], '_ocsservers_id' => $plugin_ocsinventoryng_ocsservers_id, '_no_history' => !$cfg_ocs['history_vm']), true, $cfg_ocs['history_vm']); } } } if ($id_item > 0 && ($cfg_ocs['importsnmp_createport'] && $action == "add" || $cfg_ocs['linksnmp_createport'] && $linked || $action == "update" && $cfg_ocs['importsnmp_createport'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_createport'] && $linked)) { //Add network port $ip = $ocsSnmp['META']['IPADDR']; $mac = $ocsSnmp['META']['MACADDR']; $np = new NetworkPort(); $np->getFromDBByQuery("WHERE `mac` LIKE '{$mac}' AND `items_id` = '{$id_item}' AND `itemtype` LIKE '{$itemtype}' "); if (count($np->fields) < 1) { $item = new $itemtype(); $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0; if ($item->getFromDB($id_item)) { $entity = $item->fields['entities_id']; } $port_input = array('name' => $ocsSnmp['META']['NAME'], 'mac' => $mac, 'items_id' => $id_item, 'itemtype' => $itemtype, 'instantiation_type' => "NetworkPortEthernet", "entities_id" => $entity, "NetworkName__ipaddresses" => array("-100" => $ip), '_create_children' => 1, 'is_deleted' => 0); $np->add($port_input, array(), $cfg_ocs['history_network']); } } return $id_item; }
/** * Import the devices for a computer * * @param $devicetype integer : device type * @param $computers_id integer : glpi computer id. * @param $ocsid integer : ocs computer id (ID). * @param $plugin_ocsinventoryng_ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $import_device array : already imported devices * @param $import_ip array : already imported ip * @param $dohistory boolean : log changes? * * @return Nothing (void). **/ static function updateDevices($devicetype, $computers_id, $ocsComputer, $plugin_ocsinventoryng_ocsservers_id, $cfg_ocs, $import_device, $import_ip, $dohistory) { global $DB; $prevalue = $devicetype . self::FIELD_SEPARATOR; $do_clean = false; $comp = new Computer(); $comp->getFromDB($computers_id); $entities_id = $comp->fields['entities_id']; switch ($devicetype) { case "Item_DeviceMemory": $CompDevice = new $devicetype(); //Memoire $do_clean = true; if ($ocsComputer) { // TODO a revoir // pourquoi supprimer tous les importés ? // En 0.83 cette suppression était lié à la présence du tag // IMPORT_TAG_078, et donc exécuté 1 seule fois pour redressement // Cela pete, je pense, tous les lock //if (count($import_device)){ // $dohistory = false; // foreach ($import_device as $key => $val) { // $tmp = explode(self::FIELD_SEPARATOR,$key); // if (isset($tmp[1]) && $tmp[0] == "Item_DeviceMemory") { // $CompDevice->delete(array('id' => $tmp[1], // '_no_history' => true), 1); // unset($import_device[$key]); // } // } //} if (isset($ocsComputer['MEMORIES'])) { foreach ($ocsComputer['MEMORIES'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (isset($line2["CAPACITY"]) && $line2["CAPACITY"] != "No") { $ram["designation"] = ""; if ($line2["TYPE"] != "Empty Slot" && $line2["TYPE"] != "Unknown") { $ram["designation"] = $line2["TYPE"]; } if ($line2["DESCRIPTION"]) { if (!empty($ram["designation"])) { $ram["designation"] .= " - "; } $ram["designation"] .= $line2["DESCRIPTION"]; } if (!is_numeric($line2["CAPACITY"])) { $line2["CAPACITY"] = 0; } $ram["size_default"] = $line2["CAPACITY"]; $ram["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $ram["designation"]), $import_device)) { $ram["frequence"] = $line2["SPEED"]; $ram["devicememorytypes_id"] = Dropdown::importExternal('DeviceMemoryType', $line2["TYPE"]); $DeviceMemory = new DeviceMemory(); $ram_id = $DeviceMemory->import($ram); if ($ram_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicememories_id' => $ram_id, 'size' => $line2["CAPACITY"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $ram["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'size' => $line2["CAPACITY"])); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceHardDrive": $CompDevice = new $devicetype(); //Disque Dur $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['STORAGES'])) { foreach ($ocsComputer['STORAGES'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (!empty($line2["DISKSIZE"]) && preg_match("/disk|spare\\sdrive/i", $line2["TYPE"])) { if ($line2["NAME"]) { $dd["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $dd["designation"] = $line2["MODEL"]; } else { $dd["designation"] = "Unknown"; } } if (!is_numeric($line2["DISKSIZE"])) { $line2["DISKSIZE"] = 0; } $dd["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $dd["designation"]), $import_device)) { $dd["capacity_default"] = $line2["DISKSIZE"]; $DeviceHardDrive = new DeviceHardDrive(); $dd_id = $DeviceHardDrive->import($dd); if ($dd_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'deviceharddrives_id' => $dd_id, 'serial' => $line2["SERIALNUMBER"], 'capacity' => $line2["DISKSIZE"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $dd["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'capacity' => $line2["DISKSIZE"], 'serial' => $line2["SERIALNUMBER"])); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceDrive": $CompDevice = new $devicetype(); //lecteurs $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['STORAGES'])) { foreach ($ocsComputer['STORAGES'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (empty($line2["DISKSIZE"]) || !preg_match("/disk/i", $line2["TYPE"])) { if ($line2["NAME"]) { $stor["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $stor["designation"] = $line2["MODEL"]; } else { $stor["designation"] = "Unknown"; } } $stor["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $stor["designation"]), $import_device)) { $DeviceDrive = new DeviceDrive(); $stor_id = $DeviceDrive->import($stor); if ($stor_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicedrives_id' => $stor_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $stor["designation"]), $import_device); unset($import_device[$tmp]); } } } } } break; case "Item_DevicePci": $CompDevice = new $devicetype(); //Modems $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['MODEMS'])) { foreach ($ocsComputer['MODEMS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $mdm["designation"] = $line2["NAME"]; $mdm["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $mdm["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $mdm["comment"] = $line2["TYPE"] . "\r\n" . $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $mdm_id = $DevicePci->import($mdm); if ($mdm_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicepcis_id' => $mdm_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $mdm["designation"]), $import_device); unset($import_device[$tmp]); } } } } //Ports if ($ocsComputer) { if (isset($ocsComputer['PORTS'])) { foreach ($ocsComputer['PORTS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $port["designation"] = ""; if ($line2["TYPE"] != "Other") { $port["designation"] .= $line2["TYPE"]; } if ($line2["NAME"] != "Not Specified") { $port["designation"] .= " " . $line2["NAME"]; } else { if ($line2["CAPTION"] != "None") { $port["designation"] .= " " . $line2["CAPTION"]; } } $port["entities_id"] = $entities_id; if (!empty($port["designation"])) { if (!in_array(stripslashes($prevalue . $port["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"]) && $line2["DESCRIPTION"] != "None") { $port["comment"] = $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $port_id = $DevicePci->import($port); if ($port_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicepcis_id' => $port_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $port["designation"]), $import_device); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceProcessor": $CompDevice = new $devicetype(); //Processeurs: $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['HARDWARE'])) { $line = $ocsComputer['HARDWARE']; $line = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line)); for ($i = 0; $i < $line["PROCESSORN"]; $i++) { $processor = array(); $processor["designation"] = $line["PROCESSORT"]; if (!is_numeric($line["PROCESSORS"])) { $line["PROCESSORS"] = 0; } $processor["frequency_default"] = $line["PROCESSORS"]; $processor["frequence"] = $line["PROCESSORS"]; $processor["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $processor["designation"]), $import_device)) { $DeviceProcessor = new DeviceProcessor(); $proc_id = $DeviceProcessor->import($processor); if ($proc_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'deviceprocessors_id' => $proc_id, 'frequency' => $line["PROCESSORS"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $processor["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'frequency' => $line["PROCESSORS"])); unset($import_device[$tmp]); } } } } break; case "Item_DeviceNetworkCard": //Carte reseau PluginOcsinventoryngNetworkPort::importNetwork($plugin_ocsinventoryng_ocsservers_id, $cfg_ocs, $ocsComputer, $computers_id, $dohistory, $entities_id); break; case "Item_DeviceGraphicCard": $CompDevice = new $devicetype(); //carte graphique $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['VIDEOS'])) { foreach ($ocsComputer['VIDEOS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if ($line2['NAME']) { $video["designation"] = $line2["NAME"]; $video["entities_id"] = $entities_id; if (!is_numeric($line2["MEMORY"])) { $line2["MEMORY"] = 0; } if (!in_array(stripslashes($prevalue . $video["designation"]), $import_device)) { $video["memory_default"] = $line2["MEMORY"]; $DeviceGraphicCard = new DeviceGraphicCard(); $video_id = $DeviceGraphicCard->import($video); if ($video_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicegraphiccards_id' => $video_id, 'memory' => $line2["MEMORY"], 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $video["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'memory' => $line2["MEMORY"])); unset($import_device[$tmp]); } } } } } break; case "Item_DeviceSoundCard": $CompDevice = new $devicetype(); //carte son $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['SOUNDS'])) { foreach ($ocsComputer['SOUNDS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if ($line2['NAME']) { if (!$cfg_ocs["ocs_db_utf8"] && !Toolbox::seems_utf8($line2["NAME"])) { $line2["NAME"] = Toolbox::encodeInUtf8($line2["NAME"]); } $snd["entities_id"] = $entities_id; $snd["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $snd["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $snd["comment"] = $line2["DESCRIPTION"]; } $DeviceSoundCard = new DeviceSoundCard(); $snd_id = $DeviceSoundCard->import($snd); if ($snd_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicesoundcards_id' => $snd_id, 'is_dynamic' => 1, '_no_history' => !$dohistory)); } } else { $id = array_search(stripslashes($prevalue . $snd["designation"]), $import_device); unset($import_device[$id]); } } } } } break; case "PluginOcsinventoryngItem_DeviceBiosdata": $CompDevice = new $devicetype(); //Bios $do_clean = true; if ($ocsComputer) { if (isset($ocsComputer['BIOS'])) { $bios["designation"] = $ocsComputer['BIOS']["BVERSION"]; $bios["assettag"] = $ocsComputer['BIOS']["ASSETTAG"]; $bios["entities_id"] = $entities_id; //$date = str_replace("/", "-", $ocsComputer['BIOS']["BDATE"]); //$date = date("Y-m-d", strtotime($date)); $bios["date"] = $ocsComputer['BIOS']["BDATE"]; $bios["manufacturers_id"] = Dropdown::importExternal('Manufacturer', self::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsComputer['BIOS']["SMANUFACTURER"])); if (!in_array(stripslashes($prevalue . $bios["designation"]), $import_device)) { $DeviceBios = new PluginOcsinventoryngDeviceBiosdata(); $bios_id = $DeviceBios->import($bios); if ($bios_id) { $devID = $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'plugin_ocsinventoryng_devicebiosdatas_id' => $bios_id, 'is_dynamic' => 1, 'entities_id' => $entities_id, '_no_history' => !$dohistory)); } } else { $tmp = array_search(stripslashes($prevalue . $bios["designation"]), $import_device); unset($import_device[$tmp]); } } } break; } // Delete Unexisting Items not found in OCS if ($do_clean && count($import_device)) { foreach ($import_device as $key => $val) { if (!(strpos($key, $devicetype . '$$') === false)) { list($type, $id) = explode(self::FIELD_SEPARATOR, $key); $CompDevice->delete(array('id' => $id, '_no_history' => !$dohistory, 1), true); } } } //TODO Import IP if ($do_clean && count($import_ip) && $devicetype == "Item_DeviceNetworkCard") { foreach ($import_ip as $key => $val) { if ($key > 0) { $netport = new NetworkPort(); $netport->delete(array('id' => $key)); } } } //Alimentation //Carte mere }
/** * Import the devices for a computer * * @param $devicetype integer : device type * @param $computers_id integer : glpi computer id. * @param $ocsComputer * @param $plugin_ocsinventoryng_ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $import_device array : already imported devices * @param $import_ip array : already imported ip * @return Nothing . * @internal param int $ocsid : ocs computer id (ID). * @internal param bool $dohistory : log changes? * */ static function updateDevices($devicetype, $computers_id, $ocsComputer, $plugin_ocsinventoryng_ocsservers_id, $cfg_ocs, $import_device, $import_ip) { $prevalue = $devicetype . self::FIELD_SEPARATOR; $do_clean = false; $comp = new Computer(); $comp->getFromDB($computers_id); $entities_id = $comp->fields['entities_id']; switch ($devicetype) { case "PluginOcsinventoryngItem_DeviceBiosdata": $CompDevice = new $devicetype(); //Bios $do_clean = true; $bios["designation"] = $ocsComputer["BVERSION"]; $bios["assettag"] = $ocsComputer["ASSETTAG"]; $bios["entities_id"] = $entities_id; //$date = str_replace("/", "-", $ocsComputer['BIOS']["BDATE"]); //$date = date("Y-m-d", strtotime($date)); $bios["date"] = $ocsComputer["BDATE"]; $bios["manufacturers_id"] = Dropdown::importExternal('Manufacturer', self::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsComputer["SMANUFACTURER"])); if (!in_array(stripslashes($prevalue . $bios["designation"]), $import_device)) { $DeviceBios = new PluginOcsinventoryngDeviceBiosdata(); $bios_id = $DeviceBios->import($bios); if ($bios_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'plugin_ocsinventoryng_devicebiosdatas_id' => $bios_id, 'is_dynamic' => 1, 'entities_id' => $entities_id), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $bios["designation"]), $import_device); unset($import_device[$tmp]); } break; case "Item_DeviceMemory": //MEMORIES $CompDevice = new $devicetype(); $do_clean = true; foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (isset($line2["CAPACITY"]) && $line2["CAPACITY"] != "No") { $ram["designation"] = ""; if ($line2["TYPE"] != "Empty Slot" && $line2["TYPE"] != "Unknown") { $ram["designation"] = $line2["TYPE"]; } if ($line2["DESCRIPTION"]) { if (!empty($ram["designation"])) { $ram["designation"] .= " - "; } $ram["designation"] .= $line2["DESCRIPTION"]; } if (!is_numeric($line2["CAPACITY"])) { $line2["CAPACITY"] = 0; } $ram["size_default"] = $line2["CAPACITY"]; $ram["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $ram["designation"]), $import_device)) { $ram["frequence"] = $line2["SPEED"]; $ram["devicememorytypes_id"] = Dropdown::importExternal('DeviceMemoryType', $line2["TYPE"]); $DeviceMemory = new DeviceMemory(); $ram_id = $DeviceMemory->import($ram); if ($ram_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicememories_id' => $ram_id, 'size' => $line2["CAPACITY"], 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $ram["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'size' => $line2["CAPACITY"]), $cfg_ocs['history_devices']); unset($import_device[$tmp]); } } } break; case "Item_DeviceHardDrive": $CompDevice = new $devicetype(); //Disque Dur $do_clean = true; foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (!empty($line2["DISKSIZE"]) && preg_match("/disk|spare\\sdrive/i", $line2["TYPE"])) { if ($line2["NAME"]) { $dd["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $dd["designation"] = $line2["MODEL"]; } else { $dd["designation"] = "Unknown"; } } if (!is_numeric($line2["DISKSIZE"])) { $line2["DISKSIZE"] = 0; } $dd["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $dd["designation"]), $import_device)) { $dd["capacity_default"] = $line2["DISKSIZE"]; $DeviceHardDrive = new DeviceHardDrive(); $dd_id = $DeviceHardDrive->import($dd); if ($dd_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'deviceharddrives_id' => $dd_id, 'serial' => $line2["SERIALNUMBER"], 'capacity' => $line2["DISKSIZE"], 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $dd["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'capacity' => $line2["DISKSIZE"], 'serial' => $line2["SERIALNUMBER"]), $cfg_ocs['history_devices']); unset($import_device[$tmp]); } } } break; case "Item_DeviceDrive": $CompDevice = new $devicetype(); //lecteurs $do_clean = true; foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if (empty($line2["DISKSIZE"]) || !preg_match("/disk/i", $line2["TYPE"])) { if ($line2["NAME"]) { $stor["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $stor["designation"] = $line2["MODEL"]; } else { $stor["designation"] = "Unknown"; } } $stor["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $stor["designation"]), $import_device)) { $DeviceDrive = new DeviceDrive(); $stor_id = $DeviceDrive->import($stor); if ($stor_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicedrives_id' => $stor_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $stor["designation"]), $import_device); unset($import_device[$tmp]); } } } break; case "Item_DevicePci": if (isset($ocsComputer['MODEMS'])) { $CompDevice = new $devicetype(); //Modems $do_clean = true; foreach ($ocsComputer['MODEMS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $mdm["designation"] = $line2["NAME"]; $mdm["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $mdm["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $mdm["comment"] = $line2["TYPE"] . "\r\n" . $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $mdm_id = $DevicePci->import($mdm); if ($mdm_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicepcis_id' => $mdm_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $mdm["designation"]), $import_device); unset($import_device[$tmp]); } } } //Ports if (isset($ocsComputer['PORTS'])) { $CompDevice = new $devicetype(); foreach ($ocsComputer['PORTS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $port["designation"] = ""; if ($line2["TYPE"] != "Other") { $port["designation"] .= $line2["TYPE"]; } if ($line2["NAME"] != "Not Specified") { $port["designation"] .= " " . $line2["NAME"]; } else { if ($line2["CAPTION"] != "None") { $port["designation"] .= " " . $line2["CAPTION"]; } } $port["entities_id"] = $entities_id; if (!empty($port["designation"])) { if (!in_array(stripslashes($prevalue . $port["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"]) && $line2["DESCRIPTION"] != "None") { $port["comment"] = $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $port_id = $DevicePci->import($port); if ($port_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicepcis_id' => $port_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $port["designation"]), $import_device); unset($import_device[$tmp]); } } } } //Slots if (isset($ocsComputer['SLOTS'])) { $CompDevice = new $devicetype(); $do_clean = true; foreach ($ocsComputer['SLOTS'] as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if ($line2['NAME']) { if (!$cfg_ocs["ocs_db_utf8"] && !Toolbox::seems_utf8($line2["NAME"])) { $line2["NAME"] = Toolbox::encodeInUtf8($line2["NAME"]); } $pci["entities_id"] = $entities_id; $pci["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $pci["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $pci["comment"] = $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $pci_id = $DevicePci->import($pci); if ($pci_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicepcis_id' => $pci_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $id = array_search(stripslashes($prevalue . $pci["designation"]), $import_device); unset($import_device[$id]); } } } } break; case "Item_DeviceProcessor": $CompDevice = new $devicetype(); //Processeurs: $do_clean = true; foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); $processor = array(); $processor["designation"] = $line2["TYPE"]; if (!is_numeric($line2["SPEED"])) { $line2["SPEED"] = 0; } $processor["manufacturers_id"] = Dropdown::importExternal('Manufacturer', self::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $line2["MANUFACTURER"])); $processor["frequency_default"] = $line2["SPEED"]; $processor["nbcores_default"] = $line2["CORES"]; //$processor["nbthreads_default"] = $line2["LOGICAL_CPUS"]; $processor["frequence"] = $line2["CURRENT_SPEED"]; $processor["entities_id"] = $entities_id; if (!in_array(stripslashes($prevalue . $processor["designation"]), $import_device)) { $DeviceProcessor = new DeviceProcessor(); $proc_id = $DeviceProcessor->import($processor); if ($proc_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'deviceprocessors_id' => $proc_id, 'frequency' => $line2["SPEED"], 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $processor["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'frequency' => $line2["SPEED"]), $cfg_ocs['history_devices']); unset($import_device[$tmp]); } } break; case "Item_DeviceNetworkCard": //Carte reseau PluginOcsinventoryngNetworkPort::importNetwork($cfg_ocs, $ocsComputer, $computers_id, $entities_id); break; case "Item_DeviceGraphicCard": $CompDevice = new $devicetype(); //carte graphique $do_clean = true; foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if ($line2['NAME']) { $video["designation"] = $line2["NAME"]; $video["entities_id"] = $entities_id; if (!is_numeric($line2["MEMORY"])) { $line2["MEMORY"] = 0; } if (!in_array(stripslashes($prevalue . $video["designation"]), $import_device)) { $video["memory_default"] = $line2["MEMORY"]; $DeviceGraphicCard = new DeviceGraphicCard(); $video_id = $DeviceGraphicCard->import($video); if ($video_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicegraphiccards_id' => $video_id, 'memory' => $line2["MEMORY"], 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $video["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'memory' => $line2["MEMORY"]), $cfg_ocs['history_devices']); unset($import_device[$tmp]); } } } break; case "Item_DeviceSoundCard": $CompDevice = new $devicetype(); //carte son $do_clean = true; foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if ($line2['NAME']) { if (!$cfg_ocs["ocs_db_utf8"] && !Toolbox::seems_utf8($line2["NAME"])) { $line2["NAME"] = Toolbox::encodeInUtf8($line2["NAME"]); } $snd["entities_id"] = $entities_id; $snd["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $snd["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $snd["comment"] = $line2["DESCRIPTION"]; } $DeviceSoundCard = new DeviceSoundCard(); $snd_id = $DeviceSoundCard->import($snd); if ($snd_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicesoundcards_id' => $snd_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $id = array_search(stripslashes($prevalue . $snd["designation"]), $import_device); unset($import_device[$id]); } } } break; case "Item_DeviceMotherboard": $CompDevice = new $devicetype(); //Bios $do_clean = true; $mb["designation"] = $ocsComputer["MMODEL"]; $mb["entities_id"] = $entities_id; $mb["manufacturers_id"] = Dropdown::importExternal('Manufacturer', self::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsComputer["MMANUFACTURER"])); if (!in_array(stripslashes($prevalue . $mb["designation"]), $import_device)) { $DeviceMB = new DeviceMotherboard(); $devicemotherboards_id = $DeviceMB->import($mb); if ($devicemotherboards_id) { $serial = $ocsComputer["MSN"]; $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'devicemotherboards_id' => $devicemotherboards_id, 'is_dynamic' => 1, 'serial' => $serial, 'entities_id' => $entities_id), array(), $cfg_ocs['history_devices']); } } else { $tmp = array_search(stripslashes($prevalue . $mb["designation"]), $import_device); unset($import_device[$tmp]); } break; case "Item_DeviceControl": //controllers $do_clean = true; $CompDevice = new $devicetype(); foreach ($ocsComputer as $line2) { $line2 = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line2)); if ($line2['NAME']) { if (!$cfg_ocs["ocs_db_utf8"] && !Toolbox::seems_utf8($line2["NAME"])) { $line2["NAME"] = Toolbox::encodeInUtf8($line2["NAME"]); } $ctrl["entities_id"] = $entities_id; $ctrl["designation"] = $line2["NAME"]; //TODO : OCS TYPE = IDE Controller // GLPI : interface = IDE //$ctrl["interfacetypes_id"] = $line2["TYPE"]; $ctrl["manufacturers_id"] = Dropdown::importExternal('Manufacturer', self::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $line2["MANUFACTURER"])); if (!in_array(stripslashes($prevalue . $ctrl["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $ctrl["comment"] = $line2["DESCRIPTION"]; } $DeviceControl = new DeviceControl(); $ctrl_id = $DeviceControl->import($ctrl); if ($ctrl_id) { $CompDevice->add(array('items_id' => $computers_id, 'itemtype' => 'Computer', 'entities_id' => $entities_id, 'devicecontrols_id' => $ctrl_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']); } } else { $id = array_search(stripslashes($prevalue . $ctrl["designation"]), $import_device); unset($import_device[$id]); } } } break; } // Delete Unexisting Items not found in OCS if ($do_clean && count($import_device)) { foreach ($import_device as $key => $val) { if (!(strpos($key, $devicetype . '$$') === false)) { list($type, $id) = explode(self::FIELD_SEPARATOR, $key); $CompDevice = new $devicetype(); $CompDevice->delete(array('id' => $id, '_no_history' => !$cfg_ocs['history_devices']), true, $cfg_ocs['history_devices']); } } } //TODO Import IP if ($do_clean && count($import_ip) && $devicetype == "Item_DeviceNetworkCard") { foreach ($import_ip as $key => $val) { if ($key > 0) { $netport = new NetworkPort(); $netport->delete(array('id' => $key, '_no_history' => !$cfg_ocs['history_network']), 0, $cfg_ocs['history_network']); } } } //Alimentation //Carte mere }
/** * Import the devices for a computer * * @param $devicetype integer : device type * @param $computers_id integer : glpi computer id. * @param $ocsid integer : ocs computer id (ID). * @param $ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $import_device array : already imported devices * @param $import_ip array : already imported ip * @param $dohistory boolean : log changes ? * * @return Nothing (void). **/ static function updateDevices($devicetype, $computers_id, $ocsid, $ocsservers_id, $cfg_ocs, $import_device, $import_ip, $dohistory) { global $DBocs, $DB; $prevalue = $devicetype . self::FIELD_SEPARATOR; self::checkOCSconnection($ocsservers_id); $types = Computer_Device::getDeviceTypes(); $CompDevice = new Computer_Device($types[$devicetype]); $do_clean = false; switch ($devicetype) { case self::RAM_DEVICE: //Memoire if ($cfg_ocs["import_device_memory"]) { $do_clean = true; $query2 = "SELECT *\n FROM `memories`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { // Drop all memories and force no history if (!in_array(self::IMPORT_TAG_078, $import_device)) { self::addToOcsArray($computers_id, array(0 => self::IMPORT_TAG_078), "import_device"); // Clean memories for this computer if (count($import_device)) { $dohistory = false; foreach ($import_device as $key => $val) { $tmp = explode(self::FIELD_SEPARATOR, $key); if (isset($tmp[1]) && $tmp[0] == self::RAM_DEVICE) { $CompDevice->delete(array('id' => $tmp[1], '_no_history' => true, '_itemtype' => 'DeviceMemory')); self::deleteInOcsArray($computers_id, $key, "import_device"); unset($import_device[$key]); } } } } while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); if (!empty($line2["CAPACITY"]) && $line2["CAPACITY"] != "No") { $ram["designation"] = ""; if ($line2["TYPE"] != "Empty Slot" && $line2["TYPE"] != "Unknown") { $ram["designation"] = $line2["TYPE"]; } if ($line2["DESCRIPTION"]) { if (!empty($ram["designation"])) { $ram["designation"] .= " - "; } $ram["designation"] .= $line2["DESCRIPTION"]; } if (!is_numeric($line2["CAPACITY"])) { $line2["CAPACITY"] = 0; } $ram["specif_default"] = $line2["CAPACITY"]; if (!in_array(stripslashes($prevalue . $ram["designation"]), $import_device)) { $ram["frequence"] = $line2["SPEED"]; $ram["devicememorytypes_id"] = Dropdown::importExternal('DeviceMemoryType', $line2["TYPE"]); $DeviceMemory = new DeviceMemory(); $ram_id = $DeviceMemory->import($ram); if ($ram_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceMemory', 'devicememories_id' => $ram_id, 'specificity' => $line2["CAPACITY"], '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $ram["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $ram["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'specificity' => $line2["CAPACITY"], '_itemtype' => 'DeviceMemory')); unset($import_device[$tmp]); } } } } } break; case self::HDD_DEVICE: //Disque Dur if ($cfg_ocs["import_device_hdd"]) { $do_clean = true; $query2 = "SELECT *\n FROM `storages`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); if (!empty($line2["DISKSIZE"]) && preg_match("/disk|spare\\sdrive/i", $line2["TYPE"])) { if ($line2["NAME"]) { $dd["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $dd["designation"] = $line2["MODEL"]; } else { $dd["designation"] = "Unknown"; } } if (!is_numeric($line2["DISKSIZE"])) { $line2["DISKSIZE"] = 0; } if (!in_array(stripslashes($prevalue . $dd["designation"]), $import_device)) { $dd["specif_default"] = $line2["DISKSIZE"]; $DeviceHardDrive = new DeviceHardDrive(); $dd_id = $DeviceHardDrive->import($dd); if ($dd_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceHardDrive', 'deviceharddrives_id' => $dd_id, 'specificity' => $line2["DISKSIZE"], '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $dd["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $dd["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'specificity' => $line2["DISKSIZE"], '_itemtype' => 'DeviceHardDrive')); unset($import_device[$tmp]); } } } } } break; case self::DRIVE_DEVICE: //lecteurs if ($cfg_ocs["import_device_drive"]) { $do_clean = true; $query2 = "SELECT *\n FROM `storages`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); if (empty($line2["DISKSIZE"]) || !preg_match("/disk/i", $line2["TYPE"])) { if ($line2["NAME"]) { $stor["designation"] = $line2["NAME"]; } else { if ($line2["MODEL"]) { $stor["designation"] = $line2["MODEL"]; } else { $stor["designation"] = "Unknown"; } } if (!in_array(stripslashes($prevalue . $stor["designation"]), $import_device)) { $stor["specif_default"] = $line2["DISKSIZE"]; $DeviceDrive = new DeviceDrive(); $stor_id = $DeviceDrive->import($stor); if ($stor_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceDrive', 'devicedrives_id' => $stor_id, '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $stor["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $stor["designation"]), $import_device); unset($import_device[$tmp]); } } } } } break; case self::PCI_DEVICE: //Modems if ($cfg_ocs["import_device_modem"]) { $do_clean = true; $query2 = "SELECT *\n FROM `modems`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); $mdm["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $mdm["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $mdm["comment"] = $line2["TYPE"] . "\r\n" . $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $mdm_id = $DevicePci->import($mdm); if ($mdm_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DevicePci', 'devicepcis_id' => $mdm_id, '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $mdm["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $mdm["designation"]), $import_device); unset($import_device[$tmp]); } } } } //Ports if ($cfg_ocs["import_device_port"]) { $query2 = "SELECT *\n FROM `ports`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); $port["designation"] = ""; if ($line2["TYPE"] != "Other") { $port["designation"] .= $line2["TYPE"]; } if ($line2["NAME"] != "Not Specified") { $port["designation"] .= " " . $line2["NAME"]; } else { if ($line2["CAPTION"] != "None") { $port["designation"] .= " " . $line2["CAPTION"]; } } if (!empty($port["designation"])) { if (!in_array(stripslashes($prevalue . $port["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"]) && $line2["DESCRIPTION"] != "None") { $port["comment"] = $line2["DESCRIPTION"]; } $DevicePci = new DevicePci(); $port_id = $DevicePci->import($port); if ($port_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DevicePci', 'devicepcis_id' => $port_id, '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $port["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $port["designation"]), $import_device); unset($import_device[$tmp]); } } } } } break; case self::PROCESSOR_DEVICE: //Processeurs : if ($cfg_ocs["import_device_processor"]) { $do_clean = true; $query = "SELECT *\n FROM `hardware`\n WHERE `ID` = '{$ocsid}'\n ORDER BY `ID`"; $result = $DBocs->query($query); if ($DBocs->numrows($result) == 1) { $line = $DBocs->fetch_array($result); $line = clean_cross_side_scripting_deep(addslashes_deep($line)); for ($i = 0; $i < $line["PROCESSORN"]; $i++) { $processor = array(); $processor["designation"] = $line["PROCESSORT"]; if (!is_numeric($line["PROCESSORS"])) { $line["PROCESSORS"] = 0; } $processor["specif_default"] = $line["PROCESSORS"]; if (!in_array(stripslashes($prevalue . $processor["designation"]), $import_device)) { $DeviceProcessor = new DeviceProcessor(); $proc_id = $DeviceProcessor->import($processor); if ($proc_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceProcessor', 'deviceprocessors_id' => $proc_id, 'specificity' => $line["PROCESSORS"], '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $processor["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $processor["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'specificity' => $line["PROCESSORS"], '_itemtype' => 'DeviceProcessor')); unset($import_device[$tmp]); } } } } break; case self::NETWORK_DEVICE: //Carte reseau if ($cfg_ocs["import_device_iface"] || $cfg_ocs["import_ip"]) { $do_clean = true; //If import_ip doesn't contain _VERSION_072_, then migrate it to the new architecture if (!in_array(self::IMPORT_TAG_072, $import_ip)) { $import_ip = self::migrateImportIP($computers_id, $import_ip); } $query2 = "SELECT *\n FROM `networks`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); $i = 0; $manually_link = false; //Count old ip in GLPI $count_ip = count($import_ip); // Add network device if ($DBocs->numrows($result2) > 0) { $mac_already_imported = array(); while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); if ($cfg_ocs["import_device_iface"]) { $network["designation"] = $line2["DESCRIPTION"]; if (!in_array($line2["MACADDR"], $mac_already_imported)) { $mac_already_imported[] = $line2["MACADDR"]; if (!in_array(stripslashes($prevalue . $network["designation"]), $import_device)) { if (!empty($line2["SPEED"])) { $network["bandwidth"] = $line2["SPEED"]; } $DeviceNetworkCard = new DeviceNetworkCard(); $net_id = $DeviceNetworkCard->import($network); if ($net_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceNetworkCard', 'devicenetworkcards_id' => $net_id, 'specificity' => $line2["MACADDR"], '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID > $prevalue . $network["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $network["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'specificity' => $line2["MACADDR"], '_itemtype' => 'DeviceNetworkCard')); unset($import_device[$tmp]); } } } if (!empty($line2["IPADDRESS"]) && $cfg_ocs["import_ip"]) { $ocs_ips = explode(",", $line2["IPADDRESS"]); $ocs_ips = array_unique($ocs_ips); sort($ocs_ips); //if never imported (only 0.72 tag in array), check if existing ones match if ($count_ip == 1) { //get old IP in DB $querySelectIDandIP = "SELECT `id`, `ip`\n FROM `glpi_networkports`\n WHERE `itemtype` = 'Computer'\n AND `items_id` = '{$computers_id}'\n AND `mac` = '" . $line2["MACADDR"] . "'\n AND `name` = '" . $line2["DESCRIPTION"] . "'"; $result = $DB->query($querySelectIDandIP); if ($DB->numrows($result) > 0) { while ($data = $DB->fetch_array($result)) { //Upate import_ip column and import_ip array self::addToOcsArray($computers_id, array($data["id"] => $data["ip"] . self::FIELD_SEPARATOR . $line2["MACADDR"]), "import_ip"); $import_ip[$data["id"]] = $data["ip"] . self::FIELD_SEPARATOR . $line2["MACADDR"]; } } } $netport = array(); $netport["mac"] = $line2["MACADDR"]; $netport["networkinterfaces_id"] = Dropdown::importExternal('NetworkInterface', $line2["TYPE"]); $netport["name"] = $line2["DESCRIPTION"]; $netport["items_id"] = $computers_id; $netport["itemtype"] = 'Computer'; $netport["netmask"] = $line2["IPMASK"]; $netport["gateway"] = $line2["IPGATEWAY"]; $netport["subnet"] = $line2["IPSUBNET"]; $np = new NetworkPort(); for ($j = 0; $j < count($ocs_ips); $j++) { //First search : look for the same port (same IP and same MAC) $id_ip = array_search($ocs_ips[$j] . self::FIELD_SEPARATOR . $line2["MACADDR"], $import_ip); //Second search : IP may have change, so look only for mac address if (!$id_ip) { //Browse the whole import_ip array foreach ($import_ip as $ID => $ip) { if ($ID > 0) { $tmp = explode(self::FIELD_SEPARATOR, $ip); //Port was found by looking at the mac address if (isset($tmp[1]) && $tmp[1] == $line2["MACADDR"]) { //Remove port in import_ip self::deleteInOcsArray($computers_id, $ID, "import_ip"); self::addToOcsArray($computers_id, array($ID => $ocs_ips[$j] . self::FIELD_SEPARATOR . $line2["MACADDR"]), "import_ip"); $import_ip[$ID] = $ocs_ips[$j] . self::FIELD_SEPARATOR . $line2["MACADDR"]; $id_ip = $ID; break; } } } } $netport['_no_history'] = !$dohistory; //Update already in DB if ($id_ip > 0) { $netport["ip"] = $ocs_ips[$j]; $netport["logical_number"] = $j; $netport["id"] = $id_ip; $np->update($netport); unset($import_ip[$id_ip]); $count_ip++; } else { //If new IP found unset($np->fields["netpoints_id"]); unset($netport["id"]); unset($np->fields["id"]); $netport["ip"] = $ocs_ips[$j]; $netport["logical_number"] = $j; $newID = $np->add($netport); //ADD to array self::addToOcsArray($computers_id, array($newID => $ocs_ips[$j] . self::FIELD_SEPARATOR . $line2["MACADDR"]), "import_ip"); $count_ip++; } } } } } } break; case self::GFX_DEVICE: //carte graphique if ($cfg_ocs["import_device_gfxcard"]) { $do_clean = true; $query2 = "SELECT DISTINCT(`NAME`) AS NAME,\n `MEMORY`\n FROM `videos`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n AND `NAME` != ''\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); $video["designation"] = $line2["NAME"]; if (!is_numeric($line2["MEMORY"])) { $line2["MEMORY"] = 0; } if (!in_array(stripslashes($prevalue . $video["designation"]), $import_device)) { $video["specif_default"] = $line2["MEMORY"]; $DeviceGraphicCard = new DeviceGraphicCard(); $video_id = $DeviceGraphicCard->import($video); if ($video_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceGraphicCard', 'devicegraphiccards_id' => $video_id, 'specificity' => $line2["MEMORY"], '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $video["designation"]), "import_device"); } } else { $tmp = array_search(stripslashes($prevalue . $video["designation"]), $import_device); list($type, $id) = explode(self::FIELD_SEPARATOR, $tmp); $CompDevice->update(array('id' => $id, 'specificity' => $line2["MEMORY"], '_itemtype' => 'DeviceGraphicCard')); unset($import_device[$tmp]); } } } } break; case self::SND_DEVICE: //carte son if ($cfg_ocs["import_device_sound"]) { $do_clean = true; $query2 = "SELECT DISTINCT(`NAME`) AS NAME,\n `DESCRIPTION`\n FROM `sounds`\n WHERE `HARDWARE_ID` = '{$ocsid}'\n AND `NAME` != ''\n ORDER BY `ID`"; $result2 = $DBocs->query($query2); if ($DBocs->numrows($result2) > 0) { while ($line2 = $DBocs->fetch_array($result2)) { $line2 = clean_cross_side_scripting_deep(addslashes_deep($line2)); if (!$cfg_ocs["ocs_db_utf8"] && !seems_utf8($line2["NAME"])) { $line2["NAME"] = encodeInUtf8($line2["NAME"]); } $snd["designation"] = $line2["NAME"]; if (!in_array(stripslashes($prevalue . $snd["designation"]), $import_device)) { if (!empty($line2["DESCRIPTION"])) { $snd["comment"] = $line2["DESCRIPTION"]; } $DeviceSoundCard = new DeviceSoundCard(); $snd_id = $DeviceSoundCard->import($snd); if ($snd_id) { $devID = $CompDevice->add(array('computers_id' => $computers_id, '_itemtype' => 'DeviceSoundCard', 'devicesoundcards_id' => $snd_id, '_no_history' => !$dohistory)); self::addToOcsArray($computers_id, array($prevalue . $devID => $prevalue . $snd["designation"]), "import_device"); } } else { $id = array_search(stripslashes($prevalue . $snd["designation"]), $import_device); unset($import_device[$id]); } } } } break; } // Delete Unexisting Items not found in OCS if ($do_clean && count($import_device)) { foreach ($import_device as $key => $val) { if (!(strpos($key, $devicetype . '$$') === false)) { list($type, $id) = explode(self::FIELD_SEPARATOR, $key); $CompDevice->delete(array('id' => $id, '_itemtype' => $types[$devicetype], '_no_history' => !$dohistory)); self::deleteInOcsArray($computers_id, $key, "import_device"); } } } if ($do_clean && count($import_ip) && $devicetype == self::NETWORK_DEVICE) { foreach ($import_ip as $key => $val) { if ($key > 0) { $netport = new NetworkPort(); $netport->delete(array('id' => $key)); self::deleteInOcsArray($computers_id, $key, "import_ip"); } } } //Alimentation //Carte mere }