Welcome to GLPi feature request service.
Please check if the feature has not already been requested.
If not, please describe it

0

Sequential Approval in Enterprise Service Management

Usama il y a 6 jours 0

I’m trying to implement sequential approvals on Enterprise Service Management forms/tickets. I attempted to use Business Rules, but as soon as I add an additional criterion—such as Description → Contains, alongside Approval → Granted—the rule fails to trigger.

My requirement is to have different approvers for different types of service requests (e.g., recruitment requests, termination requests, leave requests). At any stage, if an approval is refused, the approval flow should stop and the ticket should close.

The challenge is that I cannot add additional criteria in the Business Rule to differentiate request types; as a result, the rule would apply globally to all tickets where approval is granted, forcing me to configure only one user or one group as the second-level approver—which defeats the purpose. ESM forms require different approvers depending on the request type.

Has anyone managed to solve this using Business Rules?

My other option is to explore configuring Entities, which in theory should work—but so should the rules, at least on paper. :(

0

[Feature Request - GLPI 11] UX Improvement: Grouping items in the "Assets" menu

yann estada il y a 1 semaine 0

Bonjour l'équipe et la communauté,

Je souhaite proposer une amélioration concernant l'interface utilisateur de GLPI 11, spécifiquement au niveau du menu Parc (Assets).

Le constat : Actuellement, tous les types d'équipements (Ordinateurs, Moniteurs, Réseau, Imprimantes, Périphériques, etc.) sont listés au même niveau sous le menu "Parc". Avec l'ajout d'objets personnalisés, cette liste devient très longue et difficile à scanner visuellement.

La proposition : Serait-il possible d'introduire une fonctionnalité (native ou via configuration UI) permettant de créer des sous-groupes visuels ou des séparateurs dans ce menu ?

L'idée n'est pas de changer la structure de la base de données, mais uniquement l'organisation visuelle du menu.

Exemple d'organisation :

Parc

--- Infrastructure --- (Séparateur ou Sous-menu)

 Réseau

Rack

PDU

--- Postes de travail ---

Ordinateurs

Moniteurs

--- Périphériques ---

Imprimantes

Téléphones

Cela améliorerait grandement la navigation au quotidien pour les techniciens. Qu'en pensez-vous ?

Merci pour votre excellent travail sur la v11 !

0

Include Asset Definitions in capacities for an Asset Definition

Peter Rundqvist il y a 2 semaines 0

Hi,

Currently, an asset definition instance can't be configured to allow displaying links to other asset definition instances.

An example:

I have an Asset Definition "A" and another Asset Definition "B".

Asset Definition "B" contains a custom field linking to an instance of Asset Definition "A".

When I open my instance of Asset Definition "A" I cannot see any reference to the linked Asset Definition "B" instance.

GLPI should be improved to allow me to se this relation, just as I can see all other relations (via the Capacities configuration page for the Asset Definition).

In my above example the asset relation is: Asset Definition "B" 0..* -- 0..1 Asset Definition "A".

Kind regards,

Peter

0

ICMP (Ping) to server, open a support ticket if down.

WANDERLEY il y a 2 semaines mis à jour il y a 2 semaines 0

Eu criei uma página ICMP.php via API ela abre um ticket baseado em um ping para um determinado servidor via IP . Gostaria que validasse esta função, para melhorar e acrescentar no GLPI assim não preciso integrar o zabbix no GLPI.

Image 517

Image 518


CÓDIGO UTILIZADO COMO FONTE EU ADAPTEI O MEU ATE CHEGAR NO PONTO AI DO CHAMADO JÁ CRIADO AO GLPI.

?php
// --- PARTE 1: Configurações e Função de Ping ---
// Configurações do GLPI
$glpi_url = 'http://<seu-servidor-glpi>/apirest.php/'; // Ex: http://localhost/glpi/apirest.php/
$app_token = '<SEU_APP_TOKEN>';
$user_token = '<SEU_USER_TOKEN>';
$entidade_id = 0; // ID da entidade (0 para entidade raiz ou o ID específico)
$categoria_id = 0; // ID da categoria do chamado (ex: 9 para Problema de Rede )
$user_id = 1; // **[NOVO]** ID do usuário solicitante (substitua pelo ID real do usuário no GLPI)

// Endereço IP ou hostname a ser pingado
$target_host = '8.8.8.8'; // Ex: IP do servidor ou Google DNS

// Função para verificar se o host está online (simples ICMP ping)
function is_host_online($host) {
    // Comando ping para sistemas Linux. Ajuste para Windows se necessário.
    $command = 'ping -c 3 ' . escapeshellarg($host);
    exec($command, $output, $status);
    return ($status === 0);
}

// --- PARTE 2: Lógica Principal ---
if (!is_host_online($target_host)) {
    echo "Falha no ping para {$target_host}. Abrindo chamado no GLPI...\n";
    // **[MODIFICADO]** Passando o novo user_id para a função
    create_glpi_ticket($glpi_url, $app_token, $user_token, $entidade_id, $categoria_id, $target_host, $user_id);
} else {
    echo "O host {$target_host} está online. Nenhum chamado foi aberto.\n";
}

// --- PARTE 3: Função para Criar Chamado no GLPI via API ---
// **[MODIFICADO]** Adicionando $user_id como parâmetro
function create_glpi_ticket($url, $app_token, $user_token, $entity_id, $category_id, $host, $user_id) {
    // 1. Iniciar sessão para obter o Session Token
    $session_token = get_glpi_session_token($url, $app_token, $user_token);
    if (!$session_token) {
        echo "Erro: Não foi possível obter o Session Token.\n";
        return;
    }

    // 2. Criar o chamado (Ticket)
    $ticket_data = json_encode([
        'input' => [
            'name' => "FALHA DE PING: Host {$host} inacessível", // Título do chamado
            'content' => "O monitoramento automático detectou que o host {$host} não responde ao ping.\nFavor verificar a conectividade.", // Descrição
            'status' => 1, // Status: Novo
            'urgency' => 3, // Urgência: Média
            'priority' => 3, // Prioridade: Média
            'entities_id' => $entity_id,
            'itilcategories_id' => $category_id,
            'requesttypes_id' => 1, // Tipo de requisição (1 para Incidente, ajuste se necessário)
            'users_id' => $user_id // **[NOVO]** Define o usuário solicitante pelo ID
        ]
    ]);

    $ch = curl_init("{$url}Ticket");
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $ticket_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'App-Token: ' . $app_token,
        'Session-Token: ' . $session_token
    ));
    $result = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpcode == 201) {
        echo "Chamado criado com sucesso! Código de status: {$httpcode}\n";
    } else {
        echo "Erro ao criar chamado. Código de status: {$httpcode}. Resposta: {$result}\n";
    }

    // Opcional: Finalizar sessão
    // logout_glpi_session($url, $app_token, $session_token);
}

