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 2006-07-05 15:39:36

wawa
GLPI-DEV
From: Montpellier / France
Registered: 2006-07-03
Posts: 6,019
Website

Bug importation ocs avec glpi 0.68rc2

Bonjour,

je viens d'installer glpi, et je l'ai configuré pour attaquer ocs (version cvs).

au moment de faire un import 'importation de nouveaux ordinateurs' j'ai une erreur :
Unknown column 'accountinfo.DEVICEID' in 'on clause'

j'ai regardé dans la table accountinfo de ocs, mais il n'y a que 2 champs accountinfo.HARDWARE_ID et accountinfo.TAG.

donc pour que ça fonctionne il faut modifier :

- dans ocsShowComputer :
$query_ocs = "select hardware.*, accountinfo.TAG AS TAG from hardware INNER JOIN accountinfo ON (hardware.DEVICEID = accountinfo.HARDWARE_ID) $WHERE order by hardware.NAME";
par :
$query_ocs = "select hardware.*, accountinfo.TAG AS TAG from hardware INNER JOIN accountinfo ON (hardware.ID = accountinfo.HARDWARE_ID) $WHERE order by hardware.NAME";

- dans oscUpdateBios :
$query = "select * from bios WHERE DEVICEID='".$ocs_id."'";
par :
$query = "select * from bios WHERE HARDWARE_ID='".$ocs_id."'";

je n'ai pas encore testé avec tout, mais en modifiant ça ça marche.

walid.

Offline

#2 2006-07-05 16:06:52

Darkpunk
Member
Registered: 2005-12-20
Posts: 31

Re: Bug importation ocs avec glpi 0.68rc2

Hello,

Dans ma base ocsreports, c'est bien DEVICEID qui apparait.

Tu as quelle version exacte d'OCS ?  (OCS Inventory NG)

Offline

#3 2006-07-05 16:08:32

wawa
GLPI-DEV
From: Montpellier / France
Registered: 2006-07-03
Posts: 6,019
Website

Re: Bug importation ocs avec glpi 0.68rc2

la version CVS d'aujourd'hui.

en fait les DEVICEID sont remplacés par des HARDWARE_ID sauf dans la table hardware

je termine de modifier le fichier php et je le met à dispo.

Offline

#4 2006-07-05 16:20:57

Darkpunk
Member
Registered: 2005-12-20
Posts: 31

Re: Bug importation ocs avec glpi 0.68rc2

Ah oui effectivement, dans OCS RC3 qui sort dans deux jours, ces petits détails vont changer.

CREATE TABLE accountinfo (
  HARDWARE_ID INTEGER NOT NULL,
  TAG VARCHAR(255) default 'NA',
  primary key(HARDWARE_ID),
  INDEX TAG (TAG)
) ENGINE=INNODB ;



Merci pour l'info smile

Offline

#5 2006-07-05 17:45:16

wawa
GLPI-DEV
From: Montpellier / France
Registered: 2006-07-03
Posts: 6,019
Website

Re: Bug importation ocs avec glpi 0.68rc2

voilà le fichier modifié, j'ai mis en commentaire (#) les lignes de base.

<?php
/*
* @version $Id: ocsng.function.php 3639 2006-06-28 14:31:09Z moyo $
----------------------------------------------------------------------
GLPI - Gestionnaire Libre de Parc Informatique
Copyright (C) 2003-2006 by the INDEPNET Development Team.

http://indepnet.net/   http://glpi-project.org
----------------------------------------------------------------------

LICENSE

    This file is part of GLPI.

    GLPI is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    GLPI is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with GLPI; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
------------------------------------------------------------------------
*/

// ----------------------------------------------------------------------
// Original Author of file:
// Purpose of file:
// ----------------------------------------------------------------------

function ocsShowNewComputer($check,$start,$tolinked=0){
global $db,$dbocs,$lang,$HTMLRel,$cfg_glpi;

if (!haveRight("ocsng","w")) return false;

$cfg_ocs=getOcsConf(1);

$WHERE="";
if (!empty($cfg_ocs["tag_limit"])){
    $splitter=explode("$",$cfg_ocs["tag_limit"]);
    if (count($splitter)){
        $WHERE="WHERE TAG='".$splitter[0]."' ";
        for ($i=1;$i<count($splitter);$i++)
            $WHERE.=" OR TAG='".$splitter[$i]."' ";
    }
}

#$query_ocs = "select hardware.*, accountinfo.TAG AS TAG from hardware INNER JOIN accountinfo ON (hardware.DEVICEID = accountinfo.HARDWARE_ID) $WHERE order by hardware.NAME";
$query_ocs = "select hardware.*, accountinfo.TAG AS TAG from hardware INNER JOIN accountinfo ON (hardware.ID = accountinfo.HARDWARE_ID) $WHERE order by hardware.NAME";
$result_ocs = $dbocs->query($query_ocs) or die($dbocs->error());

// Existing OCS - GLPI link
$query_glpi = "select * from glpi_ocs_link";
$result_glpi = $db->query($query_glpi) or die($db->error());

// Computers existing in GLPI
$query_glpi_comp = "select ID,name from glpi_computers where deleted = 'N' AND is_template='0'";
$result_glpi_comp = $db->query($query_glpi_comp) or die($db->error());

if ($dbocs->numrows($result_ocs)>0){

    // Get all hardware from OCS DB
    $hardware=array();
    while($data=$dbocs->fetch_array($result_ocs)){
        $data=clean_cross_side_scripting_deep(addslashes_deep($data));
        $hardware[$data["DEVICEID"]]["date"]=$data["LASTDATE"];
        $hardware[$data["DEVICEID"]]["name"]=$data["NAME"];
        $hardware[$data["DEVICEID"]]["TAG"]=$data["TAG"];
    }
    // Get all links between glpi and OCS
    $already_linked=array();
    if ($db->numrows($result_glpi)>0){
        while($data=$dbocs->fetch_array($result_glpi)){
        $already_linked[$data["ocs_id"]]=$data["last_update"];
        }
    }
    // Get all existing computers name in GLPI
    $computer_names=array();
    if ($db->numrows($result_glpi_comp)>0){
        while($data=$dbocs->fetch_array($result_glpi_comp)){
            $computer_names[$data["name"]]=$data["ID"];
        }
    }

    // Clean $hardware from already linked element
    if (count($already_linked)>0){
        foreach ($already_linked as $ID => $date){
            if (isset($hardware[$ID])&&isset($already_linked[$ID]))
            unset($hardware[$ID]);
        }
    }

    if ($tolinked&&count($hardware)){
    echo "<div align='center'><strong>".$lang["ocsng"][22]."</strong></div>";
    }

    echo "<div align='center'>";
    if (($numrows=count($hardware))>0){

        $parameters="check=$check";
            printPager($start,$numrows,$_SERVER["PHP_SELF"],$parameters);

        // delete end
        array_splice($hardware,$start+$cfg_glpi["list_limit"]);
        // delete begin
        if ($start>0)
        array_splice($hardware,0,$start);

        echo "<form method='post' name='ocsng_form' id='ocsng_form' action='".$_SERVER["PHP_SELF"]."'>";
        if ($tolinked==0)
            echo "<a href='".$_SERVER["PHP_SELF"]."?check=all&amp;start=$start' onclick= \"if ( markAllRows('ocsng_form') ) return false;\">".$lang["buttons"][18]."</a>&nbsp;/&nbsp;<a href='".$_SERVER["PHP_SELF"]."?check=none&amp;start=$start' onclick= \"if ( unMarkAllRows('ocsng_form') ) return false;\">".$lang["buttons"][19]."</a>";


        echo "<table class='tab_cadre'>";
        echo "<tr><th>".$lang["ocsng"][5]."</th><th>".$lang["common"][27]."</th><th>TAG</th><th>&nbsp;</th></tr>";

        echo "<tr class='tab_bg_1'><td colspan='4' align='center'>";
        echo "<input class='submit' type='submit' name='import_ok' value='".$lang["buttons"][37]."'>";
        echo "</td></tr>";


        foreach ($hardware as $ID => $tab){
            echo "<tr class='tab_bg_2'><td>".$tab["name"]."</td><td>".$tab["date"]."</td><td>".$tab["TAG"]."</td><td>";

            if ($tolinked==0)
            echo "<input type='checkbox' name='toimport[$ID]' ".($check=="all"?"checked":"").">";
            else {
                if (isset($computer_names[$tab["name"]]))
                    dropdownValue("glpi_computers","tolink[$ID]",$computer_names[$tab["name"]]);
                else
                    dropdown("glpi_computers","tolink[$ID]");
            }
            echo "</td></tr>";

        }
        echo "<tr class='tab_bg_1'><td colspan='4' align='center'>";
        echo "<input class='submit' type='submit' name='import_ok' value='".$lang["buttons"][37]."'>";
        echo "</td></tr>";
        echo "</table>";
        echo "</form>";

        printPager($start,$numrows,$_SERVER["PHP_SELF"],$parameters);

    } else echo "<strong>".$lang["ocsng"][9]."</strong>";

    echo "</div>";

} else echo "<div align='center'><strong>".$lang["ocsng"][9]."</strong></div>";
}

/**
* Make the item link between glpi and ocs.
*
* This make the database link between ocs and glpi databases
*
*@param $ocs_item_id integer : ocs item unique id.
*@param $glpi_computer_id integer : glpi computer id
*
*@return integer : link id.
*
**/
function ocs_link($ocs_item_id, $glpi_computer_id) {
    global $db;
    $query = "insert into glpi_ocs_link (glpi_id,ocs_id,last_update) VALUES ('".$glpi_computer_id."','".$ocs_item_id."',NOW())";

    $result=$db->query($query);
    if ($result)
        return ($db->insert_id());
    else return false;
}


function ocsManageDeleted(){
    global $db,$dbocs;
    $query="SELECT * FROM deleted_equiv";
    $result = $dbocs->query($query) or die($dbocs->error().$query);
    if ($dbocs->numrows($result)){
        $deleted=array();
        while ($data=$dbocs->fetch_array($result)){
            $deleted[$data["DELETED"]]=$data["EQUIVALENT"];
        }

        $query="TRUNCATE TABLE deleted_equiv";
        $result = $dbocs->query($query) or die($dbocs->error().$query);

        if (count($deleted))
        foreach ($deleted as $del => $equiv){
            if (!empty($equiv)){ // New name
                $query="UPDATE glpi_ocs_link SET ocs_id='$equiv' WHERE ocs_id='$del'";
                $db->query($query) or die($db->error().$query);
            } else { // Deleted
                $query="SELECT * FROM glpi_ocs_link WHERE ocs_id='$del'";
                $result=$db->query($query) or die($db->error().$query);
                if ($db->numrows($result)){
                    $del=$db->fetch_array($result);
                    $comp=new Computer();
                    $comp->delete(array("ID"=>$del["glpi_id"]),0);
                }

            }
        }
    }
}


