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-05-02 16:20:15

cleop
Member
Registered: 2006-04-21
Posts: 27

Recuperer le TAG d'Ocs dans GLPI ... a tester

Bonjour,

Comme beaucoup, j'ai utilité a récupérer le N° de TAG d'Ocs dans GLPI, voici donc un début de solution
que je propose (en cours de tests) ...

1) rajout d'un champ TAG dans la table GLPI nommée 'glpi_computers'

ALTER TABLE `glpi_computers` ADD `TAG` VARCHAR( 8 ) NULL DEFAULT '0';

2) rajout du SQL pour récuperer le TAG dans OCS dans la fonction 'ocsImportComputer'
située dans glpi\glpi\ocsng\functions.php

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; // modif de l'objet computer
    if ($dbocs->numrows($result)==1){
        $line=$dbocs->fetch_array($result);
        $dbocs->close();
        $comp->fields["name"] = $line["NAME"];
       
//-----------------------------------récupération du TAG d'OCS-----------------------------------
       
        $query = "SELECT TAG FROM accountinfo WHERE DEVICEID='$DEVICEID'";
        $result = $dbocs->query($query) or die($dbocs->error().$query);
        $TAG=$dbocs->fetch_array($result);
        $dbocs->close();
        $comp->fields["TAG"] = $TAG["TAG"];
       
//-----------------------------------------------------------------------------
       
        $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);
            }
        }

        if ($idlink = ocs_link($line['DEVICEID'], $glpi_id)){
            ocsUpdateComputer($idlink,0);
        }
    }
}



le TAG est bien importé dans GLPI (table 'glpi_computers') et peut servir pour un futur traitement, je travaille actuellement sur les périphériques (moniteur, impi) ... leur associé le TAG de l'uc ou pas ???

qu'en pensez vous ?
avez vous mené des recherches ou des raisonnements similaires ?

A+
cleop

Offline

#2 2006-05-02 16:38:53

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

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

Je pense que ce qui seraitplus intéressant c'est dire dans quel champ on veux importer le TAG via une config du mode OCS.
et après que ca l'intégre directement.


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

Offline

#3 2006-05-02 16:54:38

cleop
Member
Registered: 2006-04-21
Posts: 27

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

exact, je n'ai pas assez de recul pour l'instand pour appréhender la question dans sa globalité mais je vais investiguer dans cette direction ... merci MoYo pour cette idée lumineuse !   :-)

... je vous tiendrais au courant de mes essais ...  :-)

A+
cleop (student'of'php)

Offline

#4 2006-05-02 17:00:13

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

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

ok merci


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

Offline

#5 2006-05-02 20:34:05

aurel
Member
From: France
Registered: 2004-09-23
Posts: 1,252

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

Tout à fait d'accord avec toi Moyo je ne voudrais pas que l'import écrase les noms déjà entré dans GLPI ça serait beaucoup plus pratique de pouvoir choisir dans quel champs importer cette valeur.


A+


Prod GLPI 10.0.14 , GLPI Agent 1.7.3

Offline

#6 2006-05-03 15:16:18

cleop
Member
Registered: 2006-04-21
Posts: 27

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

Bonjour,
comme promis, je vous tiens au courant de mes investigations,
Voila une solutions en 4 étapes qui permet l'import du Tag d'Ocs soit dans le champ "Contact", soit dans le champ "Lieu", soit dans le champ "Nom", libre à chacun de s'organiser apres en fonction de ses besoins ...

1) rajout d'un champ `tag_field_import` dans la table `glpi_ocs_config` pour stocker l'option choisie :

ALTER TABLE `glpi_ocs_config` ADD `tag_field_import` INT( 2 ) NOT NULL DEFAULT '0';

