AJOUTER DES PAGES ET DES TEMPLATES

I Créer une nouvelle page

1) Déclarer la nouvelle page dans le registre

•	Déclarer la nouvelle page dans profiles/defaut/pages

•	La page  est liée à une arborescence (on pourra par exemple créer la page profiles/defaut/pages/bib/catalogue/imports/choix qui correspond à la page bib/catalogue/imports/choix)

Chaque page contient 4 rubriques principales :
1. _droits : les droits d'accès à la page
2. _page : le script PHP à appeler
3. _template : les templates qui seront utilisés par le script en question
4. _parametres : les paramètres qui pourront être passés au script et aux templates

2) Tirer parti de l'héritage

Pour chacune de ces rubriques (sauf _page), WaterBear tire parti de l'héritage. C'est à dire qu'une information définie à un niveau de l'arborescence sera valable pour tous ses descendants. Inversement, une information définie au niveau de l'enfant écrasera celle définie au niveau du parent.

Attention, ce mécanisme de fusion ne marche qu'au premier niveau
Par exemple si on a défini :
profiles/defaut/pages/bib/admin/_parametres/V1 = toto
profiles/defaut/pages/bib/admin/objets/_parametres/V2 = tutu
alors les valeur V1 et V2 seront définies au niveau de profiles/defaut/pages/bib/admin/objets
En revanche, si on on définit
profiles/defaut/pages/bib/admin/_parametres/V1/V2 = tutu
profiles/defaut/pages/bib/admin/objets/_parametres/V1/V3 = tutu
alors l'ancienne valeur V1/V2 (toto) sera écrasée

Exemple 1 : On peut ne déclarer qu'une seule fois le "template squelette" pour toutes les pages de l'administration, car le squelette est le même pour toutes ces pages. On déclarera donc :
profiles/defaut/pages/bib/admin/_template/tmpl_squelette = bib/admin.php

Cette déclaration sera valable pour toutes les pages enfants de ce noeud. Néanmoins, si un des enfants souhaitait utiliser un autres squelette, il pourrait redéclarer /_template/tmpl_squelette 

Exemple 2 : De la même manière, au niveau des paramètres, on pourra déclarer les éléments d'une barre d'outils qui sera présente sur plusieurs pages, ou attribuer des droits pour toutes les pages de l'administration en ne faisant qu'une seule fois la déclaration. Mais on a toujours la possibilité de remplacer cette déclaration au niveau des noeuds enfants.

Cas de _page : _page fonctionne différemment, les différentes déclarations de _page se cumulent. Elles ne se remplacent pas.
Normalement quand on appelle une page, on ne devrait lancer qu'un seul script. Néanmoins, il peut être utile de mutualiser une partie du code entre les différentes pages d'un même module. Par exemple pour définir des vraiables, faire des include...

Donc si on définit _page à un niveau parent et à nouveau à un niveau enfant, les deux scripts seront appelés successivement.

3) Créer le script de page

Il suffit de créer un script dans include/pages.
A la fin du script, il faut placer la ligne :
include ($GLOBALS["tvs_global"]["conf"]["ini"]["include_path"]."/scripts/affiche_page.php");
afin de pouvoir appeler les scripts suivants (définis dans les enfants).

Il est nécessaire que le dernier script appelé affiche le template du squelette.

Lorsqu'un script n'a aucun traitement à effectuer, mais doit simplement appeler le template squelette, on peut appeler le script void.php 

4) Afficher les templates

Dans le scripts, on peut accéder aux informations paramétrées dans le registre via les variables globales :
$GLOBALS["affiche_page"]["parametres"] => pour les données définies dans _parametres
$GLOBALS["affiche_page"]["template"] => pour les données définies dans _template

Pour afficher un template, il suffit d'appeler la fonction :
affiche_template ($nom_du_template, $parametres);
> $nom_du_template est le chemin du fichier template à partir de la racine des templates (include/templates)
   Comme généralement les templates sont paramétrés dans le registre, on aura souvent qqchse du genre 
   $GLOBALS["affiche_page"]["template"]["tmpl_barre_menus1"]
> $parametres : un tableau associatif permettant de passer des variables au template. Les variables seront accessibles      directement par leur nom. Par exemple si on passe array("toto"=>"tutu") ou pourra faire dans le template print ($toto) et non pas print ($parametres["toto"])

4) Les templates

Le template est un fichier HTML, CSS ou javascript pouvant contenir des petits scripts PHP

Le template peut contenir d'autres templates

Il peut accéder directement aux variables transmises depuis la fonction affiche_template()