function ocsImportComputer($DEVICEID){
    global $dbocs;

    // Set OCS checksum to max value
    $query = "UPDATE hardware SET CHECKSUM='".MAX_OCS_CHECKSUM."' WHERE DEVICEID='$DEVICEID'";
    $dbocs->query($query) or die($dbocs->error().$query);

    $query = "UPDATE config SET IVALUE='1' WHERE NAME='TRACE_DELETED'";
    $dbocs->query($query) or die($dbocs->error().$query);


    $query = "SELECT * FROM hardware WHERE DEVICEID='$DEVICEID'";
    $result = $dbocs->query($query) or die($dbocs->error().$query);
    $comp = new Computer;
    if ($dbocs->numrows($result)==1){
        $line=$dbocs->fetch_array($result);
        $line=clean_cross_side_scripting_deep(addslashes_deep($line));
        $dbocs->close();

        $comp->fields["name"] = $line["NAME"];
        $comp->fields["ocs_import"] = 1;
        $glpi_id=$comp->addToDB();
        if ($glpi_id){
            $cfg_ocs=getOcsConf(1);
            if ($cfg_ocs["default_state"]){
                updateState(COMPUTER_TYPE,$glpi_id,$cfg_ocs["default_state"],0,0);
            }
            ocsImportTag($line['DEVICEID'],$glpi_id,$cfg_ocs);
        }

        if ($idlink = ocs_link($line['DEVICEID'], $glpi_id)){


            ocsUpdateComputer($idlink,0);
        }
    }
}

function ocsImportTag($ocs_id,$glpi_id,$cfg_ocs){
    global $dbocs;
    // Import TAG
    if (!empty($cfg_ocs["import_tag_field"])){
        $query = "SELECT TAG FROM accountinfo WHERE HARDWARE_ID='$ocs_id'";
        $resultocs=$dbocs->query($query) or die($dbocs->error().$query);
        if ($dbocs->numrows($resultocs)>0){
            $tag=addslashes($dbocs->result($resultocs,0,0));
            if (!empty($tag)){
                $comp=new Computer();
                $input["ID"] = $glpi_id;

                switch ($cfg_ocs["import_tag_field"]){
                    case "otherserial":
                    case "contact_num":
                        $input[$cfg_ocs["import_tag_field"]]=$tag;
                        break;
                    case "location":
                        $input[$cfg_ocs["import_tag_field"]]=ocsImportDropdown('glpi_dropdown_locations','name',$tag);;
                        break;
                    case "network":
                        $input[$cfg_ocs["import_tag_field"]]=ocsImportDropdown('glpi_dropdown_network','name',$tag);;
                        break;
                }
                $comp->update($input);
            }
        }
    }
}

function ocsLinkComputer($ocs_id,$glpi_id){
    global $db,$dbocs,$lang;

    $query="SELECT * FROM glpi_ocs_link WHERE glpi_id='$glpi_id'";
    $result=$db->query($query);
    $ocs_exists=true;
    // Already link - check if the OCS computer already exists
    if ($db->numrows($result)>0){
        $data=$db->fetch_assoc($result);
        $query = "SELECT * FROM hardware WHERE DEVICEID='".$data["ocs_id"]."'";
        $result_ocs=$dbocs->query($query) or die($dbocs->error().$query);
        // Not found
        if ($dbocs->numrows($result_ocs)==0){
            $ocs_exists=false;
            $query="DELETE FROM glpi_ocs_link WHERE ID='".$data["ID"]."'";
            $db->query($query);
        }
    }

    if (!$ocs_exists||$db->numrows($result)==0){

        // Set OCS checksum to max value
        $query = "UPDATE hardware SET CHECKSUM='".MAX_OCS_CHECKSUM."' WHERE DEVICEID='$ocs_id'";
        $dbocs->query($query) or die($dbocs->error().$query);

        $query = "UPDATE config SET IVALUE='1' WHERE NAME='TRACE_DELETED'";
        $dbocs->query($query) or die($dbocs->error().$query);
        //$comp = new Computer;
        if ($idlink = ocs_link($ocs_id, $glpi_id)){

            $comp=new Computer();
            $input["ID"] = $glpi_id;
            $input["ocs_import"] = 1;
            $comp->update($input);


            // Reset using GLPI Config
            $cfg_ocs=getOcsConf(1);

            ocsImportTag($ocs_id,$glpi_id,$cfg_ocs);

            if($cfg_ocs["import_general_os"])
                ocsResetDropdown($glpi_id,"os","glpi_dropdown_os");
            if($cfg_ocs["import_device_processor"])
                ocsResetDevices($glpi_id,PROCESSOR_DEVICE);
            if($cfg_ocs["import_device_iface"])
                ocsResetDevices($glpi_id,NETWORK_DEVICE);
            if($cfg_ocs["import_device_memory"])
                ocsResetDevices($glpi_id,RAM_DEVICE);
            if($cfg_ocs["import_device_hdd"])
                ocsResetDevices($glpi_id,HDD_DEVICE);
            if($cfg_ocs["import_device_sound"])
                ocsResetDevices($glpi_id,SND_DEVICE);
            if($cfg_ocs["import_device_gfxcard"])
                ocsResetDevices($glpi_id,GFX_DEVICE);
            if($cfg_ocs["import_device_drives"])
                ocsResetDevices($glpi_id,DRIVE_DEVICE);
            if($cfg_ocs["import_device_modems"] || $cfg_ocs["import_device_ports"])
                ocsResetDevices($glpi_id,PCI_DEVICE);
            if($cfg_ocs["import_software"])
                ocsResetLicenses($glpi_id);
            if($cfg_ocs["import_periph"])
                ocsResetPeriphs($glpi_id);
            if($cfg_ocs["import_monitor"]==1) // Only reset monitor as global in unit management try to link monitor with existing
                ocsResetMonitors($glpi_id);
            if($cfg_ocs["import_printer"])
                ocsResetPrinters($glpi_id);

            ocsUpdateComputer($idlink,0);
        }
    } else echo $ocs_id." - ".$lang["ocsng"][23];

}


function ocsUpdateComputer($ID,$dohistory,$force=0){

    global $db,$dbocs;

     $cfg_ocs=getOcsConf(1);

    $query="SELECT * FROM glpi_ocs_link WHERE ID='$ID'";

    $result=$db->query($query) or die($db->error().$query);;
    if ($db->numrows($result)==1){
        $line=$db->fetch_assoc($result);
    $query_ocs = "SELECT CHECKSUM FROM hardware WHERE DEVICEID='".$line['ocs_id']."'";
    $result_ocs = $dbocs->query($query_ocs) or die($dbocs->error().$query_ocs);
    if ($dbocs->numrows($result_ocs)==1){
        if ($force)
            $ocs_checksum=MAX_OCS_CHECKSUM;
        else
            $ocs_checksum=$dbocs->result($result_ocs,0,0);



        $mixed_checksum=intval($ocs_checksum) &  intval($cfg_ocs["checksum"]);
/*        echo "OCS CS=".decbin($ocs_checksum)." - $ocs_checksum<br>";
        echo "GLPI CS=".decbin($cfg_ocs["checksum"])." - ".$cfg_ocs["checksum"]."<br>";
        echo "MIXED CS=".decbin($mixed_checksum)." - $mixed_checksum <br>";
*/
        // Is an update to do ?
        if ($mixed_checksum){
            // Get updates on computers :
            $computer_updates=importArrayFromDB($line["computer_update"]);

            if ($mixed_checksum&pow(2,HARDWARE_FL))
                ocsUpdateHardware($line['glpi_id'],$line['ocs_id'],$cfg_ocs,$computer_updates,$dohistory);

            if ($mixed_checksum&pow(2,BIOS_FL))
                ocsUpdateBios($line['glpi_id'],$line['ocs_id'],$cfg_ocs,$computer_updates,$dohistory);

            // Get import devices
            $import_device=importArrayFromDB($line["import_device"]);
            if ($mixed_checksum&pow(2,MEMORIES_FL))
                ocsUpdateDevices(RAM_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);

            if ($mixed_checksum&pow(2,STORAGES_FL)){
                ocsUpdateDevices(HDD_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);
                ocsUpdateDevices(DRIVE_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);
            }

            if ($mixed_checksum&pow(2,HARDWARE_FL))
                ocsUpdateDevices(PROCESSOR_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);

            if ($mixed_checksum&pow(2,VIDEOS_FL))
                ocsUpdateDevices(GFX_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);

            if ($mixed_checksum&pow(2,SOUNDS_FL))
                ocsUpdateDevices(SND_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);

            if ($mixed_checksum&pow(2,NETWORKS_FL))
                ocsUpdateDevices(NETWORK_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);

            if ($mixed_checksum&pow(2,MODEMS_FL)||$mixed_checksum&pow(2,PORTS_FL))
                ocsUpdateDevices(PCI_DEVICE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_device,$dohistory);

            if ($mixed_checksum&pow(2,MONITORS_FL)){
                // Get import monitors
                $import_monitor=importArrayFromDB($line["import_monitor"]);
                ocsUpdatePeripherals(MONITOR_TYPE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_monitor,$dohistory);

            }

            if ($mixed_checksum&pow(2,PRINTERS_FL)){
                // Get import printers
                $import_printer=importArrayFromDB($line["import_printers"]);
                ocsUpdatePeripherals(PRINTER_TYPE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_printer,$dohistory);
            }

            echo "avant";
            if ($mixed_checksum&pow(2,INPUTS_FL)){
                // Get import monitors
                $import_peripheral=importArrayFromDB($line["import_peripheral"]);
                ocsUpdatePeripherals(PERIPHERAL_TYPE,$line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_peripheral,$dohistory);
            }

            echo "avant2";
            if ($mixed_checksum&pow(2,SOFTWARES_FL)){
                // Get import monitors
                $import_software=importArrayFromDB($line["import_software"]);
                ocsUpdateSoftware($line['glpi_id'],$line['ocs_id'],$cfg_ocs,$import_software,$dohistory);
            }



            // Update OCS Cheksum
            $query_ocs="UPDATE hardware SET CHECKSUM= (CHECKSUM - $mixed_checksum) WHERE DEVICEID='".$line['ocs_id']."'";
            $dbocs->query($query_ocs) or die($dbocs->error().$query_ocs);
        }
    }
    }
}

