Librairie PHP
Librairie PHP
Introduction
La lib Voozanoo est en ensemble d’objets PHP qui vont permettre de manipuler les entitées telles que les projets, questionnaires, question, …
Règles de programmation
TODO : à mettre à jour
Syntaxe
Exemple d’un code Voozanoo4:
<?php
$Account->ProjectCount();
$Account->Project['vaccilab']->Table['patient']->Select();
$Account->Project['vaccilab']->Table['patient']->RealName();
$Account->Project['vaccilab']->Table['patient']->Fields['nom']->type;
$Account->Project['vaccilab']->Table['patient']->Where('nom=Seb')->Table['bilan']->where('date=2010-02-24');
<?php
$sProjectName = "vaccilab";
$sTableName = "patient";
$Account->Project[$sProjectName]->Table[$sTableName]->Select();
//Récupération du dernier bilan d'un patient
$object = $Account->Project[$sProjectName]->Table[$sTableName]->Where($iRecordId);
$object->ShowOnForm();
$object2 = $Table['bilan']->last();
$object2->ShowOnForm();
Stockage des objets
Tous les objets seront définis par XML stockés en DB. Les ressources statiques (XSD, XSLT, TPL, SQL, …) partagées par tous les comptes et tous les projets seront elles stockées sur le disque.
Cohérence des objets
Description du cas: plusieurs objets décrits sous forme de XML, utilisent une variable X, cette variable X est supprimée par l’utilisateur. Comment trouver ces objets rapidement? Test de la cohérence des données en utilisant les XSD. Les XML (quelque soit leur structure) seront transformés (xslt) en XML de même structure pour pouvoir les valider avec le même XSD.
Nom des tables de la base
Les noms des différentes tables présentes dans Voozanoo4 comportent très souvent des fragments/portions de caractères à remplacer par le prefix du projet (ou le prefix du varset utilisé) :
- xxxx_pj_group, xxxx_pj_resource …
- xxxx_nn_data, xxxx_nn_data_group …
Afin d’éviter la ré-écriture de cette logique à différents endroits de
la librarie une classe a été créée pour centraliser les noms des tables
et la logique de “parsing” : Core_Library_TName
(~TableName)
Cette classe possède de nombreuses méthodes statiques permettant la
récupération du nom de table à utiliser. Les méthodes liées aux tables
utilisant le prefix du projet (sigl
, ndmt
) acceptent un paramètre de
type Core_Library_Project, il sera utilisé pour le parsing de la
table. Si ce dernier n’est pas fourni la classe utilisera le projet
courant (Core_Library_Account::getInstance()->GetCurrentProject()
).
<?php
Core_Library_TName::GetSysProject(); //retournera "sys_project"
Core_Library_TName::GetPjGroup(); //retournera "ndmt_pj_group" si le projet courant est Neodemat
Core_Library_TName::GetPjGroup( $oProjectSigl ); //retournera "sigl_pj_group", même si le projet courant est Neodemat
Tokens Simples (Jetons)
Introduction
La notion de Token de Voozanoo4 se rapproche de la notion de CDataContainer présente dans Voo3 : La possibilité de stocker à un instant T un ensemble de variables (Context) ayant une date de péremption (optionnel) et liées à une session php précise (optionnel).
La seule façon de récupérer les informations relatives au Token est de connaitre l’identifiant du Token. Les données qui lui sont liées de ne peuvent pas être altérées par l’utilisateur.
Fonctionnement
La scénario type serait de placer un lien permettant de télécharger un PDF, les paramètres necéssaires à sa génération fournis en GET :
<a href="export/index/download/id/18/type/pdf/mode/full/foo/bar">Télécharger</a>
Un problème majeur survient : la possibilité que l’utilisateur manipule ces données (en remplacement pdf par html ou de l’id etc…). C’est là que l’utilisation du Token s’avère utile :
<?php
$oToken = new Core_Library_Token(array(
//Variable du context
'context' => array(
'id' => 18
'type' => 'pdf',
'mode' => 'full',
'foo' => 'bar'
),
//Expiration du token au bout d'un jour
'expiration_time' => 1
));
//$sTokenIdentifier contiendra l'identifiant auto-généré du token (8 caractères), exemple "80D0DF5F"
$sTokenIdentifier = Core_Library_Account::getInstance()
->getCurrentProject()
->TokenManager()
->Create( $oToken );
Le lien sera alors placé :
<a href="export/index/download/t/80D0DF5F">Télécharger</a>
Le code coté serveur sera en charge de la récupération du paramètre ‘t’ pour instancier un Token et récupérer les informations relatives au Token :
<?php
$oToken = Core_Library_Account::getInstance()
->getCurrentProject()
->TokenManager()
->GetAvailable( $this->GetRequest()->GetParam('t') );
$oToken->GetContext(); //Contient un tableau représentant les variables données lors de la création du token
Les Tokens de connexion
Introduction
Le Token de connexion (Core_Library_Token_Conn
) à été créé pour
répondre au besoin d’une authentification temporaire et limitative
(accès à certaines ressources Acl et sur certains Varsets) sans pour
autant créer un “vrai” utilisateur.
Il est par conséquent possible de créer un Token de connexion communicable à l’utilisateur par email (dans un lien) afin que ce dernier vienne changer son mot de passe.
Fonctionnement
La création d’une Token de connexion est identique à celle d’un Token simple, il réclame juste :
- Obligatoirement une option ‘acl_resources’ : Un tableau représentant les ressources Acl autorisées
- Obligatoirement une option ‘user’ : L’id de l’utilisateur créateur du token
- Facultativement une option ‘group_mode’ : Un tableau récapitulant ses droits vis à vis d’un groupe parent et par rapport à des Varsets