Enchaînement lors de l’appel d’une page

Filtres

Les filtres sont déclarés dans le fichier app/Config/Filters.php.

csrf : Filtre CodeIgniter

Vérification du jeton CSRF, présent dans tous les formulaires Smarty. Le filtre doit être inactivé pour les appels des API, par exemple ainsi :

'csrf' => ['except' => [
                'apiv1sampleWrite',
                'apiv1sampleDelete',
                'apiv1movementWrite',
                'apiv1sampleList'
            ]],

invalidChar : Filtre CodeIgniter

Vérifie l’encodage des caractères transmis depuis le navigateur

startCall : Filtre PPCI

Lance PpciInit:init() :

  • Avant le démarrage de la session : exécute le script App/Libraries/BeforeSession::index(), pour charger au besoin des classes avant le démarrage de la session. En principe, c’est obsolète pour CodeIgniter.
  • démarre la session
  • helper(‘ppci’) : charge les fonctions génériques de PPCI
  • initialise les messages qui ont été transmis avant une redirection
  • met à jour la locale et le fichier des traductions
  • initialise la connexion à la base de données
  • purge les logs (table gacl.log). Les logs de plus d’un an sont supprimées (paramètres app.logDuration)

dbversionCheck : Filtre PPCI

Vérifie la version de la base de données (table dbversion). Si la version déclarée dans la variable app.dbversion n’est pas présente dans la table, , le filtre renvoie vers la page d’accueil (appel de la fonction defaultPage()) et affiche un message d’erreur. Le filtre devrait être désactivé pour les appels des API et pour les scripts lancés en ligne de commande.

versionCheck: Filtre PPCI

Filtre optionnel, qui va comparer la version déclarée dans la variable app.version à celle qui est connue comme version courante dans le dépôt Github ou Gitlab. Pour que le filtre fonctionne, il faut que la variable app.checkRelease soit positionnée à 1, et que le tableau app.APPLI_release soit correctement configuré.

rights : Filtre PPCI

  • recherche les droits nécessaires dans :
    • App/Config/Rights
    • Ppci/Config/Rights
  • s’il existe des droits demandés, le filtre vérifie si le login existe ou non. S’il n’existe pas, déclenche la procédure de connexion (Ppci/Libraries/Login->getLogin())
  • vérifie que l’utilisateur dispose des droits nécessaires

Admin : Filtre PPCI

  • recherche si le module appelé nécessite le droit admin dans Ppci/Config/Rights
  • en cas de module d’administration :
    • vérifie à quand remonte la dernière identification TOTP ou le dernier appel à un module d’administration
    • si la durée est > 10’ :
      • si le compte n’a pas activé le TOTP, affichage de l’écran de création du code TOTP
      • sinon déclenche la saisie du code TOTP

L’utilisation du TOTP est désactivable (non conseillé en production) avec le paramètre IdentificationConfig\disableTotpAdmin=1.
La durée de la session admin peut être modifiée avec le paramètre IdentificationConfig\adminSessionDuration=600. La durée est exprimée en secondes.

Appel du contrôleur

Les contrôleurs doivent hériter de Ppci/Controllers/PpciController, qui va récupérer depuis FlashData les variables $_GET, $_REQUEST, $_POST et $_SESSION["lastGet"].

Appel des librairies

Les contrôleurs font appel aux librairies, qui peuvent hériter de Ppci\Libraries\PpciLibrary. Cette classe propose :

  • des paramètres pré-positionnés :
    • protected PpciModel $dataClass; : classe permettant de manipuler les informations stockées dans une table
    • $this->message = service('MessagePpci'); : classe permettant d’afficher les messages à l’écran ou de les enregistrer dans les logs du serveur
    • $this->appConfig = config("App"); : paramètres généraux de l’application
    • $this->log = service("Log"); : enregistrement des actions dans la table gacl.log
  • des fonctions génériques pour manipuler les données :
    • dataRead($id, $smartyPage, $idParent = 0) : lit les informations d’un enregistrement dans la classe $dataClass, et génère la vue Smarty
    • dataWrite(array $data, bool $isPartOfTransaction = false) : écrit les informations dans la base de données
    • dataDelete($id, bool $isPartOfTransaction = false) : supprime un enregistrement

Les différentes vues

L’envoi d’informations au navigateur fait appel à des vues, chacune étant dédiée à un type d’informations (pages web, fichiers pdf, requêtes Ajax, fichiers binaires, etc.). Elles sont disponibles sous forme de services (décrits dans ppci/Config/Services.php), et sont physiquement stockées dans Ppci/Libraries/Views.

Le détail des vues peut être consulté ici.