function get_glpi_session_token($url, $app_token, $user_token) {
    $ch = curl_init("{$url}initSession");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'App-Token: ' . $app_token,
        'Authorization: user_token ' . $user_token
    ));
    $result = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpcode == 200) {
        $response = json_decode($result, true);
        return $response['session_token'];
    }
    return false;
}

// Função de logout opcional
function logout_glpi_session($url, $app_token, $session_token) {
    $ch = curl_init("{$url}killSession");
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'App-Token: ' . $app_token,
        'Session-Token: ' . $session_token
    ));
    curl_exec($ch);
    curl_close($ch);
}
?>

0

¿Como puedo generar un informe de los cambios que se hacen en los equipos?

apaniagua il y a 4 semaines 0

Hola buenas, me gustaria generar un informe/reporte diario que me informase si hubiera algun cambio en el hardware de los equipos para enterarme al momento

0

[Features] Stock/Warehouse state in Orders Plugin

Michał Panasiewicz il y a 4 semaines 0

Handling of order item status.
Adding items release status from warehouse/stock.
There is no warehouse/stock option where you can see how many items from orders have been issued and how many we still have in warehouse/stock available for transfer.

As a separate item in the “order/front/menu.php” menu with a table summarizing items from orders and the ability to filter them.

0

[Question] Will file uploads on public forms return in GLPI 11?

Ramon il y a 1 mois 0

Hello GLPI Team,

We were wondering if there are any plans to re-introduce file uploads on public (anonymous) forms for the GLPI 11 release.

We understand this feature was removed due to major security concerns, but it is a very valuable feature for many workflows.

Is a new, more secure implementation being considered or planned for version 11?

Thank you for your hard work!

0

technician in charge as option in actors form destination

Baelhadj il y a 1 mois mis à jour par Curtis Conard il y a 1 mois 1

it will be a good improvement if we can select the technician in charge of currently selected ITIL category as actor(requester, observer, assignee), doesn't seem to be assigning the technician when I let the field empty

0

Add an option to get full form using tag in destinations

Luz3r il y a 1 mois 0

Hello dear GLPI team,

As an example, we use forms to create a session when a new employee joins the company. The HR manager uses a form that then creates a ticket with the information from the form so that our IT team has all the necessary information. Previously, with the FormsCreator plugin, we were able to add text to the ticket (instructions for the technician in our case), then use the “##FULLFORM##” tag to display the entire form in order to obtain the information.

Since the addition of native forms, this tag is no longer available, and there is only one way to display the entire form without having to rebuild it using every tags, which is to not include any text (enabling the Auto config).

Would it be possible to add this option to display the entire form using a tag? Currently, we display the entire form without being able to give instructions to the technician...

Regards

0

Answers by mail, notifications for replies and settings (followups for anonymous)

Serhii il y a 1 mois 0

Please create a feature that will allow limiting follow-ups from users to other users.

What I mean is that we need a mechanism similar to the function in the general settings Setup -> General -> Notifications for my changes, which, incidentally, does not always work.
Specifically, when correspondence is conducted by email, other participants who are copied on the email but are not direct observers in the system should not receive notifications from the GLPI system about new replies from other users.
This is because they can already see these replies in the correspondence.
However, they should be able to receive replies from the system (when a technical engineer responds within the request)

I am interested in responses (Followup) so that the system accepts responses from users, but does not send them notifications with their own response or from other users who are in this correspondence. But it could send a follow-up in case of a response from a technician in the system itself.
Ideally, this would be for users who are not registered in the system or simply do not have an account, but it could also be for users who are in the system but have never logged in, and correspond and create requests via email.

Perhaps there are already some ready-made solutions for this, such as plugins or settings in the system itself?

Thank you in advance!