Files
urbackup/MEMORY.md
T
2026-05-22 08:29:59 +02:00

9.7 KiB

UrBackup Plugin - Memoria di Sviluppo

Informazioni Plugin

  • Nome: UrBackup
  • Versione: 0.5.0
  • Compatibilità: GLPI 11.0.6+, PHP 8.3+
  • Namespace: GlpiPlugin\Urbackup

Struttura File

plugin_urbackup/
├── setup.php                  # Hook init, menu, tab, versione, prerequisiti
├── hook.php                   # Install/uninstall, massive actions, class list
├── composer.json              # PSR-4 autoloading
├── src/
│   ├── Config.php             # Configurazione plugin (Computer sempre attivo, capacità)
│   ├── Profile.php            # Diritti utente
│   ├── Server.php             # CRUD server UrBackup
│   ├── ServerAsset.php        # Linking asset-server
│   ├── AssetTab.php           # Tab UrBackup su asset GLPI
│   ├── MassiveAction.php      # Azioni massive connect/disconnect
│   ├── UrbackupApiClient.php  # Client API UrBackup
│   ├── LocationHelper.php     # Helper assegnazione server per location
│   ├── Capacity/
│   │   └── UrBackupCapacity.php  # Capacity per Asset Definition GLPI 11
│   ├── Controller/
│   │   ├── ServerController.php
│   │   ├── AssetController.php
│   │   └── ConfigController.php
│   └── Command/
│       └── TestApiCommand.php
├── install/
│   ├── install.php            # Schema DB, migrazioni, capacity migration
│   ├── uninstall.php          # Drop tabelle, pulizia diritti
│   └── mysql/
│       └── plugin_urbackup-empty.sql  # Schema iniziale
├── front/
│   ├── config.form.php        # Config plugin (Computer info)
│   ├── server.php             # Lista server
│   ├── server.form.php        # Form server con tab laterali
│   └── asset.form.php         # Azioni asset (connect/disconnect/backup)
├── ajax/
│   └── server_test.php        # Test connessione API
├── templates/
│   └── config/
│       └── config.html.twig   # Config page Twig
├── locales/                   # Traduzioni (it, en, de)
├── css/ & js/                 # Asset frontend
└── MEMORY.md                  # Questo file

Classi Principali

Classe Descrizione
Config Configurazione plugin, isItemtypeEnabled
Profile Diritti utente, permessi
Server CRUD server UrBackup
ServerAsset Linking asset-server
AssetTab Tab UrBackup su asset
MassiveAction Azioni massive connect/disconnect
UrbackupApiClient Client API UrBackup (PBKDF2 auth)
LocationHelper Assegnazione server per location
Capacity/UrBackupCapacity Capacity per Asset Definition (cleanup + tracking)
Controller/ServerController Route Symfony per server
Controller/AssetController Route Symfony per azioni asset
Command/TestApiCommand CLI test API

Interfacce GLPI

  • Menu: Amministrazione → Server UrBackup
  • Tab UrBackup su Computer (sempre) + tutti gli Asset Definition
  • Config: Computer sempre attivo; Asset Definition gestiti via native Capacities UI

Architettura Capacities (v0.5.0)

Flusso

Kernel boot: PostBootEvent
├── (110) InitializePlugins → plugin_init_urbackup()
│   ├── Plugin::registerClass(AssetTab, ['Computer'])   ← Computer legacy
│   └── AssetDefinitionManager::registerCapacity()       ← UrBackupCapacity registrata
│
├── (100) CustomObjectsBoot → bootDefinitions()
│   └── foreach definition con UrBackupCapacity abilitata:
│       └── UrBackupCapacity::onClassBootstrap($classname)
│           └── CommonGLPI::registerStandardTab($classname, AssetTab::class)
│               ↑ Tab registrato QUI, dopo che le definizioni sono caricate dal DB
│
Config::isItemtypeEnabled($itemtype)
├── '' → false
├── 'Computer' → true
├── Asset subclass → true                               ← SEMPRE visibile
└── altro → false
│
UrBackupCapacity
├── onClassBootstrap()  → registra AssetTab sul definition classname
├── onCapacityDisabled() → pulisce ServerAsset entries
├── isUsed() / getCapacityUsageDescription() → UI Capacities

Separazione responsabilità

  • Registrazione tab: UrBackupCapacity::onClassBootstrap() — chiamata da bootDefinitions() per ogni definizione con capacità abilitata
  • Visibilità tab: Config::isItemtypeEnabled() — sempre true per Asset subclasses
  • Pulizia: UrBackupCapacity::onCapacityDisabled() — quando admin disabilita la capacità
  • Config: Computer sempre attivo; Capacities gestite dalla UI nativa GLPI

Bug risolto: tab non registrato su Asset Definition nuovi

  • Causa: setup.php iterava getDefinitions() durante plugin_init_urbackup(), ma bootDefinitions() (che carica le definizioni dal DB) gira DOPO (priority 100 vs 110), quindi getDefinitions() tornava sempre array vuoto
  • Fix: La registrazione del tab è stata spostata in UrBackupCapacity::onClassBootstrap(), chiamata da bootstrapDefinition() durante bootDefinitions(), quando le definizioni sono già caricate e la classe dinamica è disponibile
  • Rimosso: loop foreach ($defs ...) e debug logging da setup.php
  • Rimosso: debug logging da AssetTab.php

