Man Tecnico:Gestione moduli

From CDG Wiki
Jump to navigation Jump to search

Analisi dei requisiti

Il core costituisce le funzionalità di base dell’applicativo garantendo tutti gli strumenti per la gestione dell’azienda. Prevede inoltre una gestione dinamica che permette di estenderne le funzionalità con l’aggiunta di componenti aggiuntivi chiamati moduli. La gestione avviene in modo che i moduli siano trasparenti al core nonostante questi ne possano sfruttare gli strumenti e che non sia necessaria nessuna operazione particolare per l’integrazione se non una semplice configurazione lato codice all’interno del modulo stesso. In questo modo le funzionalità dell’applicativo possono essere dimensionate in base al contesto e al momento storico, grazie alla possibilità di attivare/disattivare i moduli in diversi anni di budget.

Il core, quindi, deve essere in grado di riconoscere e caricare correttamente tutti i moduli, senza che ne dipenda e che sia vincolato nel funzionamento da nessuno di essi.

I moduli, per essere riconosciuti tali dal core, e saranno contenuti in una directory (o sottodirectory) all’interno della directory “moduli” (percorso parametrizzato nel core) e presentare i seguenti file con le relative configurazioni:

  • mod_config.xml: file XML per definire le proprietà dei moduli
    • Un identificativo univoco del modulo
    • Ordine di caricamento (l’ordine di visualizzazione nel menù)
    • Eventuale prefisso per le tabelle del database
    • Dipendenze da altri moduli
    • Periodo di validità, espresso mediante la coppia anno_inizio/anno_fine, definito come regola generale per tutte le distribuzioni o personalizzato per ogni distribuzione
  • common.php: file che viene eseguito dal core ed utilizzato per estenderne la gestione degli utenti e dei loro privilegi nonché la visualizzazione delle voci di menu del modulo.

Tutto il codice relativo all’implementazione delle funzionalità del singolo modulo si trova all’interno della directory che conterrà le sottodirectory:

  • Classes: directory contententi le classi del modulo che per convenzione vengono nominate in NomeModuloNomeClasse
  • Contents: codice applicativo del modulo
  • Theme
    • Css: css specifici del modulo
    • Images: immagini del modulo
    • Tpl: template del modulo

Il nome delle directory appena descritte è parametrizzato nel file /conf/common.php.

La gestione dei moduli deve prevedere un sistema di sicurezza che impedisca agli utenti non abilitati di raggiungere le funzionalità non previste, tramite quanto definito nel common.php. Dovrà quindi garantire un meccanismo automatico di verifica degli URL che permetta solo agli utenti autorizzati di accedere alla pagina.

Descrizione delle funzionalità

Per migliorare il livello di sicurezza offerto dal framework si vuol replicare, anche per i moduli, i livelli di sicurezza già applicati nel core dell’applicativo: redirect automatico verso l’esterno (ad esempio, verso l’homepage) nel caso in cui l’utente provasse ad accedere ad una pagina per cui non ha i privilegi.

Il raggiungimento di questo obiettivo prevede:

  • Individuazione della pagina corrente di navigazione e conseguente individuazione del modulo a cui appartiene la pagina;
  • Verifica dei privilegi dell’utente con attuazione delle azioni necessarie
    • Selezione della voce di menù corrispondente alla pagina consultata dall’utente
    • Respingimento alla homepage, nel caso in cui l’utente non disponga dei permessi necessari per consultare quella determinata sezione
  • Riconoscimento della pagina corrente di navigazione e conseguente caricamento dei CSS del modulo di appartenenza

Scelte implementative

La gestione dei moduli viene implementata a livello di front controller utilizzando gli eventi del framework, tramite il file conf/common.php e conf/contents/common.php in cui vengono definiti i moduli e le regole di routing. Viene implementata inoltre la classe specifica "Modulo" per l'implementazione di attributi e metodi specifici.

Modello Classi

class Modulo

Rappresenta un modulo applicativo.

  • Attributi
  • public $id;
  • public $dir_path;
  • public $site_path;
  • public $ordine_caricamento;
  • public $anno_inizio;
  • public $anno_fine;
  • public $dipendenze_moduli = array();
  • public $hide;
  • public $module_theme_dir;
  • public $module_theme_path;
  • public $module_theme_full_path;
  • public $module_css_path;
  • public $module_css_dir;
  • Metodi
  • public function __construct($directory)
Costruttore. Vengono valorizzati gli attributi in base ai file trovati nella directory del modulo passata come parametro.
  • public static function getActiveModulesFromDisk($anno_selezionato = null)
Restituisce contenente un array moduli attivi in un anno di budget.
  • public static function getCurrentModule($path = null, AnnoBudget $anno_selezionato = null)
Restituisce l'oggetto Modulo identificato dal percorso della pagina.
  • public static function getCurrentModuleMenuItem($url, $privilegesCheck=true)
Restituisce il percorso di menu corrente per l'url passata come parametro.
  • public static function initializeUniqueClass($class, $key, $subkey)
Settaggio della class univoca rispettando il formato "menu-key" o "menu-key-subkey" a seconda del caso.
  • public static function matchWithPath($menu_element, $path, $key, $subkey = null)
Verifica corrispondenza http request con voce di menu
  • public static function parseModuleUrl($url)
Restituisce l'url passata come parametro suddivisa nei suoi componenti.
  • public static function checkActions($menu_element, $path)
Viene verificato che un percorso corrisponda ad una action definita per il menu.
  • public static function loadCss($currentModule)
Caricamento dei file css di un modulo specifico.



Torna all'Indice del Manuale Tecnico