/**
* Get OCSNG mode configuration
*
* Get all config of the OCSNG mode
*
* @param $id int : ID of the OCS config (default value 1)
*@return Value of $confVar fields or false if unfound.
*
**/
function getOcsConf($id) {
    global $db;
    $query = "SELECT * FROM glpi_ocs_config WHERE ID='$id'";
    $result = $db->query($query)  or die($db->error().$query);
    if($result) return $db->fetch_assoc($result);
    else return 0;
}


/**
* Update the computer hardware configuration
*
* Update the computer hardware configuration
*
*@param $ocs_id integer : glpi computer id
*@param $glpi_id integer : ocs computer id.
*@param $cfg_ocs array : ocs config
*@param $computer_updates array : already updated fields of the computer
*@param $dohistory log updates on history ?
*
*@return nothing.
*
**/
function ocsUpdateHardware($glpi_id,$ocs_id,$cfg_ocs,$computer_updates,$dohistory=1) {
    global $dbocs,$lang;
    $query = "select * from hardware WHERE DEVICEID='".$ocs_id."'";
    $result = $dbocs->query($query) or die($dbocs->error());
    if ($dbocs->numrows($result)==1) {

        $line=$dbocs->fetch_assoc($result);
        $line=clean_cross_side_scripting_deep(addslashes_deep($line));
        $compudate=array();

        if($cfg_ocs["import_general_os"]&&!in_array("os",$computer_updates)) {
            $compupdate["os"] = ocsImportDropdown('glpi_dropdown_os','name',$line["OSNAME"]);
            $compupdate["os_version"] = ocsImportDropdown('glpi_dropdown_os_version','name',$line["OSVERSION"]);
            if (!ereg("CEST",$line["OSCOMMENTS"])) // Not linux comment
                $compupdate["os_sp"] = ocsImportDropdown('glpi_dropdown_os_sp','name',$line["OSCOMMENTS"]);
        }

        if($cfg_ocs["import_general_domain"]&&!in_array("domain",$computer_updates)) {
            $compupdate["domain"] = ocsImportDropdown('glpi_dropdown_domain','name',$line["WORKGROUP"]);
        }

        if($cfg_ocs["import_general_contact"]&&!in_array("contact",$computer_updates)) {
            $compupdate["contact"] = $line["USERID"];
        }

        if($cfg_ocs["import_general_name"]&&!in_array("name",$computer_updates)) {
            $compupdate["name"] = $line["NAME"];
        }

        if($cfg_ocs["import_general_comments"]&&!in_array("comments",$computer_updates)) {
            $compupdate["comments"]="";;
            if (!empty($line["DESCRIPTION"])&&$line["DESCRIPTION"]!="N/A") $compupdate["comments"] .= $line["DESCRIPTION"]."\r\n";
            $compupdate["comments"] .= "Swap: ".$line["SWAP"];
        }
        if (count($compupdate)){
            $compupdate["ID"] = $glpi_id;
            $comp=new Computer();
            $comp->update($compupdate,$dohistory);
        }

    }
}


/**
* Update the computer bios configuration
*
* Update the computer bios configuration
*
*@param $ocs_id integer : glpi computer id
*@param $glpi_id integer : ocs computer id.
*@param $cfg_ocs array : ocs config
*@param $computer_updates array : already updated fields of the computer
*@param $dohistory boolean : log changes ?
*
*@return nothing.
*
**/
function ocsUpdateBios($glpi_id,$ocs_id,$cfg_ocs,$computer_updates,$dohistory=1) {
    global $dbocs;
    #$query = "select * from bios WHERE DEVICEID='".$ocs_id."'";
    $query = "select * from bios WHERE HARDWARE_ID='".$ocs_id."'";
    $result = $dbocs->query($query) or die($dbocs->error().$query);
    if ($dbocs->numrows($result)==1) {
        $line=$dbocs->fetch_assoc($result);
        $line=clean_cross_side_scripting_deep(addslashes_deep($line));
        $compudate=array();

        if($cfg_ocs["import_general_serial"]&&!in_array("serial",$computer_updates)) {
            $compupdate["serial"] = $line["SSN"];
        }

        if($cfg_ocs["import_general_model"]&&!in_array("model",$computer_updates)) {
            $compupdate["model"] = ocsImportDropdown('glpi_dropdown_model','name',$line["SMODEL"]);
        }

        if($cfg_ocs["import_general_enterprise"]&&!in_array("FK_glpi_enterprise",$computer_updates)) {
            $compupdate["FK_glpi_enterprise"] = ocsImportEnterprise($line["SMANUFACTURER"]);
        }

        if($cfg_ocs["import_general_type"]&&!empty($line["TYPE"])&&!in_array("type",$computer_updates)) {
            $compupdate["type"] = ocsImportDropdown('glpi_type_computers','name',$line["TYPE"]);
        }

        if (count($compupdate)){
            $compupdate["ID"] = $glpi_id;
            $comp=new Computer();
            $comp->update($compupdate,$dohistory);
        }

    }
}


/**
* Import a dropdown from OCS table.
*
* This import a new dropdown if it doesn't exist.
*
*@param $dpdTable string : Name of the glpi dropdown table.
*@param $dpdRow string : Name of the glinclude ($phproot . "/glpi/includes_devices.php");pi dropdown row.
*@param $value string : Value of the new dropdown.
*
*@return integer : dropdown id.
*
**/

function ocsImportDropdown($dpdTable,$dpdRow,$value) {
    global $db,$cfg_glpi;
    $query2 = "select * from ".$dpdTable." where $dpdRow='".$value."'";
    $result2 = $db->query($query2);
    if($db->numrows($result2) == 0) {
        if (in_array($dpdTable,$cfg_glpi["dropdowntree_tables"])&&$dpdRow=="name"){
            $query3 = "insert into ".$dpdTable." (".$dpdRow.",completename) values ('".$value."','".$value."')";
        } else
        $query3 = "insert into ".$dpdTable." (".$dpdRow.") values ('".$value."')";
        $db->query($query3) or die("echec de l'importation".$db->error());
        return $db->insert_id();
    } else {
    $line2 = $db->fetch_array($result2);
    return $line2["ID"];
    }

}


/**
* Import g&#65533;&#65533;al config of a new enterprise
*
* This function create a new enterprise in GLPI with some general datas.
*
*@param $name : name of the enterprise.
*
*@return integer : inserted enterprise id.
*
**/
function ocsImportEnterprise($name) {
    global $db;
    $query = "SELECT ID FROM glpi_enterprises WHERE name = '".$name."'";
    $result = $db->query($query) or die("Verification existence entreprise :".$name." - ".$db->error());
    if ($db->numrows($result)>0){
        $enterprise_id  = $db->result($result,0,"ID");
    } else {
        $entpr = new Enterprise;
        $entpr->fields["name"] = $name;
        $enterprise_id = $entpr->addToDB();
    }
    return($enterprise_id);
}

function ocsCleanLinks(){
    global $db;

    $query="SELECT glpi_ocs_link.ID AS ID FROM glpi_ocs_link LEFT JOIN glpi_computers ON glpi_computers.ID=glpi_ocs_link.glpi_id WHERE glpi_computers.ID IS NULL";

    $result=$db->query($query);
    if ($db->numrows($result)>0){
        while ($data=$db->fetch_array($result)){
            $query2="DELETE FROM glpi_ocs_link WHERE ID='".$data['ID']."'";
            $db->query($query2);
        }
    }
}


function cron_ocsng(){

    global $db,$dbocs;

    $dbocs=new DBocs();

    $cfg_ocs=getOcsConf(1);


    $query_ocs = "select * from hardware WHERE (CHECKSUM & ".$cfg_ocs["checksum"].") > 0 order by lastdate";
    $result_ocs = $dbocs->query($query_ocs) or die($dbocs->error());
    if ($dbocs->numrows($result_ocs)>0){

        $hardware=array();
        while($data=$dbocs->fetch_array($result_ocs)){
            $hardware[$data["DEVICEID"]]["date"]=$data["LASTDATE"];
            $hardware[$data["DEVICEID"]]["name"]=addslashes($data["NAME"]);
        }


        $query_glpi = "SELECT * FROM glpi_ocs_link ORDER BY last_update";
        $result_glpi = $db->query($query_glpi);
        $done=false;
        while(!$done&&$data=$db->fetch_assoc($result_glpi)){
            $data=clean_cross_side_scripting_deep(addslashes_deep($data));

            if (isset($hardware[$data["ocs_id"]])){
                ocsUpdateComputer($data["ID"],1);
                $done=true;
            }
        }
        if ($done) return 1;

    }
    return 0;

}


