Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 103 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,110 @@
# Barcode GLPI plugin
# Barcode Plugin for GLPI 11

To use it, go in computer list, check the computers and in massive action, you have 2 possibilities :
> **Migration to GLPI 11.x** by [Dawing S.A.S.](https://dawing.com.co) — original plugin by [David DURIEUX / pluginsGLPI](https://github.com/pluginsGLPI/barcode)

* print a bar code
* print a QRcode
## What this plugin does

## Translations
| Feature | Description |
|---|---|
| **Linear barcodes** | Generates Code39, Code128, EAN13, INT25, Postnet, UPC-A from the asset inventory number (`otherserial`) |
| **QR codes** | Generates QR codes with configurable content: serial number, inventory number, ID, UUID, name, URL, date |
| **PDF export** | Automatic grid layout, multiple codes per page |
| **Massive action** | Available from any GLPI asset list: "Print barcodes" and "Print QRcodes" |
| **Per-type config** | Margins, page size, orientation, max code dimensions, text size |
| **Company logo** | Upload a PNG logo that appears above each code in the PDF |

If you want Tag to be available in your native language and have a little time , you can help us :
## Requirements

Join us on [Transifex](https://www.transifex.com/pluginsGLPI/glpi_barcode/)
| Component | Minimum version |
|---|---|
| GLPI | 11.0.0 |
| PHP | 8.1 (tested on 8.4) |
| PHP extensions | `gd`, `mbstring`, `xml`, `curl`, `zip` |
| Composer | 2.x |

## Contributing
## Installation

* Open a ticket for each bug/feature so it can be discussed
* Follow [development guidelines](http://glpi-developer-documentation.readthedocs.io/en/latest/plugins/index.html)
* Refer to [GitFlow](http://git-flow.readthedocs.io/) process for branching
* Work on a new branch on your own fork
* Open a PR that will be reviewed by a developer
```bash
# 1. Place plugin in GLPI plugins directory
cp -r barcode/ /var/www/glpi/plugins/

# 2. Install dependencies
cd /var/www/glpi/plugins/barcode
composer install --no-dev --optimize-autoloader

# 3. Set permissions (Rocky Linux / CentOS / AlmaLinux)
chown -R apache:apache /var/www/glpi/plugins/barcode
mkdir -p /var/www/glpi/files/_plugins/barcode
chown -R apache:apache /var/www/glpi/files/_plugins/barcode

# 4. SELinux (if enforcing)
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/glpi/plugins/barcode(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/glpi/files/_plugins/barcode(/.*)?"
restorecon -Rv /var/www/glpi/plugins/barcode
restorecon -Rv /var/www/glpi/files/_plugins/barcode
```

Then go to **Setup → Plugins → Barcode → Install → Enable**

## Changes from v2.7.1 (GLPI 10) to v3.0.0 (GLPI 11)

| File | Issue | Fix |
|---|---|---|
| `setup.php` | Version bound `10.0.99` blocked install on GLPI 11 | Updated to `11.0.0–11.0.99` |
| `setup.php` | `csrf_compliant` hook removed in GLPI 11 | Removed |
| `setup.php` | `Plugin::getWebDir()` deprecated in GLPI 11 | Replaced with direct paths `/plugins/barcode/...` |
| `hook.php` | `$DB->query() or die()` forbidden in GLPI 11 | Replaced with `$DB->doQueryOrDie()` |
| `hook.php` | `PRIMARY KEY (ID)` uppercase bug (MariaDB strict) | Fixed to lowercase `id` |
| `inc/qrcode.class.php` | Special chars (tildes, ñ) broken in QR content | Removed `__()` from QR embedded text |
| `inc/qrcode.class.php` | Massive action UI column purpose was unclear | Added descriptive labels explaining each column |
| `inc/config.class.php` | `array_keys()[0]` deprecated pattern | Updated to `array_key_first()` |
| `inc/config.class.php` | Raw `<input type=submit>` | Replaced with `Html::submit()` |
| `front/*.php` | `include('../../../inc/includes.php')` broken path | Fixed for GLPI 11 router |
| `front/send.php` | No filename validation | Added strict PDF-only validation |
| `front/document.send.php` | No MIME validation on logo | Added `finfo` MIME type check |
| `front/checkItemByInv.php` | No itemtype class validation | Added `is_subclass_of(CommonDBTM)` check |
| `composer.json` | PHP platform forced to `7.4` | Updated to `>=8.1` |

## Tested environment

- **GLPI** 11.0.6
- **Rocky Linux** 10
- **PHP** 8.4.19 (Remi repository)
- **MariaDB** (centralized server)
- **Apache** 2.4.63

## Usage

### From asset lists (Massive action)

1. Go to any asset list (Computers, Monitors, Printers, etc.)
2. Select one or more assets
3. In the massive action bar: **Barcode – Print barcodes** or **Barcode – Print QRcodes**
4. Configure options — left column = include in QR data, right column = show as visible label under the code
5. Click **Create** → download link for the generated PDF appears

### QR code content

The QR code embeds plain ASCII text (no special characters) to ensure maximum scanner compatibility:

```
Serial number = ABC123
Inventory number = IM00001
ID = 42
Name = LAPTOP-001
URL = https://glpi.example.com/plugins/barcode/front/checkItemByInv.php?inventoryNumber=IM00001&itemtype=Computer
QRcode date = 2026-03-30
```

### Company logo

Go to **Setup → Plugins → Barcode config** and upload a PNG logo (recommended: 300×60px, transparent background).

## License

[AGPL v3+](LICENSE)

## Credits

- Original plugin: [David DURIEUX](mailto:d.durieux@siprossii.com) and contributors
- GLPI 11 migration: [Cristian David Baquero / Dawing S.A.S.](https://dawing.com.co)
183 changes: 183 additions & 0 deletions README_MIGRACION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# Plugin Barcode para GLPI 11
## Migrado a GLPI 11.x por Dawing S.A.S.

---

## ¿Qué hace este plugin?

| Función | Descripción |
|---|---|
| **Barcodes lineales** | Genera Code39, Code128, EAN13, INT25, Postnet, UPC-A a partir del número de inventario (`otherserial`) del activo |
| **QR codes** | Genera QR codes con contenido configurable: número de serie, inventario, ID, UUID, nombre, URL y fecha |
| **Exportación PDF** | Grilla de códigos exportada a PDF con layout automático (múltiples por página) |
| **Acción masiva** | Disponible desde cualquier listado de activos GLPI: "Print barcodes" y "Print QRcodes" |
| **Configuración por tipo** | Márgenes, tamaño de página, orientación, dimensiones máximas de código, tamaño de texto |
| **Logo corporativo** | Permite subir un logo PNG que aparece sobre cada código en el PDF |

---

## Cambios realizados para compatibilidad con GLPI 11

### setup.php
- Versión mínima/máxima actualizada a `11.0.0` / `11.0.99`
- Eliminado `$PLUGIN_HOOKS['csrf_compliant']` (deprecado y eliminado en GLPI 11)
- Eliminado `Plugin::getWebDir()` (deprecado en GLPI 11) → reemplazado por rutas absolutas `/plugins/barcode/...`

### hook.php
- `$DB->query(...) or die(...)` → reemplazado por `$DB->doQueryOrDie(...)` (API GLPI 11)
- Bug heredado: `PRIMARY KEY (ID)` (mayúscula) → corregido a `PRIMARY KEY (id)` (minúscula, compatible con MariaDB estricto)
- `$DB->request('tabla', $cond)` → actualizado a sintaxis con array estructurado

### inc/barcode.class.php / inc/qrcode.class.php
- `Plugin::getWebDir()` → rutas `/plugins/barcode/front/...`
- `count()` sobre valores que pueden ser null → protegido con `is_array()`
- `key($ma->items)` → comparación mejorada con `is_a()` para detectar tipos ITIL

### inc/config.class.php
- `array_keys($obj->find(...))[0]` → `array_key_first($obj->find(...))` (PHP 7.3+, disponible en PHP 8.x)

### front/*.php
- Validación de seguridad mejorada en `send.php` (solo permite archivos PDF propios del plugin)
- `document.send.php`: validación de MIME type y restricción solo a `barcode/logo.png`
- `checkItemByInv.php`: validación de que el itemtype es subclase de `CommonDBTM`
- Confirmaciones con `Session::checkRight()` en todos los controladores

### composer.json
- `platform.php` actualizado de `7.4.0` a `8.1.0`
- Añadido autoload `classmap` para el directorio `inc/`

---

## Requisitos del servidor

| Componente | Versión mínima |
|---|---|
| GLPI | 11.0.0 |
| PHP | 8.1 |
| Extensiones PHP | `gd`, `mbstring`, `xml`, `curl` |
| Composer | 2.x |

---

## Instalación

### Paso 1 – Copiar el plugin

```bash
# Desde el directorio raíz de GLPI
cp -r /ruta/a/barcode /var/www/glpi/plugins/barcode
# O usando marketplace
cp -r /ruta/a/barcode /var/www/glpi/marketplace/barcode
```

### Paso 2 – Instalar dependencias con Composer

```bash
cd /var/www/glpi/plugins/barcode
composer install --no-dev --optimize-autoloader
```

> **Nota:** Si el servidor no tiene acceso a internet, ejecuta Composer en tu equipo local
> y sube la carpeta `vendor/` completa al servidor.

### Paso 3 – Verificar permisos

```bash
# El usuario del servidor web (apache/nginx/www-data) debe poder escribir en:
chown -R www-data:www-data /var/www/glpi/plugins/barcode
chmod -R 755 /var/www/glpi/plugins/barcode

# Y también en el directorio de documentos del plugin:
mkdir -p /var/www/glpi/files/_plugins/barcode
chown -R www-data:www-data /var/www/glpi/files/_plugins/barcode
chmod -R 750 /var/www/glpi/files/_plugins/barcode
```

### Paso 4 – Instalar en GLPI

1. Entrar a GLPI como super-administrador
2. Ir a **Configuración → Plugins** (o **Setup → Plugins**)
3. Localizar **Barcode** en la lista
4. Hacer clic en **Instalar** (ícono de engranaje)
5. Hacer clic en **Activar**

### Paso 5 – Configurar derechos

1. Ir a **Administración → Perfiles**
2. Editar los perfiles que necesiten usar el plugin
3. En la pestaña **Barcode** configurar:
- `Manage configuration` (UPDATE) → para administradores
- `Generation of barcode` (CREATE) → para técnicos

---

## Uso

### Generación manual

Ir a **Herramientas → Barcode** y escribir el código a generar.

### Generación desde activos (acción masiva)

1. Ir a cualquier listado de activos (Equipos, Monitores, Impresoras, etc.)
2. Seleccionar uno o más activos con los checkboxes
3. En la barra de acciones masivas: **Barcode – Print barcodes** o **Barcode – Print QRcodes**
4. Configurar opciones (tipo, tamaño, orientación, campos a incluir en QR)
5. Hacer clic en **Create** → aparecerá un enlace para descargar el PDF

### Logo corporativo

1. Ir a **Configuración → Plugins → Barcode**
2. En la sección **Company logo**, subir un archivo PNG
3. El logo aparecerá sobre cada código en los PDFs generados

---

## Estructura de archivos

```
barcode/
├── setup.php ← Bootstrap e inicialización de hooks
├── hook.php ← Funciones de instalación/desinstalación/acciones masivas
├── barcode.xml ← Metadatos del plugin
├── composer.json ← Dependencias PHP
├── inc/
│ ├── barcode.class.php ← Clase principal: generación de códigos lineales + PDF
│ ├── qrcode.class.php ← Clase QR code
│ ├── config.class.php ← Clase de configuración general
│ ├── config_type.class.php ← Clase de configuración por tipo
│ └── profile.class.php ← Clase de gestión de perfiles/derechos
├── front/
│ ├── barcode.php ← Listado/formulario de generación manual
│ ├── barcode.form.php ← Procesador POST de generación manual
│ ├── config.php ← Página de configuración
│ ├── config.form.php ← Procesador POST de configuración general
│ ├── config_type.form.php ← Procesador POST de configuración por tipo
│ ├── send.php ← Descarga del PDF generado
│ ├── document.send.php ← Sirve el logo de la empresa
│ └── checkItemByInv.php ← Búsqueda de activo por número de inventario
├── locales/ ← Archivos de traducción (.po/.mo)
├── patch/
│ └── fix-pear-image-barcode.patch ← Patch de compatibilidad PHP 8.x para PEAR Image_Barcode
└── vendor/ ← Dependencias Composer (generadas por composer install)
```

---

## Notas de compatibilidad

- Esta versión (3.0.0) es **exclusivamente compatible con GLPI 11.0.x**
- Para GLPI 10.0.x usar la versión 2.7.1 del plugin original
- Las tablas de base de datos son compatibles hacia atrás (mismo esquema)
- Los archivos PDF e imágenes generados previamente en `files/_plugins/barcode/` siguen siendo válidos

---

## Soporte

Para soporte técnico relacionado con esta migración:
- **Dawing S.A.S.** – https://dawing.com.co
- soporte@dawing.com.co

Para el plugin original:
- https://github.com/pluginsGLPI/barcode
Loading