GLPI : générer automatiquement un ticket au changement de statut d’un ordinateur

GLPI : générer automatiquement un ticket au changement de statut d'un ordinateurSuite à une formation donnée sur GLPI dans cette bonne ville de Caen, l’un des stagiaires m’a demandé s’il était possible de générer un ticket au changement de statut d’un ordinateur. En l’occurrence, il s’agissait d’indiquer à ses équipes techniques qu’il fallait changer des ordinateurs obsolètes en créant des demandes automatiquement. Je n’ai pas trouvé de plugin pour réaliser cette basse besogne.

Un script PHP pour automatiser la création de tickets au changement de statut

Comme je n’ai pas le temps d’écrire un plugin (1), j’ai réalisé un script PHP à planifier sur le serveur GLPI avec cron.

<?php
/*
Copyright © Denis Szalkowski - 19/09/2017 - Version 1.0 - Licence GPL 2
L'objet de ce script est de générer un ticket automatiquement dans GLPI au changement de statut d'un ordinateur.
Dans l'exemple ci-dessous, il passe du statut "A changer" à "En attente de changement".
*/
// Vos paramètres de connexion à la base de données GLPI MySQL/Mariadb
$login='root';
$pwd='root';
$host='192.168.1.21';
$db='glpi';
// Tentative de connexion
try
{
 $dbh = new PDO("mysql:dbname=$db;host=$host",$login,$pwd);
 // Choix du codage 
 $dbh->exec("SET CHARACTER SET utf8") or die("Codage inexistant !");
}
// En cas d'erreur, fin du script
catch(PDOException $e)
{
 die ('Connection impossible : '.$e->message);
}
// Recherche d'un statut du type "En attente de changement" dans la table glpi_states
$sql="
 SELECT
 id,name
 FROM
 glpi_states
 WHERE
 name='En attente de changement'
";
$rows=$dbh->query($sql);
// Création du statut, dans l'hypothèse où aucun statut du type "En attente de changement" n'aurait été trouvé
if(!$rows->rowCount())
{ 
 $sql="
 INSERT INTO glpi_states(name,completename,date_mod,date_creation,is_recursive)
 VALUES('En attente de changement','En attente de changement',NOW(),NOW(),1);
 ";
 $dbh->exec($sql) or die("La création de l'état En attente de changement n'a pas pu se faire !");
 $state=$dbh->lastInsertId();
}
// Dans le cas contraire, on récupère le premier statut existant du type "En attente..." !
else
{
 $row=$rows->fetch(); 
 $state=$row['id'];
}
// Recherche des ordinateurs - à l'aide des expressions régulières - dont le statut est A changer.
$sql="
SELECT 
 c.id AS id,c.name AS name
FROM
 glpi_computers c
 INNER JOIN glpi_states s ON c.states_id=s.id
WHERE
 s.name = 'A changer'
";
$rows=$dbh->query($sql);
if(!$rows->rowCount())
{
 unset($dbh);
 exit;
};
// Création de la liaison Ordinateur-Ticket dans glpi_item_tickets
while($row=$rows->fetch())
{
 // Création de ticket dans glpi_tickets
 // type=1 représente une demande
 $computer=$row['id'];
 $libelle='Ordinateur '.$row['name'].' à changer';
 $sql="INSERT INTO glpi_tickets(name,date,date_mod,content,date_creation,type) VALUES('$libelle',NOW(),NOW(),'$libelle',NOW(),1);";
 $dbh->exec($sql) or die("Echouage à la création du ticket");
 // Récupération du dernier numéro de ticket créé, consécutif à l'insertion précédente
 $ticket=$dbh->lastInsertId();
 // Ajout dans la table liaison Ordinateur-Tickets glpi_item_tickets
 // items_id désigne, dans le cas présent, l'id de l'ordinateur
 $sql="INSERT INTO glpi_items_tickets(itemtype,items_id,tickets_id) VALUES('Computer',$computer,$ticket);";
 $dbh->exec($sql) or die("Echouage à la création de la liaison ticket-ordinateur");
 // Changement de statut de l'ordinateur passant à "En attente ..."
 $sql="UPDATE glpi_computers SET states_id=$state WHERE id=$computer;"; 
 $dbh->exec($sql) or die("La mise à jour du statut de l'ordinateur passant n'a pas pu se faire");
}
unset($dbh);
exit;
?>

(1) La documentation est d’ailleurs assez pathétique !

GLPI  / Formateur GLPI GLPI 

Commentaires

excelent!!!!!
il fallait vraiment y penser :)
je vais suivre ce modèle pour creer un script en python.

Laisser un commentaire

(requis)

(requis)