function ocsShowUpdateComputer($check,$start){
    global $db,$dbocs,$lang,$HTMLRel,$cfg_glpi;

    if (!haveRight("ocsng","w")) return false;

    $cfg_ocs=getOcsConf(1);

    $query_ocs = "select * from hardware WHERE (CHECKSUM & ".$cfg_ocs["checksum"].") > 0 order by lastdate";
    $result_ocs = $dbocs->query($query_ocs) or die($dbocs->error());

    $query_glpi = "select glpi_ocs_link.last_update as last_update,  glpi_ocs_link.glpi_id as glpi_id, glpi_ocs_link.ocs_id as ocs_id, glpi_computers.name as name, glpi_ocs_link.auto_update as auto_update, glpi_ocs_link.ID as ID";
    $query_glpi.= " from glpi_ocs_link LEFT JOIN glpi_computers ON (glpi_computers.ID = glpi_ocs_link.glpi_id) ";
    $query_glpi.= " ORDER by glpi_ocs_link.last_update, glpi_computers.name";

    $result_glpi = $db->query($query_glpi) or die($db->error());
    if ($dbocs->numrows($result_ocs)>0){

        // Get all hardware from OCS DB
        $hardware=array();
        while($data=$dbocs->fetch_array($result_ocs)){
            $hardware[$data["DEVICEID"]]["date"]=$data["LASTDATE"];
            $hardware[$data["DEVICEID"]]["name"]=addslashes($data["NAME"]);
        }

        // Get all links between glpi and OCS
        $already_linked=array();
        if ($db->numrows($result_glpi)>0){
            while($data=$db->fetch_assoc($result_glpi)){
                $data=clean_cross_side_scripting_deep(addslashes_deep($data));
                if (isset($hardware[$data["ocs_id"]])){
                    $already_linked[$data["ocs_id"]]["date"]=$data["last_update"];
                    $already_linked[$data["ocs_id"]]["name"]=$data["name"];
                    $already_linked[$data["ocs_id"]]["ID"]=$data["ID"];
                    $already_linked[$data["ocs_id"]]["glpi_id"]=$data["glpi_id"];
                }
            }
        }
        echo "<div align='center'>";
        echo "<h2>".$lang["ocsng"][10]."</h2>";

        if (($numrows=count($already_linked))>0){

            $parameters="check=$check";
            printPager($start,$numrows,$_SERVER["PHP_SELF"],$parameters);

            // delete end
            array_splice($already_linked,$start+$cfg_glpi["list_limit"]);
            // delete begin
            if ($start>0)
            array_splice($already_linked,0,$start);

            echo "<form method='post' id='ocsng_form' name='ocsng_form' action='".$_SERVER["PHP_SELF"]."'>";

            echo "<a href='".$_SERVER["PHP_SELF"]."?check=all' onclick= \"if ( markAllRows('ocsng_form') ) return false;\">".$lang["buttons"][18]."</a>&nbsp;/&nbsp;<a href='".$_SERVER["PHP_SELF"]."?check=none' onclick= \"if ( unMarkAllRows('ocsng_form') ) return false;\">".$lang["buttons"][19]."</a>";
            echo "<table class='tab_cadre'>";
            echo "<tr><th>".$lang["ocsng"][11]."</th><th>".$lang["ocsng"][13]."</th><th>".$lang["ocsng"][14]."</th><th>&nbsp;</th></tr>";

            echo "<tr class='tab_bg_1'><td colspan='4' align='center'>";
            echo "<input class='submit' type='submit' name='update_ok' value='".$lang["buttons"][7]."'>";
            echo "</td></tr>";

            foreach ($already_linked as $ID => $tab){

                echo "<tr align='center' class='tab_bg_2'><td><a href='".$HTMLRel."front/computer.form.php?ID=".$tab["glpi_id"]."'>".$tab["name"]."</a></td><td>".$tab["date"]."</td><td>".$hardware[$ID]["date"]."</td><td>";

                echo "<input type='checkbox' name='toupdate[".$tab["ID"]."]' ".($check=="all"?"checked":"").">";
                echo "</td></tr>";
            }
            echo "<tr class='tab_bg_1'><td colspan='4' align='center'>";
            echo "<input class='submit' type='submit' name='update_ok' value='".$lang["buttons"][7]."'>";
            echo "</td></tr>";
            echo "</table>";
            echo "</form>";
            printPager($start,$numrows,$_SERVER["PHP_SELF"],$parameters);

        } else echo "<br><strong>".$lang["ocsng"][11]."</strong>";

        echo "</div>";

    } else echo "<div align='center'><strong>".$lang["ocsng"][12]."</strong></div>";
}


function mergeOcsArray($glpi_id,$tomerge,$field){
    global $db;
    $query="SELECT $field FROM glpi_ocs_link WHERE glpi_id='$glpi_id'";
    if ($result=$db->query($query)){
        $tab=importArrayFromDB($db->result($result,0,0));
        $newtab=array_unique(array_merge($tomerge,$tab));
        $query="UPDATE glpi_ocs_link SET $field='".exportArrayToDB($newtab)."' WHERE glpi_id='$glpi_id'";
        $db->query($query);
    }

}

function deleteInOcsArray($glpi_id,$todel,$field){
    global $db;
    $query="SELECT $field FROM glpi_ocs_link WHERE glpi_id='$glpi_id'";
    if ($result=$db->query($query)){
        $tab=importArrayFromDB($db->result($result,0,0));
        unset($tab[$todel]);
        $query="UPDATE glpi_ocs_link SET $field='".exportArrayToDB($tab)."' WHERE glpi_id='$glpi_id'";
        $db->query($query);
    }

}

function addToOcsArray($glpi_id,$toadd,$field){
    global $db;
    $query="SELECT $field FROM glpi_ocs_link WHERE glpi_id='$glpi_id'";
    if ($result=$db->query($query)){
        $tab=importArrayFromDB($db->result($result,0,0));
        foreach ($toadd as $key => $val)
            $tab[$key]=$val;
        $query="UPDATE glpi_ocs_link SET $field='".exportArrayToDB($tab)."' WHERE glpi_id='$glpi_id'";
        $db->query($query);
    }

}


function ocsEditLock($target,$ID){
    global $db,$lang,$SEARCH_OPTION;


    $query="SELECT * FROM glpi_ocs_link WHERE glpi_id='$ID'";

    $result=$db->query($query);
    if ($db->numrows($result)==1){
        $data=$db->fetch_assoc($result);

        echo "<div align='center'>";
        echo "<form method='post' action=\"$target\">";
        echo "<input type='hidden' name='ID' value='$ID'>";
        echo "<table class='tab_cadre'><tr class='tab_bg_2'><td>";
        echo "<input type='hidden' name='resynch_id' value='".$data["ID"]."'>";
        echo "<input class=submit type='submit' name='force_ocs_resynch' value='".$lang["ocsng"][24]."'>";
        echo "</td><tr></table>";
        echo "</form>";

        echo "</div>";

        echo "<div align='center'>";
        // Print lock fields for OCSNG

        $lockable_fields=array("name","type","FK_glpi_enterprise","model","serial","comments","contact","domain","os","os_sp","os_version");
        $locked=array_intersect(importArrayFromDB($data["computer_update"]),$lockable_fields);

        if (count($locked)){
            echo "<form method='post' action=\"$target\">";
            echo "<input type='hidden' name='ID' value='$ID'>";
            echo "<table class='tab_cadre'>";
            echo "<tr><th colspan='2'>".$lang["ocsng"][16]."</th></tr>";
            foreach ($locked as $key => $val){
                foreach ($SEARCH_OPTION[COMPUTER_TYPE] as $key2 => $val2)
                if ($val2["linkfield"]==$val||($val2["table"]=="glpi_computers"&&$val2["field"]==$val))
                echo "<tr class='tab_bg_1'><td>".$val2["name"]."</td><td><input type='checkbox' name='lockfield[".$key."]'></td></tr>";
            }
            echo "<tr class='tab_bg_2'><td align='center' colspan='2'><input class='submit' type='submit' name='unlock_field' value='".$lang["buttons"][38]."'></td></tr>";
            echo "</table>";
            echo "</form>";
        } else echo "<strong>".$lang["ocsng"][15]."</strong>";
        echo "</div>";
    }

}

