Please check if the feature has not already been requested.
If not, please describe it
Pretty URLs with htaccess
The URL at today is: http://myurl.com/front/funtionality.php?id=XXX or http://myurl.com/plugin/funtionality.php the idea it's change this trough htaccess for http://myrul.com/funtionality/ID I mean the URL change to this: Example the URL for projects it is:http://myurl.com/plugins/projet/front/projet.php the htaccess change just for /project/ and when you chooose a project appear form this must be changed too so: form + ID it's reduced so the final it's http://myurl.com/projet/01 or ticket case Example the ticket URL it's: http://myurl.com/front/ticket.form.php?id=000000 the htaccess change just for /ticket/ and when you chooose a ticket appear form this must be changed too so: form + ID it's reduced so the final it's http://myurl.com/Ticket/20153001
Integrate Talk plugin to the project section.
I'm falling in love with the talk plugins
http://plugins.glpi-project.org/#/plugin/talk
it's very usefull, so, is it possible to have the same plugin for the project?
Thx!
DO NOT clear fields when a mandatory field is missing
When you try to close a ticket and you missed to fill a mandatory field (eg category), the response field you took time to fill is TOTALLY EMPTY after clicking on save...
GLPIPlanning.getHeight in planning.js
I'm using GLPI 11.0.4 as a Docker container.
In planning view I was not able to use the full available window height.
The only method I found was to manually edit line 93 of file planning.js inside the container, from
height: options.height,
to
height: '100%',
and fully refresh the page in browser.
This value seems to have a default value set at line 55
height: GLPIPlanning.getHeight,
This behaviour is a bit annoying because I have to reproduce this modification at every containter recreation.
It should be nice if that value was parameterized somehow as many other parameters are already.
Sequential Approval in Enterprise Service Management
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. :(
[Feature Request - GLPI 11] UX Improvement: Grouping items in the "Assets" menu
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 !
Include Asset Definitions in capacities for an Asset Definition
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
ICMP (Ping) to server, open a support ticket if down.
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.


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);
}
?>
¿Como puedo generar un informe de los cambios que se hacen en los equipos?
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
Сервис поддержки клиентов работает на платформе UserEcho