Tabella glpi_plugin_urbackup_assettypes

  • Colonna is_default rimossa (non serve più con capacities)
  • Tabella vestigiale — non più usata per la logica applicativa
  • Migrazione: plugin_urbackup_install_convert_assettypes_to_capacities() abilita capacità su tutte le definizioni

Comandi Utili

# Installare il plugin
php bin/console glpi:plugin:install urbackup

# Attivare
php bin/console glpi:plugin:activate urbackup

# Disinstallare
echo "yes" | php bin/console glpi:plugin:uninstall urbackup

# Verificare syntax PHP
php -l plugins/urbackup/src/*.php plugins/urbackup/front/*.php plugins/urbackup/*.php

Checklist Pre-Consegna

  • declare(strict_types=1); in ogni file PHP
  • Namespace GlpiPlugin\Urbackup\ e PSR-4 corretto
  • Check versione GLPI 11.0.6+ in setup.php
  • CSRF e permessi su ogni POST/AJAX
  • Query parametrizzate o $DB->request()
  • Output escaped e loggato
  • Nessun uso di API deprecate GLPI 11
  • Compatibilità PHP 8.3 verificata

Da Completare

  1. Test funzionalità lista server e form
  2. AJAX endpoint comunicazione API

Verifiche Post-Migrazione Capacity

  • Tab UrBackup appare su Asset Definition nuovo (Computer + Asset)
  • Upgrade da v0.4.x converte righe attive
  • Colonna is_default droppata
  • Disabilitazione capacità pulisce ServerAsset (onCapacityDisabled)

API UrBackup - Riferimenti

Endpoint API

Metodo Descrizione
login Autenticazione username/password
get_status Lista client con stato backup
get_backups Lista backup per client
start_backup Avvia backup (file/image)
get_progress Monitora progresso backup
get_clients Lista clienti
get_groups Lista gruppi

Problemi Noti

  • JSON Parse Error: API restituisce HTML invece di JSON con credenziali errate
  • Timeout: Verificare raggiungibilità server UrBackup
  • SSL: Se ignore_ssl attivo, accettare certificati self-signed
  • AJAX 403: Funziona solo da browser con sessione GLPI attiva

Cronologia Modifiche

v0.4.2 — Refactoring server.form.php e tab laterali

  • Side tabs a sinistra con nav-pills
  • 4 tab: Server, Linked, Unlinked, Missing clients
  • Missing clients con search/sort, location/AIP/group/state
  • Navigazione server sopra i tab, indipendente
  • Breadcrumb admin
  • Fix namespace getCachedName(), Gruppo da glpi_groups_items
  • Permessi: READ per accesso form, Connect/API nascosti per READ
  • i18n: 17 stringhe nuove (it, en, de)
  • Bug fix: ServerAsset colonne, asset.form.php disconnectAsset(), strict_types in 11 file

v0.4.6 — Funzionalità API completate

  • Salvataggio Internet Mode su server UrBackup
  • Salvataggio Default Dirs
  • Backup file (incremental/full)
  • Backup immagine (incremental/full)
  • Recupero version client da API

v0.4.5 — Tabella semplificata serverassets

  • Rimossi campi: client_name, client_ip, client_version, is_active, last_file_backup, last_image_backup, last_sync, date_creation, date_mod, urbackup_client_id
  • Solo: id, plugin_urbackup_servers_id, itemtype, items_id

v0.4.4 — Tab Linked/Unlinked Clients

  • Dati da API UrBackup invece che da DB
  • Nome tabella corretto: glpi_plugin_urbackup_serverassets
  • Campo: plugin_urbackup_servers_id

v0.4.3 — Test API Connection automatico

  • Rimosso pulsante manuale
  • Rimosse righe last status/message/check
  • Stati: verde OK, rosso fallito, giallo irraggiungibile

v0.5.0 — Capacity System per Asset Definition GLPI 11

  • Rimpiazzata tabella custom glpi_plugin_urbackup_assettypes con Capacities native
  • Computer: legacy (sempre attivo, fuori capacities)
  • Asset Definition: tab sempre registrato, capacità gestisce cleanup
  • isItemtypeEnabled() = true per tutti gli Asset
  • onClassBootstrap() rimosso (poi reintrodotto in v0.5.1)
  • File: src/Capacity/UrBackupCapacity.php
  • Migration: auto-enable capacità su tutte le definizioni + drop is_default

v0.5.1 — Fix registrazione tab su Asset Definition nuovi

  • Bug: Tab UrBackup non appariva su Asset Definition nuovi (es. testnas)
  • Causa: getDefinitions() tornava 0 in plugin_init_urbackup() perché bootDefinitions() gira dopo (priority 100 vs 110)
  • Fix: Spostata registrazione tab in UrBackupCapacity::onClassBootstrap() — chiamata durante bootDefinitions() per ogni definizione con capacità abilitata
  • Rimossi debug logging superflui da setup.php e AssetTab.php