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

Voir aussi

  •