GLPI plugin: QR code sur les fiches de cartes SIM (Item_DeviceSimcard)
  • PHP 64.1%
  • JavaScript 35.9%
Find a file
2026-10-21 16:23:42 +02:00
public/js Move JS to public/js: GLPI 11 serves plugin static assets only from the plugin's public/ directory 2026-10-21 16:23:42 +02:00
.gitignore Add simqr plugin v1.0.0 (QR code on SIM card asset forms) 2026-09-30 09:33:50 +02:00
logo.png v1.4.0: fiable QR placement via external JS (MutationObserver, AJAX-safe) + SIM+QR logo 2026-09-30 15:06:51 +02:00
README.md v1.4.2: double mécanique placement QR (inline + MutationObserver) 2026-09-30 18:09:44 +02:00
setup.php Move JS to public/js: GLPI 11 serves plugin static assets only from the plugin's public/ directory 2026-10-21 16:23:42 +02:00

simqr — QR code pour les cartes SIM

Plugin GLPI : affiche un QR code sur les fiches de cartes SIM (détail et édition), positionné à droite de la page dans la même colonne que le QR natif des assets (page ordinateur). Le QR contient les identifiants de la SIM au lieu d'une URL, au format :

IMSI;NumLigne;PIN;PUK

Champs lus

Segment Champ GLPI
IMSI msin (GLPI stocke l'IMSI sous ce nom — 8/10 derniers chiffres)
NumLigne caller_num de la ligne téléphonique liée (lines_id → Line)
PIN pin
PUK puk

Les valeurs vides restent des segments vides (IMSI;;PIN;PUK si pas de ligne).

Contrôle d'accès

Le QR n'est affiché que si l'utilisateur a le droit devicesimcard_pinpuk (même test que GLPI pour masquer/masquer le PIN/PUK sur la fiche, src/Item_Devices.php:1151). Sans ce droit, aucun QR — le PIN/PUK ne sont jamais exposés.

Positionnement

GLPI n'autorise pas un plugin à override le template twig du core (les templates de plugin sont chargés via un namespace @pluginkey, pas au même niveau), le plugin ne peut donc pas réécrire le template lui-même. Il injecte le QR dans la page, puis un script JS (js/simqr.js, chargé sur toutes les pages via le hook ADD_JAVASCRIPT) le déplace dans la colonne droite (div.card-body.d-flex) en recréant exactement le layout de la page ordinateur : colonne gauche col-xxl-9 + colonne droite col-xxl-3 avec carte, centrée, flex:1.

Le script est externe (pas inline) et observe le DOM (MutationObserver) : c'est indispensable car, sur une fiche, le contenu des onglets est chargé par AJAX et un <script> inline inséré dynamiquement ne s'exécuterait jamais.

Sur mobile (grille à une colonne) le QR apparaît en bas de page.

Installation

  1. Copier le dossier dans <glpi>/plugins/simqr (le nom du dossier doit être simqr).
  2. Activer dans Administration → Plugins.

Requiert GLPI ≥ 10.0.0.

Releases

  • v1.4.2 — double mécanique de placement : le script de positionnement est injecté inline par le hook (DOM, indépendant du chargement du JS externe) + js/simqr.js (footer, MutationObserver) pour les fiches chargées par AJAX. Marqueur data-simqr="1.4.2" sur le bloc QR : document.querySelector('#simqr-qrwrap').dataset.simqr en console montre instantanément quelle version est réellement chargée.
  • v1.4.0 — placement QR fiable (script JS externe js/simqr.js + MutationObserver, gère aussi le chargement AJAX des onglets) + logo (carte SIM + QR)
  • v1.3.0 — correction Line::getByID() (retourne un objet, pas un tableau) + logo
  • v1.2.0 — numéro de ligne corrigé (caller_num) + QR déplacé à droite (colonne assets)
  • v1.1.0 — contenu IMSI;NumLigne;PIN;PUK au lieu de l'URL + contrôle de droit
  • v1.0.0 — QR URL de la fiche (comme le QR natif des assets)