2) implémentation de l'option dans le module de configuration GLPI de l'import d'Ocs :
(les modifs sont entre //------ et //-------)

  --> modif de la fonction 'ocsFormConfig' du fichier 'glpi\glpi\setup\functions.php'

        function ocsFormConfig($target, $id) {

    GLOBAL  $db,$lang;

    $query = "select * from glpi_ocs_config where ID = '".$id."'";
    $result = $db->query($query);
    $data=$db->fetch_array($result);

    echo "<form name='formconfig' action=\"$target\" method=\"post\">";
    echo "<input type='hidden' name='update_ocs_config' value='1'>";
    echo "<div align='center'><table class='tab_cadre'>";
    echo "<tr><th colspan='2'>".$lang["ocsconfig"][5]."</th></tr>";

    echo "<tr class='tab_bg_2'><td align='center'>".$lang["ocsconfig"][17]." </td><td> <input type=\"text\" size='30' name=\"tag_limit\" value=\"".$data["tag_limit"]."\"></td></tr>";

//-----------------------------Choix du champ d'import du Tag--------------------------

    $field_import=$data["tag_field_import"];
    echo "<tr class='tab_bg_2'><td align='center'>Champ d'import du tag</td><td>";
    echo "<select name='tag_field_import'>";
    echo "<option value='0' ".($field_import==0?" selected ":"").">Pas d'import</option>";
    echo "<option value='1' ".($field_import==1?" selected ":"").">Contact</option>";
    echo "<option value='2' ".($field_import==2?" selected ":"").">Lieu</option>";
    echo "<option value='3' ".($field_import==3?" selected ":"").">Nom</option>";
    echo "</select>";
    echo "</td></tr>";
    
//-------------------------------------------------------------------------------------

......etc....

3) dans le meme fichier, modif de la fonction 'OcsUpdateConfig' pour pouvoir updater l'option :
(les modifs sont entre //------ et //-------)

function ocsUpdateConfig($input, $id) {
    
    global $db,$phproot;

    $checksum=0;

    if ($input["import_ip"]) $checksum|= pow(2,NETWORKS_FL);
    if ($input["import_device_ports"]) $checksum|= pow(2,PORTS_FL);
    if ($input["import_device_modems"]) $checksum|= pow(2,MODEMS_FL);
    if ($input["import_device_drives"]) $checksum|= pow(2,STORAGES_FL);
    if ($input["import_device_sound"]) $checksum|= pow(2,SOUNDS_FL);
    if ($input["import_device_gfxcard"]) $checksum|= pow(2,VIDEOS_FL);
    if ($input["import_device_iface"]) $checksum|= pow(2,NETWORKS_FL);
    if ($input["import_device_hdd"]) $checksum|= pow(2,STORAGES_FL);
    if ($input["import_device_memory"]) $checksum|= pow(2,MEMORIES_FL);
    if (    $input["import_device_processor"]
        ||$input["import_general_contact"]
        ||$input["import_general_comments"]
        ||$input["import_general_domain"]
        ||$input["import_general_os"]) $checksum|= pow(2,HARDWARE_FL);
    if (    $input["import_general_enterprise"]
        ||$input["import_general_type"]
        ||$input["import_general_model"]
        ||$input["import_general_serial"]) $checksum|= pow(2,BIOS_FL);
    if ($input["import_printer"]) $checksum|= pow(2,PRINTERS_FL);
    if ($input["import_software"]) $checksum|= pow(2,SOFTWARES_FL);
    if ($input["import_monitor"]) $checksum|= pow(2,MONITORS_FL);
    if ($input["import_periph"]) $checksum|= pow(2,INPUTS_FL);
    
// update du choix du champ d'import du tag--------------------------------------------------
        
    $query = "update glpi_ocs_config set tag_field_import = '".$input["tag_field_import"]."', tag_limit = '".$input["tag_limit"]."', default_state = '".$input["default_state"]."', import_periph = '".$input["import_periph"]."'  ,import_monitor = '".$input["import_monitor"]."',import_software =  '".$input["import_software"]."', import_printer = '".$input["import_printer"]."',`import_general_os` = '".$input["import_general_os"]."',`import_general_serial` = '".$input["import_general_serial"]."',`import_general_model` = '".$input["import_general_model"]."',`import_general_enterprise` = '".$input["import_general_enterprise"]."',`import_general_type` = '".$input["import_general_type"]."',`import_general_domain` = '".$input["import_general_domain"]."',`import_general_contact` = '".$input["import_general_contact"]."',`import_general_comments` = '".$input["import_general_comments"]."',`import_device_processor` = '".$input["import_device_processor"]."',`import_device_memory` = '".$input["import_device_memory"]."',`import_device_hdd` = '".$input["import_device_hdd"]."',`import_device_iface` = '".$input["import_device_iface"]."',`import_device_gfxcard` = '".$input["import_device_gfxcard"]."',`import_device_sound` = '".$input["import_device_sound"]."',`import_device_drives` = '".$input["import_device_drives"]."',`import_device_modems` = '".$input["import_device_modems"]."',`import_device_ports` = '".$input["import_device_ports"]."',`import_ip` = '".$input["import_ip"]."',`checksum` = '".$checksum."'  where ID = '".$id."'";

//-------------------------------------------------------------------------------------------

    $db->query($query);
}

4) modification de la séquence d'import Ocs->GLPI

     --> modif de la fonction 'ocsUpdateHardware' du fichier 'glpi\glpi\ocsng\functions.php'
           (le rajout est a la fin de la function, toujours entre //------ et //--------)

.......etc...........
            
        if($cfg_ocs["import_general_comments"]&&!in_array("comments",$computer_updates)) {
            $compupdate["comments"] = "Swap: ".$line["SWAP"];
        }

//---------------------------
        if ($cfg_ocs["tag_field_import"]<>0){
            $query = "SELECT TAG FROM accountinfo WHERE DEVICEID='$ocs_id'"; 
            $result = $dbocs->query($query) or die($dbocs->error().$query);
            $tag=$dbocs->fetch_array($result);
            $dbocs->close();
            if($cfg_ocs["tag_field_import"]==1){
                $compupdate["contact"]=$tag["TAG"];
            }
            if($cfg_ocs["tag_field_import"]==2){
                $compupdate["location"]=ocsImportDropdown('glpi_dropdown_locations','name',$tag["TAG"]);
                
            }
            if($cfg_ocs["tag_field_import"]==3){
                $compupdate["name"]=$tag["TAG"];
            }
        }
//----------------------------
        
        if (count($compupdate)){
            $compupdate["ID"] = $glpi_id;
            updateComputer($compupdate,$dohistory);
        }
    }
}

