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.";
}
?>