Bibliothèques

Le code “actif” de l’application, c’est à dire celui qui enchaîne les actions, est décrit dans les bibliothèques (librairies). En général, on retrouve une librairie par table, mais ce n’est pas systématique.

Les librairies héritent systématiquement de PpciLibrary, et contiennent en général les fonction suivantes :

  • list : affichage de la liste des enregistrements de la table
  • display : affichage du détail d’un enregistrement
  • change : affichage de la page de modification
  • write : écriture en base de données
  • delete : suppression de l’enregistrement.

Selon le cas, write et delete renvoient soit vers display, soit vers list et, en cas de problème, la fonction recharge la page change.

Dans certains cas, notamment quand les fonctions peuvent être appelées depuis des endroits différents dans l’application, les fonctions renvoient simplement la valeur true ou  false, et c’est le contrôleur qui se chargera d’appeler la fonction d’affichage, notamment après les opérations d’enregistrement.

La classe PpciLibrary

Elle gère l’accès direct à quelques services :

  • $this->message : affichage de messages à l’écran et enregistrement de messages techniques dans Syslog
  • $this->appConfig : accès aux paramètres de configuration stockés dans app/Config/App.php ou mis à jour par l’intermédiaire de .env
  • $this->log : enregistrement de traces dans la table gacl.log de la base de données.

Pour qu’elle fonctionne correctement, elle doit être initialisée ainsi : 

function __construct()
    {
        parent::__construct();
        $this->dataclass = new ModelsBorrower();
        $this->keyName = "borrower_id";
        if (isset($_REQUEST[$this->keyName])) {
            $this->id = $_REQUEST[$this->keyName];
        }
    }

$this->dataclass doit être une classe héritée de PpciModel

Elle dispose également de fonctions génériques, qui permettent de simplifier l’écriture des classes dans l’application. Celles-ci déclenchent systématiquement une exception PpciException en cas d’erreur rencontrée.

Lecture d’un enregistrement et affichage de la page pour la modification ou l’affichage

function dataRead($id, $smartyPage, $idParent = 0)

La fonction appelle $this->dataclass->read ($id, true, $idParent), affecte le tableau de données lu à la variable $data, puis déclenche l’affichage de la page $smartyPage. Elle retourne le tableau $data à la fonction appelante.

Écriture d’un enregistrement

function dataWrite(array $data, bool $isPartOfTransaction = false)

Écrit les données $data dans la table gérée par $this->dataclass (appel à la fonction write). Si l’indicateur de transaction n’est pas activé, un message informant de l’exécution de la commande est envoyé, et une trace est enregistrée dans la table log.

Suppression d’un enregistrement

function dataDelete($id, bool $isPartOfTransaction = false)

Supprime l’enregistrement identifié par $id, et affiche un message pour informer de la réussite de l’opération si l’indicateur de transaction n’est pas activé.

Traitement des transactions

Dans le cas où plusieurs écritures concommittantes sont nécessaires, il est possible d’activer les transactions, gérées par CodeIgniter, avec les commandes suivantes :

try {
   /*
    * Start transaction
    */
   $db = $this->dataclass->db;
   $db->transBegin();
   (...)
   $db->transCommit();
   } catch (PpciException $ie) {
     if ($db->transEnabled) {
     $db->transRollback();
     (...)
   }