/**
  * Update devices with values get by SNMP
  *
  * @param $ID_Device : ID of device
  * @param $type : type of device (NETWORKING_TYPE, PRINTER_TYPE ...)
  * @param $oidsModel : oid list from model SNMP
  * @param $oidvalues : list of values from agent query
  * @param $Array_Object_TypeNameConstant : array with oid => constant in relation with fields to update
  *
  * @return $oidList : array with ports object name and oid
  *
  **/
 static function updateGLPIDevice($ID_Device, $type, $oidsModel, $oidvalues, $Array_Object_TypeNameConstant)
 {
     global $DB, $LANG, $CFG_GLPI, $FUSIONINVENTORY_MAPPING;
     if ($_SESSION['fusioninventory_logs'] == "1") {
         $logs = new PluginFusioninventoryLogs();
     }
     if ($_SESSION['fusioninventory_logs'] == "1") {
         $logs->write("fusioninventory_fullsync", ">>>>>>>>>> Update devices values <<<<<<<<<<", $type, $ID_Device, 1);
     }
     // Update 'last_fusioninventory_update' field
     $query = "UPDATE ";
     if ($type == NETWORKING_TYPE) {
         $query .= "`glpi_plugin_fusioninventory_networking`\n             SET `last_fusioninventory_update`='" . date("Y-m-d H:i:s") . "',\n                 `last_PID_update`='" . $_SESSION['FK_process'] . "'\n             WHERE `FK_networking`='" . $ID_Device . "';";
     }
     if ($type == PRINTER_TYPE) {
         $query .= "`glpi_plugin_fusioninventory_printers`\n             SET `last_fusioninventory_update`='" . date("Y-m-d H:i:s") . "'\n             WHERE `FK_printers`='" . $ID_Device . "';";
     }
     $DB->query($query);
     foreach ($Array_Object_TypeNameConstant as $oid => $link) {
         if (!preg_match("/\\.\$/", $oid)) {
             // SNMPGet ONLY
             if (isset($oidvalues[$oid][""])) {
                 if (isset($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown']) and !empty($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown'])) {
                     $oidvalues[$oid][""] = PluginFusioninventorySNMP::hex_to_string($oidvalues[$oid][""]);
                     if ($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown'] == "glpi_dropdown_model_networking") {
                         $oidvalues[$oid][""] = Dropdown::importExternal("NetworkEquipmentModel", $oidvalues[$oid][""], 0, array("manufacturer" => $oidvalues[$oid][""]));
                     } else {
                         $oidvalues[$oid][""] = Dropdown::importExternal(getItemTypeForTable($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown']), $oidvalues[$oid][""], 0);
                     }
                 }
                 switch ($type) {
                     case NETWORKING_TYPE:
                         $Field = "FK_networking";
                         if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_networking") {
                             $Field = "ID";
                         }
                         break;
                     case PRINTER_TYPE:
                         $Field = "FK_printers";
                         if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_printers") {
                             $Field = "ID";
                         }
                         break;
                 }
                 if ($_SESSION['fusioninventory_logs'] == "1") {
                     $logs->write("fusioninventory_fullsync", $link . " = " . $oidvalues[$oid][""], $type, $ID_Device, 1);
                 }
                 // * Memory
                 if ($link == "ram" or $link == "memory") {
                     $oidvalues[$oid][""] = ceil($oidvalues[$oid][""] / 1024 / 1024);
                     if ($type == PRINTER_TYPE) {
                         $oidvalues[$oid][""] .= " MB";
                     }
                 }
                 if ($link == 'macaddr') {
                     $MacAddress = PluginFusioninventoryIfmac::ifmacwalk_ifmacaddress($oidvalues[$oid][""]);
                     $oidvalues[$oid][""] = $MacAddress;
                 }
                 // Convert hexa in string
                 $oidvalues[$oid][""] = PluginFusioninventorySNMP::hex_to_string($oidvalues[$oid][""]);
                 if (strstr($oidvalues[$oid][""], "noSuchName")) {
                     // NO Update field in GLPI
                 } else {
                     if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_plugin_fusioninventory_printers_cartridges") {
                         // * Printers cartridges
                         $object_name_clean = str_replace("MAX", "", $link);
                         $object_name_clean = str_replace("REMAIN", "", $object_name_clean);
                         if (strstr($link, "MAX")) {
                             $printer_cartridges_max_remain[$object_name_clean]["MAX"] = $oidvalues[$oid][""];
                         }
                         if (strstr($link, "REMAIN")) {
                             $printer_cartridges_max_remain[$object_name_clean]["REMAIN"] = $oidvalues[$oid][""];
                         }
                         if (isset($printer_cartridges_max_remain[$object_name_clean]["MAX"]) and isset($printer_cartridges_max_remain[$object_name_clean]["REMAIN"])) {
                             $pourcentage = ceil(100 * $printer_cartridges_max_remain[$object_name_clean]["REMAIN"] / $printer_cartridges_max_remain[$object_name_clean]["MAX"]);
                             // Test existance of row in MySQl
                             $query_sel = "SELECT *\n                                FROM " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                WHERE " . $Field . "='" . $ID_Device . "'\n                                      AND `object_name`='" . $object_name_clean . "';";
                             $result_sel = $DB->query($query_sel);
                             if ($DB->numrows($result_sel) == "0") {
                                 $queryInsert = "INSERT INTO " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                                 (" . $Field . ",object_name)\n                                     VALUES('" . $ID_Device . "', '" . $object_name_clean . "');";
                                 $DB->query($queryInsert);
                             }
                             $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                  SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $pourcentage . "'\n                                  WHERE " . $Field . "='" . $ID_Device . "'\n                                        AND `object_name`='" . $object_name_clean . "';";
                             $DB->query($queryUpdate);
                             unset($printer_cartridges_max_remain[$object_name_clean]["MAX"]);
                             unset($printer_cartridges_max_remain[$object_name_clean]["REMAIN"]);
                         } else {
                             // Test existance of row in MySQl
                             $query_sel = "SELECT *\n                                FROM " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                WHERE " . $Field . "='" . $ID_Device . "'\n                                      AND `object_name`='" . $link . "';";
                             $result_sel = $DB->query($query_sel);
                             if ($DB->numrows($result_sel) == "0") {
                                 $queryInsert = "INSERT INTO " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                                 (" . $Field . ",object_name)\n                                     VALUES('" . $ID_Device . "', '" . $link . "');";
                                 $DB->query($queryInsert);
                             }
                             $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                  SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid][""] . "'\n                                  WHERE " . $Field . "='" . $ID_Device . "'\n                                        AND `object_name`='" . $link . "';";
                             $DB->query($queryUpdate);
                         }
                     } else {
                         if (strstr($link, "pagecounter")) {
                             // Detect if the script has wroten a line for the counter today
                             // (if yes, don't touch, else add line)
                             $today = strftime("%Y-%m-%d", time());
                             $query_line = "SELECT *\n                              FROM `glpi_plugin_fusioninventory_printers_history`\n                              WHERE `date` LIKE '" . $today . "%'\n                                    AND `FK_printers`='" . $ID_Device . "';";
                             $result_line = $DB->query($query_line);
                             if ($DB->numrows($result_line) == "0") {
                                 if (empty($oidvalues[$oid][""])) {
                                     $oidvalues[$oid][""] = 0;
                                 }
                                 $queryInsert = "INSERT INTO " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                              (" . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "," . $Field . ", `date`)\n                                  VALUES('" . $oidvalues[$oid][""] . "','" . $ID_Device . "', '" . $today . "');";
                                 $DB->query($queryInsert);
                             } else {
                                 $data_line = $DB->fetch_assoc($result_line);
                                 if ($data_line[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] == "0") {
                                     if (empty($oidvalues[$oid][""])) {
                                         $oidvalues[$oid][""] = 0;
                                     }
                                     $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                     SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid][""] . "'\n                                     WHERE " . $Field . "='" . $ID_Device . "'\n                                           AND `date` LIKE '" . $today . "%';";
                                     $DB->query($queryUpdate);
                                 }
                             }
                         } else {
                             if ($link == "cpuuser" or $link == "cpusystem") {
                                 if ($object_name == "cpuuser") {
                                     $cpu_values['cpuuser'] = $oidvalues[$oid][""];
                                 }
                                 if ($object_name == "cpusystem") {
                                     $cpu_values['cpusystem'] = $oidvalues[$oid][""];
                                 }
                                 if (isset($cpu_values['cpuuser']) and isset($cpu_values['cpusystem'])) {
                                     $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                  SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . ($cpu_values['cpuuser'] + $cpu_values['cpusystem']) . "'\n                                  WHERE " . $Field . "='" . $ID_Device . "';";
                                     $DB->query($queryUpdate);
                                     unset($cpu_values);
                                 }
                             } else {
                                 if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] != "") {
                                     if ($FUSIONINVENTORY_MAPPING[$type][$link]['field'] == "cpu" and empty($oidvalues[$oid][""])) {
                                         $SNMPValue = 0;
                                     }
                                     if (strstr($FUSIONINVENTORY_MAPPING[$type][$link]['table'], "glpi_plugin_fusioninventory")) {
                                         $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                  SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid][""] . "'\n                  WHERE " . $Field . "='" . $ID_Device . "'";
                                         $DB->query($queryUpdate);
                                     } else {
                                         $commonitem = new commonitem();
                                         $commonitem->setType($type, true);
                                         $tableau[$Field] = $ID_Device;
                                         $tableau[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] = $oidvalues[$oid][""];
                                         $commonitem->obj->update($tableau);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }