GLPI/Configuration/Générale/API/Exemple 3
Aller à la navigation
Aller à la recherche
Exemple de script PHP d'utilisation de l'API GLPI.
Code des différents fichiers générés par Chat-GPT le 04/12/2024, avec les demandes suivantes :
- Créer un formulaire HTML pour modifier un ticket GLPI
- Quel est en conséquence le code pour le fichier modifier_ticket.php
index.htm
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Modifier un Ticket GLPI</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; } .container { width: 50%; margin: 50px auto; background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } h2 { text-align: center; color: #333; } .form-group { margin-bottom: 15px; } .form-group label { display: block; font-weight: bold; margin-bottom: 5px; } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 10px; font-size: 14px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; } .form-group textarea { resize: vertical; } .form-group select { cursor: pointer; } .btn-submit { width: 100%; padding: 12px; background-color: #007bff; color: white; border: none; border-radius: 4px; font-size: 16px; cursor: pointer; } .btn-submit:hover { background-color: #0056b3; } </style> </head> <body> <div class="container"> <h2>Modifier un ticket GLPI</h2> <form action="modifier_ticket.php" method="POST"> <div class="form-group"> <label for="ticket_id">ID du ticket :</label> <input type="number" id="ticket_id" name="ticket_id" required> </div> <div class="form-group"> <label for="title">Titre du ticket :</label> <input type="text" id="title" name="title" required> </div> <div class="form-group"> <label for="description">Description :</label> <textarea id="description" name="description" rows="4" required></textarea> </div> <div class="form-group"> <label for="status">Statut :</label> <select id="status" name="status" required> <option value="1">Nouveau</option> <option value="2">En cours</option> <option value="3">Résolu</option> <option value="4">Fermé</option> </select> </div> <div class="form-group"> <label for="priority">Priorité :</label> <select id="priority" name="priority" required> <option value="1">Basse</option> <option value="2">Normale</option> <option value="3">Haute</option> <option value="4">Urgente</option> </select> </div> <div class="form-group"> <button type="submit" class="btn-submit"> <i class="fas fa-save"></i> Modifier le ticket </button> </div> </form> </div> </body> </html>
modifier_ticket.php
<?php // Vérifiez que le formulaire a bien été soumis if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Récupérer les données du formulaire $ticket_id = isset($_POST['ticket_id']) ? $_POST['ticket_id'] : null; $title = isset($_POST['title']) ? $_POST['title'] : ''; $description = isset($_POST['description']) ? $_POST['description'] : ''; $status = isset($_POST['status']) ? $_POST['status'] : ''; $priority = isset($_POST['priority']) ? $_POST['priority'] : ''; // Vérifier que toutes les informations nécessaires sont présentes if (!$ticket_id || !$title || !$description || !$status || !$priority) { echo "Toutes les informations doivent être remplies."; exit; } // Informations de connexion à l'API de GLPI $glpi_url = "https://votre-instance-glpi.com"; // Remplacez par l'URL de votre instance GLPI $api_key = "votre_clé_api"; // Remplacez par votre clé API $user_token = "votre_token_utilisateur"; // Remplacez par le token utilisateur pour authentification // URL de l'API pour accéder au ticket $api_url = $glpi_url . "/apirest.php/Ticket/".$ticket_id; // Les données à envoyer pour mettre à jour le ticket $data = array( "input" => array( "name" => $title, "content" => $description, "status" => $status, // Statut du ticket : 1=nouveau, 2=en cours, 3=résolu, 4=fermé "priority" => $priority // Priorité du ticket : 1=basse, 2=normale, 3=haute, 4=urgente ) ); // Initialiser une session cURL $ch = curl_init(); // Définir les options cURL curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Utilisation de la méthode PUT pour la mise à jour curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Authorization: user_token $user_token", // Authentification avec le token utilisateur "App-Token: $api_key" // Authentification avec la clé API )); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); // Convertir les données en JSON // Exécuter la requête cURL $response = curl_exec($ch); // Vérifier les erreurs cURL if (curl_errno($ch)) { echo 'Erreur cURL : ' . curl_error($ch); } // Fermer la session cURL curl_close($ch); // Vérifier la réponse de l'API if ($response) { $response_data = json_decode($response, true); if (isset($response_data['id'])) { echo "Le ticket a été mis à jour avec succès."; } else { echo "Erreur lors de la mise à jour du ticket."; } } else { echo "Erreur de connexion à l'API."; } } ?>
tickets.htm
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Parcourir les Tickets GLPI</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; } .container { width: 50%; margin: 50px auto; background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } h2 { text-align: center; color: #333; } .form-group { margin-bottom: 15px; } .form-group label { display: block; font-weight: bold; margin-bottom: 5px; } .form-group select { width: 100%; padding: 10px; font-size: 14px; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; } .btn-submit { width: 100%; padding: 12px; background-color: #007bff; color: white; border: none; border-radius: 4px; font-size: 16px; cursor: pointer; } .btn-submit:hover { background-color: #0056b3; } .ticket-details { margin-top: 20px; } .ticket-details label { font-weight: bold; } </style> </head> <body> <div class="container"> <h2>Parcourir les tickets GLPI</h2> <form action="parcourir_tickets.php" method="POST"> <div class="form-group"> <label for="ticket_id">Sélectionnez un ticket :</label> <select id="ticket_id" name="ticket_id" required> <option value="">-- Sélectionnez un ticket --</option> <!-- Les tickets seront chargés ici --> <?php // Ce PHP est pour afficher la liste des tickets (au moment du chargement de la page) include('get_tickets.php'); ?> </select> </div> <div class="form-group"> <button type="submit" class="btn-submit"> <i class="fas fa-search"></i> Consulter le ticket </button> </div> </form> <?php // Affichage des détails du ticket si un ticket est sélectionné if (isset($_POST['ticket_id']) && !empty($_POST['ticket_id'])) { $ticket_id = $_POST['ticket_id']; include('get_ticket_details.php'); } ?> </div> </body> </html>
get_tickets.php
<?php // Informations de connexion à l'API de GLPI $glpi_url = "https://votre-instance-glpi.com"; // Remplacez par l'URL de votre instance GLPI $api_key = "votre_clé_api"; // Remplacez par votre clé API $user_token = "votre_token_utilisateur"; // Remplacez par le token utilisateur pour authentification // URL de l'API pour récupérer les tickets $api_url = $glpi_url . "/apirest.php/Ticket"; // Initialiser une session cURL $ch = curl_init(); // Définir les options cURL curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Authorization: user_token $user_token", // Authentification avec le token utilisateur "App-Token: $api_key" // Authentification avec la clé API )); // Exécuter la requête cURL $response = curl_exec($ch); // Vérifier les erreurs cURL if (curl_errno($ch)) { echo 'Erreur cURL : ' . curl_error($ch); exit; } // Fermer la session cURL curl_close($ch); // Vérifier si la réponse est correcte if ($response) { $tickets = json_decode($response, true); // Afficher les tickets dans le select if (!empty($tickets)) { foreach ($tickets as $ticket) { echo "<option value='{$ticket['id']}'>{$ticket['name']}</option>"; } } else { echo "<option value=''>Aucun ticket disponible</option>"; } } else { echo "<option value=''>Erreur de récupération des tickets</option>"; } ?>
get_ticket_details.php
<?php // Récupérer l'ID du ticket sélectionné $ticket_id = $_POST['ticket_id']; // Informations de connexion à l'API de GLPI $glpi_url = "https://votre-instance-glpi.com"; // Remplacez par l'URL de votre instance GLPI $api_key = "votre_clé_api"; // Remplacez par votre clé API $user_token = "votre_token_utilisateur"; // Remplacez par le token utilisateur pour authentification // URL de l'API pour récupérer les détails d'un ticket $api_url = $glpi_url . "/apirest.php/Ticket/$ticket_id"; // Initialiser une session cURL $ch = curl_init(); // Définir les options cURL curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/json", "Authorization: user_token $user_token", // Authentification avec le token utilisateur "App-Token: $api_key" // Authentification avec la clé API )); // Exécuter la requête cURL $response = curl_exec($ch); // Vérifier les erreurs cURL if (curl_errno($ch)) { echo 'Erreur cURL : ' . curl_error($ch); exit; } // Fermer la session cURL curl_close($ch); // Vérifier si la réponse est correcte if ($response) { $ticket = json_decode($response, true); if (!empty($ticket)) { // Afficher les détails du ticket echo "<div class='ticket-details'>"; echo "<h3>Détails du Ticket</h3>"; echo "<label>ID :</label> " . $ticket['id'] . "<br>"; echo "<label>Titre :</label> " . $ticket['name'] . "<br>"; echo "<label>Description :</label> " . $ticket['content'] . "<br>"; echo "<label>Statut :</label> " . $ticket['status'] . "<br>"; echo "<label>Priorité :</label> " . $ticket['priority'] . "<br>"; echo "</div>"; } else { echo "Aucun ticket trouvé."; } } else { echo "Erreur de récupération des détails du ticket."; } ?>