/**
  * Update Networking ports from devices SNMP queries
  *
  * @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
  *
  **/
 static function updateGLPINetworkingPorts($ID_Device, $type, $oidsModel, $oidvalues, $Array_Object_TypeNameConstant)
 {
     global $DB, $LANG, $FUSIONINVENTORY_MAPPING;
     if ($_SESSION['fusioninventory_logs'] == "1") {
         $logs = new PluginFusioninventoryLogs();
     }
     $snmp_queries = new PluginFusioninventorySNMP();
     $walks = new PluginFusioninventoryWalk();
     $nn = new NetworkPort_NetworkPort();
     if ($_SESSION['fusioninventory_logs'] == "1") {
         $logs->write("fusioninventory_fullsync", ">>>>>>>>>> Update ports device values <<<<<<<<<<", $type, $ID_Device, 1);
     }
     foreach ($Array_Object_TypeNameConstant as $oid => $link) {
         if (preg_match("/\\.\$/", $oid) and !empty($FUSIONINVENTORY_MAPPING[$type][$link]['field'])) {
             // SNMPWalk ONLY (ports)
             //			print "OID : ".$oid."\n";
             // For each port
             if ($FUSIONINVENTORY_MAPPING[$type][$link]['field'] == 'ifmac') {
                 $query = "SELECT `glpi_networking_ports`.`ID`, `logical_number`,\n                             `glpi_networking_ports`.`ifmac` as `ifmac`\n                      FROM `glpi_networking_ports`\n                           LEFT JOIN `glpi_plugin_fusioninventory_networking_ports`\n                                     ON `FK_networking_ports`=`glpi_networking_ports`.`ID`\n                      WHERE `on_device`='" . $ID_Device . "'\n                            AND `device_type`='" . $type . "'\n                      ORDER BY `logical_number`;";
             } else {
                 $query = "SELECT `glpi_networking_ports`.`ID`, `logical_number`, " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "\n                      FROM `glpi_networking_ports`\n                            LEFT JOIN `glpi_plugin_fusioninventory_networking_ports`\n                                       ON `FK_networking_ports`=`glpi_networking_ports`.`ID`\n            \t\t\t WHERE `on_device`='" . $ID_Device . "'\n                            AND `device_type`='" . $type . "'\n                      ORDER BY `logical_number`;";
             }
             $result = $DB->query($query);
             while ($data = $DB->fetch_array($result)) {
                 // Update Last UP
                 if ($link == 'ifstatus' and $oidvalues[$oid . $data['logical_number']][""] == "1") {
                     $query_update = "UPDATE `glpi_plugin_fusioninventory_networking_ports`\n                                SET `lastup`='" . date("Y-m-d H:i:s") . "'\n                                WHERE `FK_networking_ports`='" . $data["ID"] . "';";
                     $DB->query($query_update);
                 }
                 if ($link == 'ifPhysAddress' and !strstr($oidvalues[$oid . $data['logical_number']][""], ":")) {
                     $MacAddress = PluginFusioninventoryIfmac::ifmacwalk_ifmacaddress($oidvalues[$oid . $data['logical_number']][""]);
                     $oidvalues[$oid . $data['logical_number']][""] = $MacAddress;
                     if (empty($oidvalues[$oid . $data['logical_number']][""])) {
                         $oidvalues[$oid . $data['logical_number']][""] = "00:00:00:00:00:00";
                     }
                 }
                 if ($_SESSION['fusioninventory_logs'] == "1") {
                     $logs->write("fusioninventory_fullsync", "****************", $type, $ID_Device, 1);
                 }
                 if ($_SESSION['fusioninventory_logs'] == "1") {
                     $logs->write("fusioninventory_fullsync", "Oid : " . $oid, $type, $ID_Device, 1);
                 }
                 if ($_SESSION['fusioninventory_logs'] == "1") {
                     $logs->write("fusioninventory_fullsync", "Link : " . $link, $type, $ID_Device, 1);
                 }
                 if ($link == "ifPhysAddress" and $oidvalues[$oid . $data['logical_number']][""] != "") {
                     $oidvalues[$oid . $data['logical_number']][""] = $snmp_queries->MAC_Rewriting($oidvalues[$oid . $data['logical_number']][""]);
                 }
                 if ($link == "ifaddr") {
                     $Arrayifaddr = $walks->GetoidValuesFromWalk($oidvalues, $oidsModel[0][1]['ifaddr'], 1);
                     for ($j = 0; $j < count($Arrayifaddr); $j++) {
                         if ($oidvalues[$oid . $Arrayifaddr[$j]][""] == $data['logical_number']) {
                             $data['logical_number'] = $Arrayifaddr[$j];
                         }
                     }
                     if ($_SESSION['fusioninventory_logs'] == "1") {
                         $logs->write("fusioninventory_fullsync", "=> " . $data['logical_number'], $type, $ID_Device, 1);
                     }
                 } else {
                     if (isset($oidvalues[$oid . $data['logical_number']][""])) {
                         if ($_SESSION['fusioninventory_logs'] == "1") {
                             $logs->write("fusioninventory_fullsync", "=> " . $oidvalues[$oid . $data['logical_number']][""], $type, $ID_Device, 1);
                         }
                     }
                 }
                 if (isset($oidvalues[$oid . $data['logical_number']][""])) {
                     if ($data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] != $oidvalues[$oid . $data['logical_number']][""]) {
                         if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_networking_ports") {
                             $ID_field = "ID";
                         } else {
                             $ID_field = "FK_networking_ports";
                         }
                     } else {
                         if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_networking_ports") {
                             $ID_field = "ID";
                         } else {
                             $ID_field = "FK_networking_ports";
                         }
                     }
                     $queryUpdate = '';
                     if ($link == "ifaddr") {
                         if ($data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] != $data['logical_number']) {
                             $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                     SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $data['logical_number'] . "'\n                     WHERE " . $ID_field . "='" . $data["ID"] . "'";
                         }
                     } else {
                         if ($data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] != $oidvalues[$oid . $data['logical_number']][""]) {
                             $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n                                     SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid . $data['logical_number']][""] . "'\n                                     WHERE " . $ID_field . "='" . $data["ID"] . "';";
                         }
                     }
                     if ($queryUpdate != '') {
                         PluginFusioninventoryDb::lock_wire_check();
                         $DB->query($queryUpdate);
                         // Delete port wire if port is internal disable
                         if ($link == "ifinternalstatus" and ($oidvalues[$oid . $data['logical_number']][""] == "2" or $oidvalues[$oid . $data['logical_number']][""] == "down(2)")) {
                             $netwire = new Netwire();
                             PluginFusioninventorySnmphistory::addLogConnection("remove", $netwire->getOppositeContact($data["ID"]), $FK_process);
                             PluginFusioninventorySnmphistory::addLogConnection("remove", $data["ID"], $FK_process);
                             if ($nn->getFromDBForNetworkPort($data['ID'])) {
                                 $nn->delete($data);
                             }
                         }
                         // Add log because snmp value change
                         PluginFusioninventorySnmphistory::addLog($data["ID"], $FUSIONINVENTORY_MAPPING[$type][$link]['name'], $data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']], $oidvalues[$oid . $data['logical_number']][""], $type . "-" . $link, $_SESSION['FK_process']);
                         PluginFusioninventoryDb::lock_wire_unlock();
                     }
                 }
             }
         }
     }
 }