Ces 4 modifs permettent de choisir sont champ d'import pour le tag
(parmis les choix suivants : 'pas d'import', 'nom', 'contact' ou 'lieu')

Attention :

1) chez moi cela fonctionne (et correspond à mon besoin), chez vous, c'est à vos risques et périls, donc faites des tests
2) pour l'utilisation de l'import du tag vers le champ 'lieu' il faut au préalable avoir défini
les lieux possibles dans GLPI/administration/intitules/lieu
3) je n'ai pas eu le temps de tester si cela fonctionne avec une 'arborescence' a plusieurs niveaux pour les 'lieux', car chez moi tout les lieux sont au même niveau hiérarchique
4) pas de prise en charge multilingues, désolé ...

have fun ...
cleop

Offline

#7 2006-05-04 08:19:14

sdeconin
Member
From: Lille
Registered: 2005-02-10
Posts: 12

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

Bonjour,

Pour ma part le numero Tag correspond au numéro d'inventaire...

Offline

#8 2006-05-04 08:49:55

cleop
Member
Registered: 2006-04-21
Posts: 27

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

Dans votre cas,
modif 2) remplacer "Contact" par "Numero d'inventaire"
modif 4) remplacer "contact" par "otherserial"

Vous pourez ainsi remonter votre Tag(numero d'inventaire) dans GLPI (je viens de tester, cela fonctionne)

attention : ce n'est pas un developpement officiel, a utiliser si vous ne pouvez pas attendre ...

A+

Offline

#9 2006-05-13 20:01:52

Jouin74
Member
From: Annecy
Registered: 2005-10-13
Posts: 64

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

Merci pour ce code qui souhaitons le sera officialisé dans une prochaine version.

Pour ma part le TAG correspond aussi au n° d'inventaire de la société.

Serait il possible que celui-ci figure parmi la liste des rubriques à associer dans le helpdesk avec un matériel ?

Je m'explique. Toutes nos machines on une étiquette code-barre et en complément un id en claire (ex : 12345678) propre au matériel.

Lors d'une déclaration d'un ticket dans le helpdesk, je souhaiterais que l'utilisateur puisse donner cet id "maison" pour rattacher le ticket au matériel. (Cela évite à la personne non informaticienne tongue d'aller chercher un nom de machine ou un N° de serie qu'elle ne saura pas trouver).

De plus cela permet de maitriser la production des étiquettes d'inventaire en interne.

Last edited by Jouin74 (2006-05-13 20:04:15)


Plateforme : Linux Mandriva2006 64bit Navigateur: IE6 SP1 / Firefox 1.5.0.3
PHP : 5.0.05  MySQL : 5.0.18 Apache : 2.0.55  GLPI :0.65
Plateforme : Windows XP Pro  Navigateur: Firefox 1.5.0.3 / IE6 SP1
PHP : 5.0.05  MySQL : 5.0.18 Apache : 2.0.55 GLPI :0.68.3

Offline

#10 2006-05-14 10:02:17

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

Re: Recuperer le TAG d'Ocs dans GLPI ... a tester

ajouté dans le trac. fermeture.


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

Offline

Board footer

Powered by FluxBB