You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2005-11-05 00:07:11

omichaux
Member
Registered: 2005-10-23
Posts: 10

Pluin Ocs: proposition de code pour calculer le numéro de réseau:

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

#2 2005-11-05 11:01:49

omichaux
Member
Registered: 2005-10-23
Posts: 10

Re: Pluin Ocs: proposition de code pour calculer le numéro de réseau:

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

#3 2005-11-05 17:09:51

JMD
GLPI - Lead
Registered: 2004-09-13
Posts: 9,180
Website

Re: Pluin Ocs: proposition de code pour calculer le numéro de réseau:

Merci de la contrib wink

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

#4 2005-11-05 17:40:17

omichaux
Member
Registered: 2005-10-23
Posts: 10

Re: Pluin Ocs: proposition de code pour calculer le numéro de réseau:

no pb

par contre ca fait 2 jours qu'il n'y a plus de cvs...
normal ?

Offline

Board footer

Powered by FluxBB