/**
* Import the devices for a computer
*
*
*
*@param $device_type integer : device type
*@param $glpi_id integer : glpi computer id.
*@param $ocs_id integer : ocs computer id (DEVICEID).
*@param $cfg_ocs array : ocs config
*@param $dohistory boolean : log changes ?
*@param $import_device array : already imported devices
*
*@return Nothing (void).
*
**/
function ocsUpdateDevices($device_type,$glpi_id,$ocs_id,$cfg_ocs,$import_device,$dohistory){
    global $dbocs,$db;

    $do_clean=false;
    switch ($device_type){
        case RAM_DEVICE:
        //Memoire
        if ($cfg_ocs["import_device_memory"]){
            $do_clean=true;

            #$query2 = "select * from memories where DEVICEID = '".$ocs_id."' ORDER BY ID";
            $query2 = "select * from memories where HARDWARE_ID = '".$ocs_id."' 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["CAPACITY"])&&$line2["CAPACITY"]!="No") {
                        if($line2["DESCRIPTION"]) $ram["designation"] = $line2["DESCRIPTION"];
                        else $ram["designation"] = "Unknown";
                        $ram["specif_default"] =  $line2["CAPACITY"];
                        if (!in_array(RAM_DEVICE."$$$$$".$ram["designation"],$import_device)){
                            $ram["frequence"] =  $line2["SPEED"];
                            $ram["type"] = ocsImportDropdown("glpi_dropdown_ram_type","name",$line2["TYPE"]);
                            $ram_id = ocsAddDevice(RAM_DEVICE,$ram);
                            if ($ram_id){
                                $devID=compdevice_add($glpi_id,RAM_DEVICE,$ram_id,$line2["CAPACITY"],$dohistory);
                                addToOcsArray($glpi_id,array($devID=>RAM_DEVICE."$$$$$".$ram["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(RAM_DEVICE."$$$$$".$ram["designation"],$import_device);
                            unset($import_device[$id]);
                        }
                    }
                }
            }
        }
        break;
        case HDD_DEVICE:
        //Disque Dur
        if ($cfg_ocs["import_device_hdd"]){
            $do_clean=true;

            #$query2 = "select * from storages where DEVICEID = '".$ocs_id."' ORDER BY ID";
            $query2 = "select * from storages where HARDWARE_ID = '".$ocs_id."' 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"])&&eregi("hard disk",$line2["TYPE"])) {
                        if($line2["NAME"]) $dd["designation"] = $line2["NAME"];
                        else if($line2["MODEL"]) $dd["designation"] = $line2["MODEL"];
                        else $dd["designation"] = "Unknown";
                        if (!in_array(HDD_DEVICE."$$$$$".$dd["designation"],$import_device)){
                            $dd["specif_default"] =  $line2["DISKSIZE"];
                            $dd_id = ocsAddDevice(HDD_DEVICE,$dd);
                            if ($dd_id){
                                $devID=compdevice_add($glpi_id,HDD_DEVICE,$dd_id,$line2["DISKSIZE"],$dohistory);
                                addToOcsArray($glpi_id,array($devID=>HDD_DEVICE."$$$$$".$dd["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(HDD_DEVICE."$$$$$".$dd["designation"],$import_device);
                            unset($import_device[$id]);
                        }

                    }
                }
            }
        }
        break;
        case DRIVE_DEVICE:
        //lecteurs
        if ($cfg_ocs["import_device_drives"]){
            $do_clean=true;

            #$query2 = "select * from storages where DEVICEID = '".$ocs_id."'";
            $query2 = "select * from storages where HARDWARE_ID = '".$ocs_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(!eregi("hard disk",$line2["TYPE"])) {
                        if($line2["NAME"]) $stor["designation"] = $line2["NAME"];
                        else if($line2["MODEL"]) $stor["designation"] = $line2["MODEL"];
                        else $stor["designation"] = "Unknown";
                        if (!in_array(DRIVE_DEVICE."$$$$$".$stor["designation"],$import_device)){
                            $stor["specif_default"] =  $line2["DISKSIZE"];
                            $stor_id = ocsAddDevice(DRIVE_DEVICE,$stor);
                            if ($stor_id){
                                $devID=compdevice_add($glpi_id,DRIVE_DEVICE,$stor_id,"",$dohistory);
                                addToOcsArray($glpi_id,array($devID=>DRIVE_DEVICE."$$$$$".$stor["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(DRIVE_DEVICE."$$$$$".$stor["designation"],$import_device);
                            unset($import_device[$id]);
                        }

                    }
                }
            }
        }
        break;
        case PCI_DEVICE:
        //Modems
        if ($cfg_ocs["import_device_modems"]){
            $do_clean=true;

            #$query2 = "select * from modems where DEVICEID = '".$ocs_id."' ORDER BY ID";
            $query2 = "select * from modems where HARDWARE_ID = '".$ocs_id."' 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(PCI_DEVICE."$$$$$".$mdm["designation"],$import_device)){
                            if(!empty($line2["DESCRIPTION"])) $mdm["comment"] = $line2["TYPE"]."\r\n".$line2["DESCRIPTION"];
                            $mdm_id = ocsAddDevice(PCI_DEVICE,$mdm);
                            if ($mdm_id){
                                $devID=compdevice_add($glpi_id,PCI_DEVICE,$mdm_id,"",$dohistory);
                                addToOcsArray($glpi_id,array($devID=>PCI_DEVICE."$$$$$".$mdm["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(PCI_DEVICE."$$$$$".$mdm["designation"],$import_device);
                            unset($import_device[$id]);
                        }

                }
            }
        }
        //Ports
        if ($cfg_ocs["import_device_ports"]){

            #$query2 = "select * from ports where DEVICEID = '".$ocs_id."' ORDER BY ID";
            $query2 = "select * from ports where HARDWARE_ID = '".$ocs_id."' 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(PCI_DEVICE."$$$$$".$port["designation"],$import_device)){
                            if(!empty($line2["DESCRIPTION"])&&$line2["DESCRIPTION"]!="None") $port["comment"] = $line2["DESCRIPTION"];
                            $port_id = ocsAddDevice(PCI_DEVICE,$port);
                            if ($port_id){
                                $devID=compdevice_add($glpi_id,PCI_DEVICE,$port_id,"",$dohistory);
                                addToOcsArray($glpi_id,array($devID=>PCI_DEVICE."$$$$$".$port["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(PCI_DEVICE."$$$$$".$port["designation"],$import_device);
                            unset($import_device[$id]);
                        }
                }
            }
        }
        break;
        case PROCESSOR_DEVICE:
        //Processeurs :
        if ($cfg_ocs["import_device_processor"]){
            $do_clean=true;

            $query = "select * from hardware WHERE DEVICEID='$ocs_id'";
            $result = $dbocs->query($query) or die($dbocs->error());
            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"];
                    $processor["specif_default"] =  $line["PROCESSORS"];
                    if (!in_array(PROCESSOR_DEVICE."$$$$$".$processor["designation"],$import_device)){
                        $proc_id = ocsAddDevice(PROCESSOR_DEVICE,$processor);
                        if ($proc_id){
                            $devID=compdevice_add($glpi_id,PROCESSOR_DEVICE,$proc_id,$line["PROCESSORS"],$dohistory);
                            addToOcsArray($glpi_id,array($devID=>PROCESSOR_DEVICE."$$$$$".$processor["designation"]),"import_device");
                        }
                    } else {
                        $id=array_search(PROCESSOR_DEVICE."$$$$$".$processor["designation"],$import_device);
                        unset($import_device[$id]);
                    }
                }
            }
        }
        break;
        case NETWORK_DEVICE:

        //Carte reseau
        if ($cfg_ocs["import_device_iface"]||$cfg_ocs["import_ip"]){

            #$query2 = "select * from networks where DEVICEID = '".$ocs_id."' ORDER BY ID";
            $query2 = "select * from networks where NETWORK_ID = '".$ocs_id."' ORDER BY ID";

            $result2 = $dbocs->query($query2);
            $i=0;
            // Add network device
            if($dbocs->numrows($result2) > 0) {
                while($line2 = $dbocs->fetch_array($result2)) {
                    $line2=clean_cross_side_scripting_deep(addslashes_deep($line2));
                    if ($cfg_ocs["import_device_iface"]){
                        $do_clean=true;
                        $network["designation"] = $line2["DESCRIPTION"];
                        if (!in_array(NETWORK_DEVICE."$$$$$".$network["designation"],$import_device)){
                            if(!empty($line2["SPEED"])) $network["bandwidth"] =  $line2["SPEED"];
                            $net_id = ocsAddDevice(NETWORK_DEVICE,$network);
                            if ($net_id){
                                $devID=compdevice_add($glpi_id,NETWORK_DEVICE,$net_id,$line2["MACADDR"],$dohistory);
                                addToOcsArray($glpi_id,array($devID=>NETWORK_DEVICE."$$$$$".$network["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(NETWORK_DEVICE."$$$$$".$network["designation"],$import_device);
                            unset($import_device[$id]);
                        }
                    }

                    if (!empty($line2["IPADDRESS"])&&$cfg_ocs["import_ip"]){
                        $ocs_ips=split(",",$line2["IPADDRESS"]);
                        sort(array_unique($ocs_ips));

                        // Is there an existing networking port ?
                        $query="SELECT * FROM glpi_networking_ports WHERE device_type='".COMPUTER_TYPE."' AND on_device='$glpi_id' AND ifmac='".$line2["MACADDR"]."' ORDER BY ID";
                        $glpi_ips=array();
                        $result=$db->query($query);
                        if ($db->numrows($result)>0){
                            while ($data=$db->fetch_array($result))
                            $glpi_ips[]=$data["ID"];
                        }
                        unset($netport);
                        $netport["ifmac"]=$line2["MACADDR"];
                        $netport["iface"]=ocsImportDropdown("glpi_dropdown_iface","name",$line2["TYPE"]);
                        $netport["name"]=$line2["DESCRIPTION"];
                        $netport["on_device"]=$glpi_id;
                        $netport["device_type"]=COMPUTER_TYPE;

                        $np=new Netport();
                        // Update already in DB
                        for ($j=0;$j<min(count($glpi_ips),count($ocs_ips));$j++){

                            $netport["ifaddr"]=$ocs_ips[$j];
                            $netport["logical_number"]=$i;
                            $netport["ID"]=$glpi_ips[$j];
                            $np->update($netport);
                            $i++;
                        }

                        // If other IP founded
                        if (count($glpi_ips)<count($ocs_ips))
                        for ($j=count($glpi_ips);$j<count($ocs_ips);$j++){
                            unset($netport["ID"]);
                            unset($np->fields["ID"]);
                            $netport["ifaddr"]=$ocs_ips[$j];
                            $netport["logical_number"]=$i;
                            $np->add($netport);
                            $i++;
                        }

                    }
                }
            }

        }
        break;
        case GFX_DEVICE:
        //carte graphique
        if ($cfg_ocs["import_device_gfxcard"]){
            $do_clean=true;

            #$query2 = "select distinct(NAME) as NAME, MEMORY from videos where DEVICEID = '".$ocs_id."'and NAME != '' ORDER BY ID";
            $query2 = "select distinct(NAME) as NAME, MEMORY from videos where HARDWARE_ID = '".$ocs_id."'and NAME != '' 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 (!in_array(GFX_DEVICE."$$$$$".$video["designation"],$import_device)){
                            $video["ram"]="";
                            if(!empty($line2["MEMORY"])) $video["ram"] =  $line2["MEMORY"];
                            $video_id = ocsAddDevice(GFX_DEVICE,$video);
                            if ($video_id){
                                $devID=compdevice_add($glpi_id,GFX_DEVICE,$video_id,$video["ram"],$dohistory);
                                addToOcsArray($glpi_id,array($devID=>GFX_DEVICE."$$$$$".$video["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(GFX_DEVICE."$$$$$".$video["designation"],$import_device);
                            unset($import_device[$id]);
                        }
                }
            }
        }
        break;
        case SND_DEVICE:
        //carte son
        if ($cfg_ocs["import_device_sound"]){
            $do_clean=true;

            #$query2 = "select distinct(NAME) as NAME, DESCRIPTION from sounds where DEVICEID = '".$ocs_id."' AND NAME != '' ORDER BY ID";
            $query2 = "select distinct(NAME) as NAME, DESCRIPTION from sounds where HARDWARE_ID = '".$ocs_id."' AND NAME != '' 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));
                        $snd["designation"] = $line2["NAME"];
                        if (!in_array(SND_DEVICE."$$$$$".$snd["designation"],$import_device)){
                            if(!empty($line2["DESCRIPTION"])) $snd["comment"] =  $line2["DESCRIPTION"];
                            $snd_id = ocsAddDevice(SND_DEVICE,$snd);
                            if ($snd_id){
                                $devID=compdevice_add($glpi_id,SND_DEVICE,$snd_id,"",$dohistory);
                                addToOcsArray($glpi_id,array($devID=>SND_DEVICE."$$$$$".$snd["designation"]),"import_device");
                            }
                        } else {
                            $id=array_search(SND_DEVICE."$$$$$".$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($val,$device_type."$$")===false)){
            unlink_device_computer($key,$dohistory);
            deleteInOcsArray($glpi_id,$key,"import_device");
            }
        }
    }
        //Alimentation
        //Carte mere
}

/**
* Add a new device.
*
* Add a new device if doesn't exist.
*
*@param $device_type integer : device type identifier.
*@param $dev_array array : device fields.
*
*@return integer : device id.
*
**/
function ocsAddDevice($device_type,$dev_array) {

    global $db;
    $query = "select * from ".getDeviceTable($device_type)." WHERE designation='".$dev_array["designation"]."'";
    $result = $db->query($query);
    if($db->numrows($result) == 0) {
        $dev = new Device($device_type);
        foreach($dev_array as $key => $val) {
            $dev->fields[$key] = $val;
        }
        return($dev->addToDB());
    } else {
        $line = $db->fetch_array($result);
        return $line["ID"];
    }

}

/**
* Import the devices for a computer
*
*
*
*@param $device_type integer : device type
*@param $glpi_id integer : glpi computer id.
*@param $ocs_id integer : ocs computer id (DEVICEID).
*@param $cfg_ocs array : ocs config
*@param $dohistory boolean : log changes ?
*@param $import_periph array : already imported periph
*
*@return Nothing (void).
*
**/
function ocsUpdatePeripherals($device_type,$glpi_id,$ocs_id,$cfg_ocs,$import_periph,$dohistory){
    global $db,$dbocs;
    $do_clean=false;
    $connID=0;

    echo $device_type;
    switch ($device_type){
        case MONITOR_TYPE:
        if ($cfg_ocs["import_monitor"]){
            $do_clean=true;

            #$query = "select DISTINCT CAPTION, MANUFACTURER, DESCRIPTION, SERIAL, TYPE from monitors where DEVICEID = '".$ocs_id."'";
            $query = "select DISTINCT CAPTION, MANUFACTURER, DESCRIPTION, SERIAL, TYPE from monitors where HARDWARE_ID = '".$ocs_id."'";

            $result = $dbocs->query($query) or die($dbocs->error());

            if($dbocs->numrows($result) > 0)
            while($line = $dbocs->fetch_array($result)) {
                $line=clean_cross_side_scripting_deep(addslashes_deep($line));
                $mon["name"] = $line["CAPTION"];
                if (empty($mon["name"])) $mon["name"] = $line["TYPE"];
                if (empty($mon["name"])) $mon["name"] = $line["MANUFACTURER"];
                if (!empty($mon["name"]))
                if (!in_array($mon["name"],$import_periph)){
                    $mon["FK_glpi_enterprise"] = ocsImportEnterprise($line["MANUFACTURER"]);
                    $mon["comments"] = $line["DESCRIPTION"];
                    $mon["serial"] = $line["SERIAL"];
                    $mon["date_mod"] = date("Y-m-d H:i:s");
                    $id_monitor=0;
                    $found_already_monitor=false;
                    if($cfg_ocs["import_monitor"] == 1) {
                        //Config says : manage monitors as global
                        //check if monitors already exists in GLPI
                        $mon["is_global"]=1;
                        $db = new db;
                        $query = "select ID from glpi_monitors where name = '".$mon["name"]."' AND is_global = '1'";
                        $result_search = $db->query($query);
                        if($db->numrows($result_search) > 0) {
                            //Periph is already in GLPI
                            //Do not import anything just get periph ID for link
                            $id_monitor = $db->result($result_search,0,"ID");
                        } else {
                            $m=new Monitor;
                            $m->fields=$mon;
                            $id_monitor=$m->addToDB();

                            if ($id_monitor){
                                if ($cfg_ocs["default_state"]){
                                    updateState(MONITOR_TYPE,$id_monitor,$cfg_ocs["default_state"],0,0);
                                }
                            }
                        }
                    } else if($cfg_ocs["import_monitor"] == 2) {
                        //COnfig says : manage monitors as single units
                        //Import all monitors as non global.
                        $mon["is_global"]=0;
                        $m=new Monitor;

                        // First import - Is there already a monitor ?
                        if (count($import_periph)==0){
                            $query_search="SELECT end1 FROM glpi_connect_wire WHERE end2='$glpi_id' AND type='".MONITOR_TYPE."'";
                            $result_search=$db->query($query_search);
                            if ($db->numrows($result_search)==1){
                                $id_monitor=$db->result($result_search,0,0);
                                $found_already_monitor=true;
                                }
                        }

                        if ($found_already_monitor&&$id_monitor){

                            $m->getFromDB($id_monitor);
                            if (!$m->fields["is_global"]){
                                $mon["ID"]=$id_monitor;
                                unset($mon["comments"]);

                                $m->update($mon);
                            } else {
                                $m->fields=$mon;
                                $id_monitor=$m->addToDB();
                                $found_already_monitor=false;
                                if ($id_monitor){
                                    if ($cfg_ocs["default_state"]){
                                        updateState(MONITOR_TYPE,$id_monitor,$cfg_ocs["default_state"],0,0);
                                    }
                                }
                            }
                        } else {

                            $m->fields=$mon;

                            $id_monitor=$m->addToDB();
                            if ($id_monitor){
                                if ($cfg_ocs["default_state"]){
                                    updateState(MONITOR_TYPE,$id_monitor,$cfg_ocs["default_state"],0,0);
                                }
                            }

                        }
                    }
                    if ($id_monitor){
                        if (!$found_already_monitor)
                            $connID=Connect($id_monitor,$glpi_id,MONITOR_TYPE);
                        addToOcsArray($glpi_id,array($connID=>$mon["name"]),"import_monitor");
                    }
                } else {
                    $id=array_search($mon["name"],$import_periph);
                    unset($import_periph[$id]);
                }
            }
        }
        break;
        case PRINTER_TYPE:
        if ($cfg_ocs["import_printer"]){
            $do_clean=true;

            #$query = "select * from printers where DEVICEID = '".$ocs_id."'";
            $query = "select * from printers where HARDWARE_ID = '".$ocs_id."'";
            $result = $dbocs->query($query) or die($dbocs->error());

            if($dbocs->numrows($result) > 0)
            while($line = $dbocs->fetch_array($result)) {
                $line=clean_cross_side_scripting_deep(addslashes_deep($line));

                // TO TEST : PARSE NAME to have real name.
                $print["name"] = $line["NAME"];
                if (empty($print["name"]))    $print["name"] = $line["DRIVER"];

                if (!empty($print["name"]))
                if (!in_array($print["name"],$import_periph)){
                    //$print["comments"] = $line["PORT"]."\r\n".$line["NAME"];
                    $print["comments"] = $line["PORT"]."\r\n".$line["DRIVER"];
                    $print["date_mod"] = date("Y-m-d H:i:s");
                    $id_printer=0;

                    if($cfg_ocs["import_printer"] == 1) {
                        //Config says : manage printers as global
                        //check if printers already exists in GLPI
                        $print["is_global"]=1;
                        $db = new db;
                        $query = "select ID from glpi_printers where name = '".$print["name"]."' AND is_global = '1'";
                        $result_search = $db->query($query);
                        if($db->numrows($result_search) > 0) {
                            //Periph is already in GLPI
                            //Do not import anything just get periph ID for link
                            $id_printer = $db->result($result_search,0,"ID");
                        } else {
                            $p=new Printer;
                            $p->fields=$print;
                            $id_printer=$p->addToDB();
                            if ($id_printer){
                                if ($cfg_ocs["default_state"]){
                                    updateState(PRINTER_TYPE,$id_printer,$cfg_ocs["default_state"],0,0);
                                }
                            }
                        }
                    } else if($cfg_ocs["import_printer"] == 2) {
                        //COnfig says : manage printers as single units
                        //Import all printers as non global.
                        $print["is_global"]=0;
                        $p=new Printer;
                        $p->fields=$print;
                        $id_printer=$p->addToDB();
                        if ($id_printer){
                            if ($cfg_ocs["default_state"]){
                                updateState(PRINTER_TYPE,$id_printer,$cfg_ocs["default_state"],0,0);
                            }
                        }
                    }
                    if ($id_printer){
                        $connID=Connect($id_printer,$glpi_id,PRINTER_TYPE);
                        addToOcsArray($glpi_id,array($connID=>$print["name"]),"import_printers");
                    }
                } else {
                    $id=array_search($print["name"],$import_periph);
                    unset($import_periph[$id]);
                }
            }
        }
        break;
        case PERIPHERAL_TYPE:
        if ($cfg_ocs["import_periph"]){
            $do_clean=true;

            #$query = "select DISTINCT CAPTION, MANUFACTURER, INTERFACE, TYPE from inputs where DEVICEID = '".$ocs_id."' and CAPTION <> ''";
            $Aquery = "select DISTINCT CAPTION, MANUFACTURER, INTERFACE, TYPE from inputs where HARDWARE_ID = '".$ocs_id."' and CAPTION <> ''";

            #$result = $dbocs->query($query) or die($dbocs->error());
            $result = $dbocs->query($query);
            if($dbocs->numrows($result) > 0)
            while($line = $dbocs->fetch_array($result)) {
                $line=clean_cross_side_scripting_deep(addslashes_deep($line));

                $periph["name"] = $line["CAPTION"];
                if (!in_array($periph["name"],$import_periph)){
                    if ($line["MANUFACTURER"]!="NULL") $periph["brand"] = $line["MANUFACTURER"];
                    if ($line["INTERFACE"]!="NULL") $periph["comments"] = $line["INTERFACE"];
                    $periph["type"] = ocsImportDropdown("glpi_type_peripherals","name",$line["TYPE"]);
                    $periph["date_mod"] = date("Y-m-d H:i:s");

                    $id_periph=0;

                    if($cfg_ocs["import_periph"] == 1) {
                        //Config says : manage peripherals as global
                        //check if peripherals already exists in GLPI
                        $periph["is_global"]=1;
                        $db = new db;
                        $query = "select ID from glpi_peripherals where name = '".$periph["name"]."' AND is_global = '1'";
                        $result_search = $db->query($query);
                        if($db->numrows($result_search) > 0) {
                            //Periph is already in GLPI
                            //Do not import anything just get periph ID for link
                            $id_periph = $db->result($result_search,0,"ID");
                        } else {
                            $p=new Peripheral;
                            $p->fields=$periph;
                            $id_periph=$p->addToDB();
                            if ($id_periph){
                                if ($cfg_ocs["default_state"]){
                                    updateState(PERIPHERAL_TYPE,$id_periph,$cfg_ocs["default_state"],0,0);
                                }
                            }
                        }
                    } else if($cfg_ocs["import_periph"] == 2) {
                        //COnfig says : manage peripherals as single units
                        //Import all peripherals as non global.
                        $periph["is_global"]=0;
                        $p=new Peripheral;
                        $p->fields=$periph;
                        $id_periph=$p->addToDB();
                        if ($id_periph){
                            if ($cfg_ocs["default_state"]){
                                updateState(PERIPHERAL_TYPE,$id_periph,$cfg_ocs["default_state"],0,0);
                            }
                        }
                    }
                    if ($id_periph){
                        $connID=Connect($id_periph,$glpi_id,PERIPHERAL_TYPE);
                        addToOcsArray($glpi_id,array($connID=>$periph["name"]),"import_peripheral");
                    }
                } else {
                    $id=array_search($periph["name"],$import_periph);
                    unset($import_periph[$id]);
                }
            }
        }
        break;
    }

    // Disconnect Unexisting Items not found in OCS
    if ($do_clean&&count($import_periph)){
        foreach ($import_periph as $key => $val){


            $query = "SELECT * FROM glpi_connect_wire where ID = '".$key."'";
            $result=$db->query($query);
            if ($db->numrows($result)>0){
                while ($data=$db->fetch_assoc($result)){
                    $query2="SELECT COUNT(*) FROM glpi_connect_wire WHERE end1 = '".$data['end1']."' and type = '".$device_type."'";
                    $result2=$db->query($query2);
                    if ($db->result($result2,0,0)==1){
                        switch ($device_type){
                            case MONITOR_TYPE:
                            $mon=new Monitor();
                            $mon->delete(array('ID'=>$data['end1']),1);
                            break;
                            case PRINTER_TYPE:
                            $print=new Printer();
                            $print->delete(array('ID'=>$data['end1']),1);
                            break;
                            case PERIPHERAL_TYPE:
                            $per=new Peripheral();
                            $per->delete(array('ID'=>$data['end1']),1);
                            break;
                        }
                    }
                }
            }
            Disconnect($key);

            switch ($device_type){
                case MONITOR_TYPE:
                deleteInOcsArray($glpi_id,$key,"import_monitor");
                break;
                case PRINTER_TYPE:
                deleteInOcsArray($glpi_id,$key,"import_printer");
                break;
                case PERIPHERAL_TYPE:
                deleteInOcsArray($glpi_id,$key,"import_peripheral");
                break;
            }
        }
    }

}

/**
* Update config of a new software
*
* This function create a new software in GLPI with some general datas.
*
*
*@param $glpi_id integer : glpi computer id.
*@param $ocs_id integer : ocs computer id (DEVICEID).
*@param $cfg_ocs array : ocs config
*@param $dohistory boolean : log changes ?
*@param $import_software array : already imported softwares
*
*@return Nothing (void).
*
**/
function ocsUpdateSoftware($glpi_id,$ocs_id,$cfg_ocs,$import_software,$dohistory) {
    global $dbocs,$db;
    if($cfg_ocs["import_software"]){

        if ($cfg_ocs["use_soft_dict"])
            #$query2 = "SELECT softwares.NAME AS INITNAME, dico_soft.FORMATTED AS NAME, softwares.VERSION AS VERSION, softwares.PUBLISHER AS PUBLISHER FROM softwares INNER JOIN dico_soft ON (softwares.NAME = dico_soft.EXTRACTED) WHERE softwares.DEVICEID='$ocs_id'";
            $query2 = "SELECT softwares.NAME AS INITNAME, dico_soft.FORMATTED AS NAME, softwares.VERSION AS VERSION, softwares.PUBLISHER AS PUBLISHER FROM softwares INNER JOIN dico_soft ON (softwares.NAME = dico_soft.EXTRACTED) WHERE softwares.HARDWARE_ID='$ocs_id'";
        else
            $query2 = "SELECT softwares.NAME AS INITNAME, softwares.NAME AS NAME, softwares.VERSION AS VERSION, softwares.PUBLISHER AS PUBLISHER FROM softwares WHERE softwares.DEVICEID='$ocs_id'";
            #$query2 = "SELECT softwares.NAME AS INITNAME, softwares.NAME AS NAME, softwares.VERSION AS VERSION, softwares.PUBLISHER AS PUBLISHER FROM softwares WHERE softwares.HARDWARE_ID='$ocs_id'";

        $already_imported=array();
        $result2 = $dbocs->query($query2) or die($dbocs->error());
        if ($dbocs->numrows($result2)>0)
        while ($data2 = $dbocs->fetch_array($result2)){
            $data2=clean_cross_side_scripting_deep(addslashes_deep($data2));
            $initname =  $data2["INITNAME"];
            $name= $data2["NAME"];
            $version = $data2["VERSION"];
            $publisher = $data2["PUBLISHER"];
            // Import Software
            if (!in_array($name,$already_imported)){ // Manage multiple software with the same name = only one install
                $already_imported[]=$name;
            if (!in_array($initname,$import_software)){

                $query_search = "SELECT ID FROM glpi_software WHERE name = '".$name."' ";
                $result_search = $db->query($query_search) or die("Verification existence logiciel :".$name." v:"." - ".$version.$db->error());
                if ($db->numrows($result_search)>0){
                    $data = $db->fetch_array($result_search);
                    $isNewSoft = $data["ID"];
                } else {
                    $isNewSoft = 0;
                }

                if (!$isNewSoft) {
                    $soft = new Software;
                    $soft->fields["name"] = $name;
                    $soft->fields["version"] = $version;
                    if (!empty($publisher))
                        $soft->fields["FK_glpi_enterprise"] = ocsImportEnterprise($publisher);
                    $isNewSoft = $soft->addToDB();
                }
                if ($isNewSoft){
                    $instID=installSoftware($glpi_id,ocsImportLicense($isNewSoft),'',$dohistory);
                    addToOcsArray($glpi_id,array($instID=>$initname),"import_software");
                }

            } else { // Check if software always exists with is real name

                $id=array_search($initname,$import_software);
                unset($import_software[$id]);

                $query_name="SELECT glpi_software.ID as ID , glpi_software.name AS NAME FROM glpi_inst_software LEFT JOIN glpi_licenses ON (glpi_inst_software.license=glpi_licenses.ID) LEFT JOIN glpi_software ON (glpi_licenses.sID = glpi_software.ID) WHERE glpi_inst_software.ID='$id'";
                $result_name=$db->query($query_name);
                if ($db->numrows($result_name)==1){
                    if ($db->result($result_name,0,"NAME")!=$name){
                        $updates["name"]=$name;
                        $updates["version"]=$version;
                        if (!empty($publisher))
                            $updates["FK_glpi_enterprise"] = ocsImportEnterprise($publisher);
                        $updates["ID"]=$db->result($result_name,0,"ID");
                        $soft=new Software();
                        $soft->update($updates);
                    }
                }
            }
            }
        }

        // Disconnect Unexisting Items not found in OCS
        if (count($import_software)){

            foreach ($import_software as $key => $val){

                $query = "SELECT * from glpi_inst_software where ID = '".$key."'";
                $result=$db->query($query);
                if ($db->numrows($result)>0)
                while ($data=$db->fetch_assoc($result)){
                    $query2="SELECT COUNT(*) from glpi_inst_software where license = '".$data['license']."'";
                    $result2=$db->query($query2);
                    if ($db->result($result2,0,0)==1){
                        $lic=new License;
                        $lic->getfromDB($data['license']);
                        $query3="SELECT COUNT(*) FROM glpi_licenses where sID='".$lic->fields['sID']."'";
                        $result3=$db->query($query3);
                        if ($db->result($result3,0,0)==1){
                            $soft=new Software ();
                            $soft->delete(array('ID'=>$lic->fields['sID']),1);
                        }
                        $lic->delete(array("ID"=>$data['license']));
                    }
                }

                uninstallSoftware($key,$dohistory);
                deleteInOcsArray($glpi_id,$key,"import_software");
            }
        }
    }
}

/**
* Import config of a new license
*
* This function create a new license in GLPI with some general datas.
*
*@param $software : id of a software.
*
*@return integer : inserted license id.
*
**/
function ocsImportLicense($software) {
    global $db,$langOcs;

    $query = "SELECT ID FROM glpi_licenses WHERE sid = '".$software."' AND serial='global' ";
    $result = $db->query($query) or die("Verification existence License du soft-id :".$software." - ".$db->error());
    if ($db->numrows($result)>0){
        $data = $db->fetch_array($result);
        $isNewLicc = $data["ID"];
    } else {
        $isNewLicc = 0;
    }
    if (!$isNewLicc) {
        $licc = new License;
        $licc->fields["sid"] = $software;
        $licc->fields["serial"] = "global";
        $isNewLicc = $licc->addToDB();
    }
    return($isNewLicc);
}


/**
* Delete old licenses
*
* Delete all old licenses of a computer.
*
*@param $glpi_computer_id integer : glpi computer id.
*
*@return nothing.
*
**/
function ocsResetLicenses($glpi_computer_id) {

    global $db;


    $query = "SELECT * from glpi_inst_software where cid = '".$glpi_computer_id."'";
    $result=$db->query($query);
    if ($db->numrows($result)>0){
        while ($data=$db->fetch_assoc($result)){
            $query2="SELECT COUNT(*) from glpi_inst_software where license = '".$data['license']."'";
            $result2=$db->query($query2);
            if ($db->result($result2,0,0)==1){
                $lic=new License;
                $lic->getfromDB($data['license']);
                $query3="SELECT COUNT(*) FROM glpi_licenses where sID='".$lic->fields['sID']."'";
                $result3=$db->query($query3);
                if ($db->result($result3,0,0)==1){
                    $soft=new Software();
                    $soft->delete(array('ID'=>$lic->fields['sID']),1);
                }
                $lic->delete(array("ID"=>$data['license']));

            }
        }

        $query = "delete from glpi_inst_software where cid = '".$glpi_computer_id."'";
        $db->query($query);
    }

}

/**
* Delete old devices settings
*
* Delete Old device settings.
*
*@param $device_type integer : device type identifier.
*@param $glpi_computer_id integer : glpi computer id.
*
*@return nothing.
*
**/
function ocsResetDevices($glpi_computer_id, $device_type) {
    global $db;
    $query = "delete from glpi_computer_device where device_type = '".$device_type."' AND FK_computers = '".$glpi_computer_id."'";
    $db->query($query);
}

/**
* Delete old periphs
*
* Delete all old periphs for a computer.
*
*@param $glpi_computer_id integer : glpi computer id.
*
*@return nothing.
*
**/
function ocsResetPeriphs($glpi_computer_id) {

    global $db;

    $query = "SELECT * FROM glpi_connect_wire where end2 = '".$glpi_computer_id."' and type = '".PERIPHERAL_TYPE."'";
    $result=$db->query($query);
    $per=new Peripheral();
    if ($db->numrows($result)>0){
        while ($data=$db->fetch_assoc($result)){
            $query2="SELECT COUNT(*) FROM glpi_connect_wire WHERE end1 = '".$data['end1']."' and type = '".PERIPHERAL_TYPE."'";
            $result2=$db->query($query2);
            if ($db->result($result2,0,0)==1){
                $per->delete(array('ID'=>$data['end1']),1);
            }
        }

        $query2 = "delete from glpi_connect_wire where end2 = '".$glpi_computer_id."' and type = '".PERIPHERAL_TYPE."'";
        $db->query($query2);
    }

}
/**
* Delete old monitors
*
* Delete all old licenses of a computer.
*
*@param $glpi_computer_id integer : glpi computer id.
*
*@return nothing.
*
**/
function ocsResetMonitors($glpi_computer_id) {

    global $db;
    $query = "SELECT * FROM glpi_connect_wire where end2 = '".$glpi_computer_id."' and type = '".MONITOR_TYPE."'";
    $result=$db->query($query);
    $mon=new Monitor();
    if ($db->numrows($result)>0){
        while ($data=$db->fetch_assoc($result)){
            $query2="SELECT COUNT(*) FROM glpi_connect_wire WHERE end1 = '".$data['end1']."' and type = '".MONITOR_TYPE."'";
            $result2=$db->query($query2);
            if ($db->result($result2,0,0)==1){
                $mon->delete(array('ID'=>$data['end1']),1);
            }
        }

        $query2 = "delete from glpi_connect_wire where end2 = '".$glpi_computer_id."' and type = '".MONITOR_TYPE."'";
        $db->query($query2) or die("Impossible d'effacer les anciens monitors.".$db->error());
    }

}
/**
* Delete old printers
*
* Delete all old printers of a computer.
*
*@param $glpi_computer_id integer : glpi computer id.
*
*@return nothing.
*
**/
function ocsResetPrinters($glpi_computer_id) {

    global $db;

    $query = "SELECT * FROM glpi_connect_wire where end2 = '".$glpi_computer_id."' and type = '".PRINTER_TYPE."'";
    $result=$db->query($query);
    if ($db->numrows($result)>0){
        while ($data=$db->fetch_assoc($result)){
            $query2="SELECT COUNT(*) FROM glpi_connect_wire WHERE end1 = '".$data['end1']."' and type = '".PRINTER_TYPE."'";
            $result2=$db->query($query2);
            $printer=new Printer();
            if ($db->result($result2,0,0)==1){
                $printer->delete(array('ID'=>$data['end1']),1);
            }
        }

        $query2 = "delete from glpi_connect_wire where end2 = '".$glpi_computer_id."' and type = '".PRINTER_TYPE."'";
        $db->query($query2) or die("Impossible d'effacer les anciens monitors.".$db->error());
    }
}

/**
* Delete old dropdown value
*
* Delete all old dropdown value of a computer.
*
*@param $glpi_computer_id integer : glpi computer id.
*@param $field string : string of the computer table
*@param $table string : dropdown table name
*
*@return nothing.
*
**/
function ocsResetDropdown($glpi_computer_id,$field,$table) {

    global $db;
    $query = "SELECT $field AS VAL FROM glpi_computers where ID = '".$glpi_computer_id."'";
    $result=$db->query($query);
    if ($db->numrows($result)==1){
        $value=$db->result($result,0,"VAL");
        $query = "SELECT COUNT(*) AS CPT FROM glpi_computers where $field = '$value'";
        $result=$db->query($query);
        if ($db->result($result,0,"CPT")==1){
            $query2 = "delete from $table where ID = '$value'";
            $db->query($query2);
        }
    }
}


?>


walid.

Last edited by wawa (2006-07-05 17:46:05)

Offline

#6 2006-07-05 17:48:19

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Bug importation ocs avec glpi 0.68rc2

donc dans la RC3 d'OCS la DB change ?

on va attendre qu'il sorte leur version alors pour lancer la 0.68 finale et pouvoir l'adpater à la RC3.


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#7 2006-07-05 17:48:55

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Bug importation ocs avec glpi 0.68rc2

deplacement c'est pas du tout au bon endroit ce post


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#8 2006-07-05 18:14:28

tsmr
GLPI-DEV
From: Rennes
Registered: 2005-08-26
Posts: 11,632
Website

Re: Bug importation ocs avec glpi 0.68rc2

ils aurait pu vous prevenir quand même pour anticiper non ?


Xavier Caillaud
Blog GLPI Infotel

Offline

#9 2006-07-05 18:31:05

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Bug importation ocs avec glpi 0.68rc2

j'ai été prévenu qu'il y aurait surement des modifs il y a un moment.
Ce n'est pas bien grave ca cale presque pile poil avec la sortie de la 0.68.


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#10 2006-07-05 18:44:06

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Bug importation ocs avec glpi 0.68rc2

on va attendre que leur RC3 sorte on adaptera le code et zou vendu on pourra sortir la 0.68


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#11 2006-07-05 18:48:25

wawa
GLPI-DEV
From: Montpellier / France
Registered: 2006-07-03
Posts: 6,019
Website

Re: Bug importation ocs avec glpi 0.68rc2

je suis entrain de tester mes modifs,

je pense que j'aurai encore qq modifs sur ce fichier, je reposte ici ou je vous envoie les modifs un autre moyen ?

Offline

#12 2006-07-05 18:56:06

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Bug importation ocs avec glpi 0.68rc2

heu le mieux c'est poster sur glpi-dev@gna.org


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#13 2006-07-05 19:16:55

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Bug importation ocs avec glpi 0.68rc2

wawa si HARDWARE_ID != DEVICEID c'est plus compliqué que ca a modifier...
il faut recup l'ID correspondant au DEVICEID pour que les requetes fonctionnent correctement.


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#14 2006-07-06 00:34:02

wawa
GLPI-DEV
From: Montpellier / France
Registered: 2006-07-03
Posts: 6,019
Website

Re: Bug importation ocs avec glpi 0.68rc2

ok ok
je vais faire des tests wink

merci

Offline

#15 2006-07-13 16:47:12

Dom
Member
Registered: 2006-07-06
Posts: 6

Re: Bug importation ocs avec glpi 0.68rc2

Je teste ocsng rc3 avec glpi 0.68rc2 et je rencontre le même type de problème.

Alors quelle solution adopter?
Doit on s'inspirer du fichier ici ou une adaptation à déjà été prévue par vos soins?


En gros vivement la version finale!       wink

(Mais dormez un petit peu quand même....)


GLPI: 0.68 avec OCS-ng rc3
Plateforme: Linux Debian/Mandriva 2006  |  Navigateur: Firefox 1.0.6mdk
PHP: 5.0.4  |  MySQL: 4.1.12  |  Apache: 2.0.54

Offline

#16 2006-07-13 17:31:55

chacawaca
Member
From: Québec
Registered: 2005-07-11
Posts: 513

Re: Bug importation ocs avec glpi 0.68rc2

je crois que tu est mieu dattendre la version finale

Offline

#17 2006-07-13 20:18:24

Dom
Member
Registered: 2006-07-06
Posts: 6

Re: Bug importation ocs avec glpi 0.68rc2

Ok, dommage l'envie de tester tout ca me demange....    smile

La patience est une vertue, en tout cas vaut toujours mieux attendre la version finale même c'est toujours bien de tester des truks pour les projets parce qu'on peut pas toujours voir tous les bugs lorsque l'on fait partie du projet.

Bon courage les gars!


GLPI: 0.68 avec OCS-ng rc3
Plateforme: Linux Debian/Mandriva 2006  |  Navigateur: Firefox 1.0.6mdk
PHP: 5.0.4  |  MySQL: 4.1.12  |  Apache: 2.0.54

Offline

#18 2006-07-19 16:29:12

atlas.fr.be
Member
From: Hainaut
Registered: 2006-07-19
Posts: 2
Website

Re: Bug importation ocs avec glpi 0.68rc2

Merci en tout cas pour la réponse et l'intervention rapide. Chapeau les gars

Offline

#19 2006-07-20 10:55:23

mazu
Member
Registered: 2005-05-11
Posts: 7

Re: Bug importation ocs avec glpi 0.68rc2

Bonjour,

donc finalemenent dès qu'on met à jour OCS vers la RC3, l'import des données dans GLPI ne marche plus puisque GLPI 0.68 final qui vas avec la RC3 n'est pas sortie !
La seule solution serait de virer OCS RC3 et de remettre la RC2  !
Ais-je raison ?

En tout cas merci à ces 2 projets et vivement la fusion. Tiens au fait juste comme çà, y'aurait un calendrier de sortie pour la ocs+glpi ?

Encore merci.
Maz

Offline

#20 2006-07-20 11:18:07

tsmr
GLPI-DEV
From: Rennes
Registered: 2005-08-26
Posts: 11,632
Website

Re: Bug importation ocs avec glpi 0.68rc2

ui c'est ca.


Xavier Caillaud
Blog GLPI Infotel

Offline

#21 2006-07-20 13:17:26

atlas.fr.be
Member
From: Hainaut
Registered: 2006-07-19
Posts: 2
Website

Re: Bug importation ocs avec glpi 0.68rc2

Ou de modifier le ocsng.function.php avec le contenu indiqué plus haut. Je l'ai fait ca marche. Seul bug trouvé restant: pas de backup XML

Offline

#22 2006-07-20 14:56:53

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

Re: Bug importation ocs avec glpi 0.68rc2

mazu wrote:

En tout cas merci à ces 2 projets et vivement la fusion. Tiens au fait juste comme çà, y'aurait un calendrier de sortie pour la ocs+glpi ?

Qui a parlé de fusion ?


JMD / Jean-Mathieu Doléans - Glpi-project.org - Association Indepnet
Apportez votre pierre au  projet GLPI   : Soutenir

Offline

#23 2006-07-20 16:02:34

mazu
Member
Registered: 2005-05-11
Posts: 7

Re: Bug importation ocs avec glpi 0.68rc2

Oui, peut-être que le terme "fusion" n'est pas approprié.
J'avais l'impression que le sens de ma question était ok.

Je parlais du fait que dans un futur proche, glpi et ocs allaient travailer ensemble pour aboutir à un seul produit regroupant les fonctionnalités des uns et des autres.
Ou si c'est pas du tout çà, je m'en excuse : j'ai du le réver alors.

Comme le dit si bien Michel DENISOT : désolé

Last edited by mazu (2006-07-20 16:17:36)

Offline

#24 2006-07-20 17:18:52

chacawaca
Member
From: Québec
Registered: 2005-07-11
Posts: 513

Re: Bug importation ocs avec glpi 0.68rc2

il n'a jamais été question que OCS et GLPI ne devienne quun seul produit je ne vois pas ou vous avez lu ça, je pense que vous avez simplement rêver a ça tongue

Offline

#25 2006-07-20 17:45:48

mazu
Member
Registered: 2005-05-11
Posts: 7

Re: Bug importation ocs avec glpi 0.68rc2

désolé

c'est donc une collaboration.

On rêve des choses des fois, je vous jure!..

Offline

Board footer

Powered by FluxBB