bloginfo

Generate GLPI ticket on computer status changement

Sep 19th, 2017 (edited)
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.02 KB | None | 0 0
  1. <?php
  2. /*
  3. Copyright © Denis Szalkowski - 19/09/2017 - Version 1.0 - Licence GPL 2
  4.  
  5. L'objet de ce script est de générer un ticket automatiquement dans GLPI au changement de statut d'un ordinateur.
  6. Dans l'exemple ci-dessous, il passe du statut "A changer" à "En attente de changement".
  7.  
  8. */
  9. // Vos paramètres de connexion à la base de données GLPI MySQL/Mariadb
  10. $login='root';
  11. $pwd='root';
  12. $host='192.168.1.21';
  13. $db='glpi';
  14. // Tentative de connexion
  15. try
  16. {
  17.         $dbh = new PDO("mysql:dbname=$db;host=$host",$login,$pwd);
  18.     // Choix du codage 
  19.     $dbh->exec("SET CHARACTER SET utf8")  or die("Codage inexistant !");
  20. }
  21. // En cas d'erreur, fin du script
  22. catch(PDOException $e)
  23. {
  24.     die ('Connection impossible : '.$e->message);
  25. }
  26. // Recherche d'un statut du type "En attente de changement" dans la table glpi_states
  27. $sql="
  28.     SELECT
  29.         id,name
  30.     FROM
  31.         glpi_states
  32.     WHERE
  33.         name='En attente de changement'
  34. ";
  35. $rows=$dbh->query($sql);
  36. // Création du statut, dans l'hypothèse où aucun statut du type "En attente de changement" n'aurait été trouvé
  37. if(!$rows->rowCount())
  38. {      
  39.     $sql="
  40.         INSERT INTO glpi_states(name,completename,date_mod,date_creation,is_recursive)
  41.         VALUES('En attente de changement','En attente de changement',NOW(),NOW(),1);
  42.     ";
  43.     $dbh->exec($sql) or die("La création de l'état En attente de changement n'a pas pu se faire !");
  44.     $state=$dbh->lastInsertId();
  45. }
  46. // Dans le cas contraire, on récupère le premier statut existant du type "En attente..." !
  47. else
  48. {
  49.     $row=$rows->fetch();   
  50.     $state=$row['id'];
  51. }
  52. // Recherche des ordinateurs - à l'aide des expressions régulières - dont le statut est A changer.
  53. $sql="
  54. SELECT
  55.     c.id AS id,c.name AS name
  56. FROM
  57.     glpi_computers c
  58.     INNER JOIN glpi_states s ON c.states_id=s.id
  59. WHERE
  60.     s.name = 'A changer'
  61. ";
  62. $rows=$dbh->query($sql);
  63. if(!$rows->rowCount())
  64. {
  65.     unset($dbh);
  66.     exit;
  67. };
  68. // Création de la liaison Ordinateur-Ticket dans glpi_item_tickets
  69. while($row=$rows->fetch())
  70. {
  71.     // Création de ticket dans glpi_tickets
  72.     // type=1 représente une demande
  73.     $computer=$row['id'];
  74.     $libelle='Ordinateur '.$row['name'].' à changer';
  75.     $sql="INSERT INTO glpi_tickets(name,date,date_mod,content,date_creation,type) VALUES('$libelle',NOW(),NOW(),'$libelle',NOW(),1);";
  76.     $dbh->exec($sql) or die("Echouage à la création du ticket");
  77.     // Récupération du dernier numéro de ticket créé, consécutif à l'insertion précédente
  78.     $ticket=$dbh->lastInsertId();
  79.     // Ajout dans la table liaison Ordinateur-Tickets glpi_item_tickets
  80.     // items_id désigne, dans le cas présent, l'id de l'ordinateur
  81.     $sql="INSERT INTO glpi_items_tickets(itemtype,items_id,tickets_id) VALUES('Computer',$computer,$ticket);";
  82.     $dbh->exec($sql) or die("Echouage à la création de la liaison ticket-ordinateur");
  83.     // Changement de statut de l'ordinateur passant à "En attente ..."
  84.     $sql="UPDATE glpi_computers SET states_id=$state WHERE id=$computer;"; 
  85.     $dbh->exec($sql) or die("La mise à jour du statut de l'ordinateur passant n'a pas pu se faire");
  86. }
  87. unset($dbh);
  88. exit;
  89. ?>
Add Comment
Please, Sign In to add comment