You are not logged in.
Bonjour,
ci joint un peu bout de code. il permet à partir du couple @IP/masque de la table networks d'ocs de calculer le réseau d'appartenance de la station. l'adresse est representee sous la forme xxx.xxx.xxx.xxx/yy et alimente la table dropdown_network.
ex: adresse 192.168.1.10, mask 255.255.255.0 -> réseau=192.168.1.0/24
j'ai remis toute la fonction ocsupdategeneral, mais seule la ligne suivante a été ajoutée:
$compupdate["network"] = ocsImportDropdown('glpi_dropdown_network','name',ocsCalcNetwork($ocs_id));
si cela vous interesse
cordialement
olivier
----------------------------- dans functions.php ------------------------
function ocsUpdateGeneral($glpi_id,$ocs_id) {
global $langOcs;
$dbocs = new DBocs();
$query = "select h.*,b.* from hardware as h inner join bios as b on h.DEVICEID=b.DEVICEID WHERE h.DEVICEID='".$ocs_id."'";
//echo $query;
$result = $dbocs->query($query) or die($dbocs->error());
if ($dbocs->numrows($result)==1) {
$crlf="\r"."\n";
$compupdate["ID"] = $glpi_id;
$compupdate["os"] = ocsImportDropdown('glpi_dropdown_os','name',$dbocs->result($result,0,"OSNAME")." ".$dbocs->result($result,0,"OSVERSION"));
$compupdate["serial"] = $dbocs->result($result,0,"SSN");
$compupdate["model"] = ocsImportDropdown('glpi_dropdown_model','name',$dbocs->result($result,0,"SMODEL"));
$compupdate["FK_glpi_enterprise"] = ocsImportEnterprise($dbocs->result($result,0,"SMANUFACTURER"));
$compupdate["type"] = ocsImportDropdown('glpi_type_computers','name',$dbocs->result($result,0,"b.TYPE"));
$compupdate["domain"] = ocsImportDropdown('glpi_dropdown_domain','name',$dbocs->result($result,0,"WORKGROUP"));
$compupdate["contact"] = $dbocs->result($result,0,"USERID");
$compupdate["date_mod"] = date("Y-m-d H:i:s");
$compupdate["comments"] = $dbocs->result($result,0,"OSCOMMENTS").$crlf."Swap: ".$dbocs->result($result,0,"SWAP").$crlf.addslashes($langOcs["import"][3]);
$compupdate["network"] = ocsImportDropdown('glpi_dropdown_network','name',ocsCalcNetwork($ocs_id));
//better to use a GLPI api fonction (see it at glpi/glpi/computers/functions.php)
$compupdate["state"]=0;
updateComputer($compupdate);
//die("blaa");
}
}
function ocsCalcNetwork($ocs_id) {
$dbocs = new DBocs();
$query = "select * from networks WHERE DEVICEID='".$ocs_id."'";
$result = $dbocs->query($query) or die($dbocs->error());
if ($dbocs->numrows($result)==1){
$line=$dbocs->fetch_array($result);
$ipaddr = $line['IPADDRESS'];
$ipmask = $line['IPMASK'];
// calcul du network number
$netw = long2ip(ip2long($ipaddr)&ip2long($ipmask));
// transformation du mask en binaire sans les .
$mask = explode(".",$ipmask);
$mask1 = str_pad(decbin($mask[0]),8,"0",STR_PAD_LEFT);
$mask2 = str_pad(decbin($mask[1]),8,"0",STR_PAD_LEFT);
$mask3 = str_pad(decbin($mask[2]),8,"0",STR_PAD_LEFT);
$mask4 = str_pad(decbin($mask[3]),8,"0",STR_PAD_LEFT);
// Concaténation du masque (binaire) pour calcul du nbre de bits de masque.
// $msk = $mask1.$mask2.$mask3.$mask4;
$bits = strcspn($mask1.$mask2.$mask3.$mask4,"0");
return $netw."/".$bits;
}
}
----------------------------------------------------------------------------
Offline
Version corrigée pour le cas ou il n'y a pas d'adresse IP, ou alors si c'est un masque à 4x255 (32bits)
cordialement
olivier
---------------------------------------------------------------------
function ocsCalcNetwork($ocs_id) {
$dbocs = new DBocs();
$query = "select * from networks WHERE DEVICEID='".$ocs_id."'";
$result = $dbocs->query($query) or die($dbocs->error());
if ($dbocs->numrows($result)==1){
$line=$dbocs->fetch_array($result);
$ipaddr = $line['IPADDRESS'];
$ipmask = $line['IPMASK'];
if (ip2long($ipaddr)== 0) {
$netw = "N";
$bits = "A";
} else {
// calcul du network number
$netw = long2ip(ip2long($ipaddr)&ip2long($ipmask));
// transformation en binaire sans les .
$mask = explode(".",$ipmask);
$mask1 = str_pad(decbin($mask[0]),8,"0",STR_PAD_LEFT);
if ($mask[0] == 0) {
$bits = "32";
} else {
$mask2 = str_pad(decbin($mask[1]),8,"0",STR_PAD_LEFT);
$mask3 = str_pad(decbin($mask[2]),8,"0",STR_PAD_LEFT);
$mask4 = str_pad(decbin($mask[3]),8,"0",STR_PAD_LEFT);
// Concaténation du masque (binaire).
// $msk = $mask1.$mask2.$mask3.$mask4;
$bits = strcspn($mask1.$mask2.$mask3.$mask4,"0");
}
}
return $netw."/".$bits;
}
}
---------------------------------------------------------------------
Offline
Merci de la contrib
Ce we c'est relache sur GLPI (on a d'autres trucs sur le feu), on regardera ça donc lundi.
Si vous avez d'autres propositions, n'hésitez pas. C'est comme ça qu'on fait avancer le schimiliblick.
JMD / Jean-Mathieu Doléans - Glpi-project.org - Association Indepnet
Apportez votre pierre au projet GLPI : Soutenir
Offline
no pb
par contre ca fait 2 jours qu'il n'y a plus de cvs...
normal ?
Offline