Il peut également accéder aux varaibles globales (et en particulier à $GLOBALS["affiche_page"]["template"] pour intégrer d'autres templates et $GLOBALS["affiche_page"]["parametres"] )

5) Personnalisation

Il est possible de personnaliser les paramètres d'une page en fonction de l'utilisateur ou du poste (ou du groupe d'utilisateurs ou du groupe de postes).

Pour cela, on peut placer un noeud _profiles dans le noeud _parametres.
Le noeud _profiles contiendra un sous-noeud pour chaque profile que l'on voudra définir. On peut créer des profiles liés aux utilisateurs et aux postes ou des profiles indépendants (que l'on changera manuellement).

Un profile à la forme suivante : UTILISATEUR:POSTE sachant que ces deux éléments peuvent décrire soit un utilisateur ou un poste particulier, soit des groupes. Dans le pemier cas, on préfixe par "P", dans le deuxième par "G".
Ainsi : 
Ptoto:Gtutu désigne l'utilisateur toto sur un poste du groupe tutu
Gtata:Gtutu : un utilisateur du groupe tata sur un poste du groupe tutu
Ptoto:Ptiti : l'utilisateur toto sur le poste titi
Ptoto:* : l'utilisateur toto sur n'importe quel poste

Par ailleurs, on peut définir des profiles libres, qui pourront être appliqués manuellement.

Il y a une hiérarchie des profiles. En gros, du plus particulier au plus large. Ainsi, pour un même noeud, on pourra définir un profil pour un groupe d'utilisateurs et un autre pour un utilisateur particulier du même groupe : c'est ce dernier qui sera utilisé. Dans l'ordre (du moins prioritaire au plus prioritaire) :
*:*, *:G$Gposte, G$Guser:*, G$Guser:G$Gposte, *:P$poste, P$user:*, G$Guser:P$poste, P$user:G$Gposte, P$user:P$poste

L'intérieur du noeud _profiles/XXXX/ est le même que celui du noeud _parametres. Cependant, il n'est pas nécessaire de dédoubler totalement ces 2 noeuds. Leurs contenus seront fusionnés. On ne décalrera donc dans le noeud du profile que les variables spécifiques. Si la même variable est définie dans _parametres et dans _profiles/XXX, c'est cette dernière qui l'emporte.

6) Les droits

Il est possible d'autoriser l'accès à certaines pages ou à certaines actions sur une page (ou un webService lié à une page), et ce pour certains utilisateurs, pour certains postes ou pour certains groupes.

Pour cela, il aut créer un noeud _droits sous le noeud de la page. Le noeud _droits contiendra un sous noeud pour chaque profile. Ces profiles ont la même syntaxe que pour la personnalisation. Par exemple, Ptoto:Gtutu désignera des droits assignés à l'utilisateur toto sur les postes du groupe tutu.

Les droits sur les pages

Pour assigner des droits sur une page, il suffit de donner la valeur 0 (interdit) ou 1 (autorisé) au noeud du profil. Par exemple :
+ _droits
	+ *:* => 0
	+ Ptutu:Gtoto => 1

signifie qu'on interdit l'accès à tout le monde, sauf à l'utilisateur tutu quand il est sur un poste du groupe toto

Les droits liés aux variables

On peut assigner des droits plus précis à l'intérieur d'une page, en fonction de la valeur prise par certaines variables. C'est surtout utile pour les pages de type WebService.

Par exemple, on peut autoriser l'accès à une page, SAUF si la variable $operation == "modifier". Cela permet par exemple d'autoriser l'accès en consultation, mais pas en modification...
ATTENTION 1 : Il ne s'afit que des varaibles passées en paramètre au script, (accessibles via la variable $_REQUEST)
ATTENTION 2 : Pour l'instant, on ne peut pas croiser les varaibles. Par exemple, on peut interdire l'accès à une page si $operation == "modifier" ou $type == "CD", mais on ne peut pas l'interdire uniquement si les 2 conditions sont remplies.

Pour Interdire l'accès à une page si la variable $operation == "toto", sauf si on se trouve sur e poste p123, il faut paramétrer le registre comme suit :
+ _droits
     + _variables
          + operation -----------------> nom de la variable
               + toto --------------------> valeur de la variable
                    + *:* => 0 ---------> autorisation à attribuer pour chaque profile
                    + *:Pp123 => 1

Héritage et hiérarchie des droits

Il n'est pas nécessaire d'attribuer des droits à chaque page. WaterBear utilise l'héritage des pages. Un droit attribué au niveau du parent sera automatiquement propagé à tous ses enfants. En revanche, il peut être écrasé (redéfini) au niveau d'un noeud enfant.

Par ailleurs, au niveau d'une page, les droits liés aux variables l'emportent sur les droits simplement liés à la page.