Example #1
0
 /**
  * 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
 }
 /**
  * @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 addOrUpdateNetworkEquipment($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, "is_recursive" => 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) {
         if ($ocsSnmp['META']['NAME'] != "N/A") {
             $input["name"] = $ocsSnmp['META']['NAME'];
         } else {
             $input["name"] = $ocsSnmp['META']['DESCRIPTION'];
         }
     }
     if ($cfg_ocs['importsnmp_contact'] && $action == "add" || $cfg_ocs['linksnmp_contact'] && $linked || $action == "update" && $cfg_ocs['importsnmp_contact'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_contact'] && $linked) {
         $input["contact"] = $ocsSnmp['META']['CONTACT'];
     }
     if ($cfg_ocs['importsnmp_comment'] && $action == "add" || $cfg_ocs['linksnmp_comment'] && $linked || $action == "update" && $cfg_ocs['importsnmp_comment'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_comment'] && $linked) {
         $input["comment"] = $ocsSnmp['META']['DESCRIPTION'];
     }
     if ($loc_id > 0) {
         $input["locations_id"] = $loc_id;
     }
     if ($dom_id > 0) {
         $input["domains_id"] = $dom_id;
     }
     //if($ocsSnmp['META']['TYPE'] == null){
     //   $type_id = self::checkIfExist("NetworkEquipmentType", "Network Device");
     //} else {
     //   $type_id = self::checkIfExist("network", $ocsSnmp['META']['TYPE']);
     //}
     if (!empty($ocsSnmp['SWITCH'])) {
         if ($cfg_ocs['importsnmp_manufacturer'] && $action == "add" || $cfg_ocs['linksnmp_manufacturer'] && $linked || $action == "update" && $cfg_ocs['importsnmp_manufacturer'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_manufacturer'] && $linked) {
             $man_id = Dropdown::importExternal('Manufacturer', PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsSnmp['SWITCH'][0]['MANUFACTURER']));
             $input['manufacturers_id'] = $man_id;
         }
         if ($cfg_ocs['importsnmp_firmware'] && $action == "add" || $cfg_ocs['linksnmp_firmware'] && $linked || $action == "update" && $cfg_ocs['importsnmp_firmware'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_firmware'] && $linked) {
             $firm_id = Dropdown::importExternal('NetworkEquipmentFirmware', PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsSnmp['SWITCH'][0]['FIRMVERSION']));
             $input['networkequipmentfirmwares_id'] = $firm_id;
         }
         if ($cfg_ocs['importsnmp_serial'] && $action == "add" || $cfg_ocs['linksnmp_serial'] && $linked || $action == "update" && $cfg_ocs['importsnmp_serial'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_serial'] && $linked) {
             $input['serial'] = $ocsSnmp['SWITCH'][0]['SERIALNUMBER'];
         }
         //TODOSNMP = chassis ??
         //$mod_id = Dropdown::importExternal('NetworkEquipmentModel',
         //PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'],
         //$ocsSnmp['SWITCH'][0]['REFERENCE']));
         //$input['networkequipmentmodels_id'] = $mod_id;
         // TODOSNMP ?
         //$input['networkequipmenttypes_id'] = self::checkIfExist("NetworkEquipmentType", "Switch");
     }
     if (!empty($ocsSnmp['FIREWALLS'])) {
         if ($cfg_ocs['importsnmp_serial'] && $action == "add" || $cfg_ocs['linksnmp_serial'] && $action == $linked || $action == "update" && $cfg_ocs['importsnmp_serial'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_serial'] && $linked) {
             $input['serial'] = $ocsSnmp['FIREWALLS']['SERIALNUMBER'];
         }
         // TODOSNMP ?
         //$input['networkequipmenttypes_id'] = self::checkIfExist("NetworkEquipmentType", "Firewall");
     }
     $id_network = 0;
     if ($action == "add") {
         $id_network = $snmpDevice->add($input, array('unicity_error_message' => true), $cfg_ocs['history_hardware']);
     } else {
         $input["id"] = $ID;
         $id_network = $ID;
         if ($snmpDevice->getFromDB($id_network)) {
             $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_network > 0) {
         if (isset($ocsSnmp['POWERSUPPLIES']) && ($cfg_ocs['importsnmp_power'] && $action == "add" || $cfg_ocs['linksnmp_power'] && $linked || $action == "update" && $cfg_ocs['importsnmp_power'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_power'] && $linked) && count($ocsSnmp['POWERSUPPLIES']) > 0) {
             $man_id = Dropdown::importExternal('Manufacturer', PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsSnmp['POWERSUPPLIES'][0]['MANUFACTURER']));
             $pow['manufacturers_id'] = $man_id;
             $pow['designation'] = $ocsSnmp['POWERSUPPLIES'][0]['REFERENCE'];
             $pow['comment'] = $ocsSnmp['POWERSUPPLIES'][0]['DESCRIPTION'];
             $item = new $itemtype();
             $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0;
             if ($item->getFromDB($id_network)) {
                 $entity = $item->fields['entities_id'];
             }
             $pow['entities_id'] = $entity;
             $power = new DevicePowerSupply();
             $power_id = $power->import($pow);
             if ($power_id) {
                 $serial = $ocsSnmp['POWERSUPPLIES'][0]['SERIALNUMBER'];
                 $CompDevice = new Item_DevicePowerSupply();
                 if ($cfg_ocs['history_devices']) {
                     $table = getTableForItemType("Item_DevicePowerSupply");
                     $query = "DELETE\n                            FROM `" . $table . "`\n                            WHERE `items_id` = '" . $id_network . "'\n                            AND `itemtype` = '" . $itemtype . "'";
                     $DB->query($query);
                 }
                 //            CANNOT USE BEFORE 9.1.2 - for _no_history problem
                 //               $CompDevice->deleteByCriteria(array('items_id' => $id_network,
                 //                  'itemtype' => $itemtype), 1);
                 $CompDevice->add(array('items_id' => $id_network, 'itemtype' => $itemtype, 'entities_id' => $entity, 'serial' => $serial, 'devicepowersupplies_id' => $power_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']);
             }
         }
         if (isset($ocsSnmp['FANS']) && ($cfg_ocs['importsnmp_fan'] && $action == "add" || $cfg_ocs['linksnmp_fan'] && $linked || $action == "update" && $cfg_ocs['importsnmp_fan'] && !$linked || $action == "update" && $cfg_ocs['linksnmp_fan'] && $linked) && count($ocsSnmp['FANS']) > 0) {
             $man_id = Dropdown::importExternal('Manufacturer', PluginOcsinventoryngOcsServer::encodeOcsDataInUtf8($cfg_ocs['ocs_db_utf8'], $ocsSnmp['FANS'][0]['MANUFACTURER']));
             $dev['manufacturers_id'] = $man_id;
             $dev['designation'] = $ocsSnmp['FANS'][0]['REFERENCE'];
             $dev['comment'] = $ocsSnmp['FANS'][0]['DESCRIPTION'];
             $item = new $itemtype();
             $entity = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : 0;
             if ($item->getFromDB($id_network)) {
                 $entity = $item->fields['entities_id'];
             }
             $dev['entities_id'] = $entity;
             $device = new DevicePci();
             $device_id = $device->import($dev);
             if ($device_id) {
                 $CompDevice = new Item_DevicePci();
                 if ($cfg_ocs['history_devices']) {
                     $table = getTableForItemType("Item_DevicePci");
                     $query = "DELETE\n                            FROM `" . $table . "`\n                            WHERE `items_id` = '" . $id_network . "'\n                            AND `itemtype` = '" . $itemtype . "'";
                     $DB->query($query);
                 }
                 //            CANNOT USE BEFORE 9.1.2 - for _no_history problem
                 //               $CompDevice->deleteByCriteria(array('items_id' => $id_network,
                 //                  'itemtype' => $itemtype), 1);
                 $CompDevice->add(array('items_id' => $id_network, 'itemtype' => $itemtype, 'entities_id' => $entity, 'devicepcis_id' => $device_id, 'is_dynamic' => 1), array(), $cfg_ocs['history_devices']);
             }
         }
     }
     if ($id_network > 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_network}' 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_network)) {
                 $entity = $item->fields['entities_id'];
             }
             $port_input = array('name' => $ocsSnmp['META']['NAME'], 'mac' => $mac, 'items_id' => $id_network, '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_network;
 }
 /**
  * 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
 }
Example #4
0
 /**
  * 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 $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
 }