Volet | ||
---|---|---|
| ||
Canal AnnuaireInstallation, paramétrage du canal du canal |
Sommaire | ||||||
---|---|---|---|---|---|---|
|
Configuration du canal
Le fichier de configuration
Vous pouvez télécharger ici l'exemple que nous allons détailler.
Les textes de la configuration
Bloc de code |
---|
Balise Wiki |
{panel:bgColor=#F8F7EF} h1. Canal Annuaire *Installation, paramétrage du canal du canal* \\ Auteur : Sébastien GAUDIN ([Université nancy 2|http://www.univ-nancy2.fr]) {panel} {toc:style=disc\|indent=20px\|minLevel=1} h1. Configuration du canal \\ h2. Le fichier de configuration \\ Vous pouvez [télécharger ici|./exemple/CAnnuaire.xml] l'exemple que nous allons détailler. h3. Les textes de la configuration \\ {code} <languages><varsOfText> <varOfText name="LOGIN" /> <varOfText name="NAME" /> <varOfText name="FIRST_NAME" /> <varOfText name="FORMATION" /> <varOfText name="MAIL" /> <varOfText name="COMPOSANTE" /> <varOfText name="DISCIPLINE" /> <varOfText name="STATUS" /> <varOfText name="RESPONSABILITY" /> <varOfText name="CAMPUS" /> <varOfText name="PHONE" /> <varOfText name="FAX" /> <varOfText name="ADDRESS" /> <varOfText name="PERSO_PAGE" /> <varOfText name="INTROPUBLIC" /> <varOfText name="NAME_ANNU_1" /> <varOfText name="NAME_ANNU_2" /> <varOfText name="NAME_ANNU_3" /> <varOfText name="NAME_ANNU_4" /> <varOfText name="NAME_ANNU_5" /> </varsOfText> <language langId="en_US" /> <language langId="fr_FR" /> </languages> {code} |
Tous
...
les
...
textes
...
utilisés
...
dans
...
ce
...
fichier
...
de
...
configuration
...
ne
...
doivent
...
pas
...
être
...
écrits
...
ici,
...
mais
...
dans
...
les
...
fichiers
...
de
...
langues
...
(répertoire
...
/properties/languages).
...
Vous
...
devez
...
déclarer
...
dans
...
ici
...
les
...
noms
...
des
...
variables
...
de
...
texte
...
que
...
vous
...
allez
...
utiliser
...
ainsi
...
que
...
les
...
langages
...
disponibles
...
(le
...
premier
...
précisé
...
est
...
le
...
langage
...
par
...
défaut
...
si
...
un
...
texte
...
n'existe
...
pas
...
dans
...
la
...
langue
...
spécifiée
...
par
...
l'utilisateur).
...
Dans
...
notre
...
exemple,
...
le
...
fichier
...
/properties/languages/config_fr_FR.properties
...
contient
...
par
...
exemple
...
:
...
ADDRESS
...
=
...
Adresse
...
INTROPUBLIC
...
=
...
Cet
...
annuaire
...
mentionne
...
les
...
personnes
...
ayant
...
accepté
...
d'y
...
figurer.
...
Les tables
Les tables permettent d'avoir
...
une
...
correspondance
...
entre
...
un
...
code
...
et
...
un
...
libellé.
...
Ces
...
tables
...
peuvent
...
être
...
de
...
3
...
types,
...
selon
...
la
...
provenance
...
des
...
valeurs :
Tables LOCALE
Bloc de code |
---|
: h4. Tables LOCALE \\ {code} <table name="listeCampus" type="static"> <item code="plg" value="PÔLE LORRAIN DE GESTION" fieldOrder="10" /> <item code="droit" value="CAMPUS CARNOT-RAVINELLE, DROIT, SCIENCES ECONOMIQUES ET AES" fieldOrder="1000" /> </table> {code} Les items de cette table sont décrits directement dans le fichier de configuration. L'ordre est spécifié selon la valeur de l'attribut |
Les items de cette table sont décrits directement dans le fichier de configuration. L'ordre est spécifié selon la valeur de l'attribut "fieldOrder",
...
par
...
défaut
...
c'est
...
dans
...
l'ordre
...
d'aparition
...
dans
...
le
...
fichier.
Tables XML
Bloc de code |
---|
h4. Tables XML \\ {code} <table name="listeStatuts" type="xml" file="statut.xml" /> {code} Les items de cette table se trouvent dans le ficher xml |
Les items de cette table se trouvent dans le ficher xml /prperties/xmlTables/statut.xml.
...
L'ordre
...
est
...
spécifié
...
selon
...
la
...
valeur
...
de
...
l'attribut
...
"fieldOrder",
...
par
...
défaut
...
c'est
...
dans
...
l'ordre
...
d'aparition
...
dans
...
le
...
fichier
...
:
Bloc de code |
---|
{code} <list name="listeStatuts"> <item code="PERS_ENS" value="Enseignant / Chercheur" /> <item code="PERS_ENSV" value="Enseignant vacataire" /> <item code="PERS_ATER" value="ATER / Moniteur / Lecteur" /> <item code="PERS_THES" value="Etudiant en thèse" /> <item code="PERS_EMP" value="Personnel ''IATOS/ITARF''" /> <item code="PERS_STAG" value="Stagiaire" /> <item code="PERS_RET" value="Personnel retraité" /> <item code="AUTRE" value="Autre" /> </list> |
Tables LDAP
Bloc de code |
---|
{code} h4. Tables LDAP \\ {code} <table name="listeComposantes" type="ldap" attrCode="cn" attrValue="description" fieldOrder="description" base="ou=Structures" scope="one" filter="objectclass=ClassComposante" url="ldap://ldap1.univ.fr:392/dc=univ,dc=fr ldap://ldap2.univ.fr:392/dc=univ,dc=fr" /> {code} |
Les
...
items
...
de
...
cette
...
table
...
sont
...
récupéré
...
par
...
la
...
requete
...
LDAP.
...
L'ordre
...
est
...
spécifié
...
selon
...
un
...
l'attribut
...
"fieldOrder",
...
par
...
défaut
...
c'est
...
dans
...
l'ordre
...
de
...
la
...
récupération.
...
Tables
...
SQL
Bloc de code |
---|
\\ {code} <table name="listeComposantes2" type="sql" bddType="JDBC" bindpass="loginDeConnexion" binddn="PassDeConnexion" attrCode="idComp" attrValue="descComp" fieldOrder="descComp" filter="(cond1='A') AND (cond2='true')" url="jdbc:oracle:thin:@//oracle.univ.fr:1521/BASE" driverClassName="oracle.jdbc.OracleDriver" tableName="nomDeLaTable" /> {code} |
Dans
...
l'attribut
...
"tableName",
...
il
...
est
...
possible
...
de
...
spécifier
...
plusieurs
...
tables
...
pour
...
faire
...
une
...
jointure.
...
Par
...
exemple
...
"Table1
...
A,
...
Table2
...
B".
...
Dans
...
ce
...
cas,
...
les
...
attributs
...
de
...
code,
...
valeur
...
et
...
tri
...
peuvent
...
utiliser
...
les
...
noms
...
logiques
...
des
...
tables
...
("A.idComp").
...
Si
...
vous
...
utilisez
...
un
...
pool
...
JNDI,
...
certains
...
attribut
...
ne
...
sont
...
plus
...
nécessaire
...
:
Bloc de code |
---|
} <table name="portalUser" type="sql" bddType="JNDI" url="NomDuPoolTomcat" tableName="nomDeLaTable" attrValue="descComp" attrCode="idComp" fieldOrder="descComp" filter="(cond1='A') AND (cond2='true')"/> |
Quel que soit le type de table utililsé, il est possible de lier les valeurs à celles d'une autre table. Pour cela, précisez l'attribut "tableLink" pour dire à quelle
Les annuaires
Bloc de code |
---|
{code} Quel que soit le type de table utililsé, il est possible de lier les valeurs à celles d'une autre table. Pour cela, précisez l'attribut "tableLink" pour dire à quelle h3. Les annuaires \\ {code} <directory name="rechercheIndividu" title="NAME_ANNU_1" intro="INTROPUBLIC" allowExport="true" > <server url="ldap://ldap1.univ.fr:392/dc=univ,dc=fr ldap://ldap2.univ.fr:392/dc=univ,dc=fr" /> ... </directory> {code} |
Un
...
annuaire
...
est
...
définit
...
par
...
le
...
tag
...
"directory"
...
Le
...
"name"
...
est
...
le
...
nom
...
de
...
l'annuaire.
...
Il
...
sert
...
à
...
savoir
...
sur
...
quel
...
annuaire
...
on
...
effectue
...
la
...
recherche
...
mais
...
c'est
...
aussi
...
le
...
nom
...
que
...
l'on
...
utilise
...
lors
...
d'un
...
appel
...
en
...
mode
...
servant.
...
Le
...
"title"
...
est
...
le
...
texte
...
qui
...
apparait
...
pour
...
que
...
l'utilisateur
...
choisisse
...
un
...
annuaire.
...
Si
...
l'attribut
...
"intro"
...
est
...
valué,
...
cette
...
phrase
...
apparaitra
...
sous
...
le
...
titre
...
de
...
l'annuaire
...
dans
...
le
...
formulaire.
...
Cela
...
permet
...
de
...
donner
...
une
...
description
...
sur
...
l'annuaire.
...
Si
...
"allowExport"
...
est
...
à
...
true,
...
il
...
sera
...
possible
...
pour
...
l'utilisateur
...
d'exporter
...
en
...
csv
...
le
...
résultat
...
de
...
ses
...
recherche
...
dans
...
cet
...
annuaire.
Les formulaires
Bloc de code |
---|
h4. Les formulaires \\ {code} <request base="ou=people" scope="sub" maxEntries="100" identifier="uid"> <elemOfRequest type="direct" filter="!(eduPersonPrimaryAffiliation=student)"/> <elemOfRequest varI18n="LOGIN" type="text" filter="uid=%s*" minChar="3" delStar="false"/> <elemOfRequest varI18n="NAME" type="text" filter="sn=%s*" minChar="4" delStar="false"/> <elemOfRequest varI18n="COMPOSANTE" type="listTable" table="listeComposantes" filter="composante=%c" /> <!-- < elemOfRequest varI18n="COMPOSANTE" type="textTable" table="listeComposantes" filter="composante=%c" searchValue="*%s*"/> <elemOfRequest varI18n="COMPOSANTE" type="radioTable" table="listeComposantes" filter="composante=%c" /> <elemOfRequest varI18n="COMPOSANTE" type="checkboxTable" table="listeComposantes" filter="composante=%c" /> <elemOfRequest varI18n="COMPOSANTE" type="multiListTable" table="listeComposantes" filter="n2composante=%c" /> <elemOfRequest varI18n="COMPOSANTE" type="subTable" table="listeFormations" filter="(n2composante=%cm)(n2formation=%cc)" /> --> </request> {code} |
Dans
...
le
...
tag
...
"request"
...
il
...
faut
...
positionner
...
tous
...
les
...
éléments
...
qui
...
constitueront
...
le
...
formulaire.
...
Ces
...
éléments
...
sont
...
des
...
"elemOfRequest".
...
Le
...
libellé
...
du
...
champ
...
est
...
indiqué
...
dans
...
l'attribut
...
"varI18n",
...
il
...
s'agit
...
du
...
nom
...
de
...
la
...
variable
...
de
...
texte
...
à
...
utiliser.
...
Il
...
est
...
possible
...
de
...
limiter
...
la
...
saisie
...
de
...
l'utilisateur
...
en
...
donnant
...
un
...
nombre
...
minimum
...
de
...
caractères
...
dans
...
la
...
saisie
...
d'un
...
champs
...
texte
...
(minChar)
...
et
...
de
...
supprimer
...
automatiquement
...
le
...
caractère
...
*
...
(delstar).
...
Il
...
en
...
existe
...
de
...
plusieurs
...
types :
- direct : le filtre est automatiquement appliqué et est directement spécifié dans le l'attribut "filter".
- text : Ceci va afficher une zone de saisie textuelle. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%s".
- listTable : Ceci va afficher une liste déroulante dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c".
- texteTable : Ceci va afficher une zone de saisie textuelle. L'utilisateur va pouvoir saisir une chaine de caractères pour retrouver des valeurs (pas les codes) des items d'une table déclarée. Le filtre engendré est précisé dans l'attribut "filter" et est répété pour chaque réponse correspondant à la saisie utilisateur avec un OU. Le code de chaque réponse sera positionné à la placedu %c. Les réponses convenant à la saisie sont recherchée dansles valeurs de la table selon le masque "searchValue". Le %sreprésente la partie que l'utilisateur a saisi.
- radioTable : Ceci va afficher une liste à puce dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c".
- checkboxTable : Ceci va afficher une liste de cases à cocher dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c".
- multiListTable : Ceci va afficher une liste à sélection multiple dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c".
- subTable : Ce type de champ crée deux listes déroulantes. L'une déterminant les valeurs de l'autre. Le filtre engendré est précisé dans l'attribut "filter" et le code la table maitre se positionnera à la place du "%cm" et le code de la table fille se positionnera à la place de l'attribut %cc. Si vous utilisez ce type de table, vous pouvrez utiliser l'attribut allowAllSubValues qui, à "true", permet de sélectionner "toutes les valeurs de la seconde liste".
Les fiches
Bloc de code |
---|
: * direct : le filtre est automatiquement appliqué et est directement spécifié dans le l'attribut "filter". * text : Ceci va afficher une zone de saisie textuelle. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%s". * listTable : Ceci va afficher une liste déroulante dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c". * texteTable : Ceci va afficher une zone de saisie textuelle. L'utilisateur va pouvoir saisir une chaine de caractères pour retrouver des valeurs (pas les codes) des items d'une table déclarée. Le filtre engendré est précisé dans l'attribut "filter" et est répété pour chaque réponse correspondant à la saisie utilisateur avec un OU. Le code de chaque réponse sera positionné à la placedu %c. Les réponses convenant à la saisie sont recherchée dansles valeurs de la table selon le masque "searchValue". Le %sreprésente la partie que l'utilisateur a saisi. * radioTable : Ceci va afficher une liste à puce dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c". * checkboxTable : Ceci va afficher une liste de cases à cocher dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c". * multiListTable : Ceci va afficher une liste à sélection multiple dont les valeurs sont prises dans une des tables déclarée. Le filtre engendré est précisé dans l'attribut "filter" et la saisie utilisateur se positionnera à la place du "%c". * subTable : Ce type de champ crée deux listes déroulantes. L'une déterminant les valeurs de l'autre. Le filtre engendré est précisé dans l'attribut "filter" et le code la table maitre se positionnera à la place du "%cm" et le code de la table fille se positionnera à la place de l'attribut %cc. Si vous utilisez ce type de table, vous pouvrez utiliser l'attribut allowAllSubValues qui, à "true", permet de sélectionner "toutes les valeurs de la seconde liste". h4. Les fiches \\ {code} <card maxCard="1"> ... </card> {code} |
Sur
...
le
...
tag
...
"card"
...
il
...
faut
...
préciser
...
l'attribut
...
"maxcard"
...
pour
...
limitter
...
le
...
nombre
...
de
...
fiches
...
à
...
l'écran
...
avant
...
de
...
passer
...
en
...
mode
...
tableau.
Bloc de code |
---|
{code} <sort order="ascending"> <sortOn attribute="sn" /> <sortOn attribute="cn" /> </sort> {code} |
Vous
...
pouvez
...
préciser
...
l'ordre
...
d'affichage
...
des
...
résultats
...
selon
...
un
...
ou
...
plusieurs
...
atributs
...
de
...
la
...
personne.
Bloc de code |
---|
{code} <line varI18n="LOGIN" visibility="list" linkType="toCard"> ... </line> <line varI18n="MAIL" visibility="card" linkType="mail" mailClass="org.esupportail.portal.channels.CAnnuaire.config.custom.CustomMail"> ... </line> <line varI18n="COMPOSANTE" visibility="card"> ... </line> <line varI18n="CAMPUS" linkType="external" externalLink="http://www.univ.fr/presentation/campus/%c.html?depuis_id=99"> ... </line> <line varI18n="ADDRESS" visibility="list"> ... </line> <line varI18n="PERSO_PAGE" linkType="attribute"> ... </line> {code} |
Une
...
ligne
...
de
...
fiche
...
doit
...
obligatoirement
...
posséder
...
un
...
libellé
...
("varI18n").
...
Une
...
ligne
...
peut
...
avoir
...
3
...
types
...
de
...
visibilité
...
(quelque
...
soit
...
le
...
type,
...
l'attribut
...
est
...
récupérable
...
en
...
mode
...
servant
...
et
...
en
...
export)
...
:
- list : cet attribut sera visibile en mode tableau et en mode fiche.
- card : cet attribut sera visible uniquement en mode fiche (mode par défaut).
- none : cet attribut ne sera pas visible dans le canal.
Une ligne peut être cliquable. Pour cela, il faut préciser le type de lien ("linkType") :
- toCard : permet de passer du mode tableau au mode fiche.
- external : permet d'acceder à un site externe. La valeur de l'attribut est placée à la place du %c.
- attribute : le lien est la valeur de l'attribut
- mail : il s'agit d'un mail cliquable. La classe de personnalisation des lien doit être renseignée dans l'attribut "mailClass". La classe par défaut teste si le canal est déjà en mode servant ou en mode anonyme. Dans l'un de ces 2 cas, c'est un lien "mailto" qui est positionné, sinon c'est le canal "mailTo" qui est appellé en mode servant.
Bloc de code <line varI18n="LOGIN" visibility="list"linkType="toCard">
...
<attributeLine attribute="uid" type="direct" />
...
</line>
...
<line varI18n="NAME" visibility="list" fieldConnection=", ">
...
<attributeLine attribute="sn" type="direct" />
...
<attributeLine attribute="givenname" type="direct" /> </line>
...
<line varI18n="STATUS" visibility="list">
...
<attributeLine attribute="status" type="table" linkTable="code" table="listeStatuts" />
...
</line>
...
Une
...
ligne
...
peut
...
avoir
...
un
...
ou
...
plusieurs
...
attributs
...
concaténés.
...
Vous
...
devez
...
donc
...
décrire
...
les
...
attributs
...
visibles
...
par
...
ligne.
...
Dans
...
le
...
cas
...
où
...
une
...
ligne
...
contient
...
plusieurs
...
attributs,
...
fous
...
pouvez
...
spécifier
...
une
...
expression
...
de
...
séparation
...
de
...
ces
...
champs.
...
Dans
...
l'éxemple
...
ci-dessus,
...
en
...
positionnant
...
fieldConnection
...
à",
...
",
...
chaque
...
valeur
...
des
...
attributs
...
à
...
récupérés
...
seront
...
séparées
...
par
...
une
...
",".
...
Si
...
le
...
champs
...
n'est
...
pas
...
valué,
...
le
...
séparateur
...
est
...
le
...
retour
...
à
...
la
...
ligne.
...
Un
...
"attributeLine"
...
doit
...
obligatoirement
...
avoir
...
un
...
"attribute"
...
précisé.
...
Il
...
peut
...
être
...
de
...
2
...
types
...
:
- direct : la valeur à afficher est tirée directement du LDAP
- table : la valeur à afficher provient d'une table déclarée.
Si paramètre wrapToAscii permet de transformer la saisie utilisateur en ascii (élimination des caractères accentués).
La classe de customMail
Dans le cas d'un champ de type "mail", vous pouvez paramétrer le type de lien. La classe "ACustomMail" a pour rôle de tester le déploiement du canal mailTo. Si le canal est déployé correctement, la classe fait appel à la méthode getUrlChoose, sinon, c'est automatiquement la méthode getUrlMailToLink qui est invoquée.
Vous devez donc créer un classe qui implémente cette classe abstraite (dans le répertoire "custom") et contenant les 3 méthodes :
getUrlChoose
C'est dans cette méthode que vous écrivez l'algo de choix entre un lien mailto ou l'appel au canal. Vous disposez alors d'un certains nombre de paramètres :
- boolean servantActive : true si le canal annuaire est déjà en mode servant
- boolean guestMode : true si le canal annuaire fonctionne en mode anonyme
- String attributeName : nom de l'attribut LDAP contenant le mail
- String idPeople : identifiant de la personne
- String mailAddress : adresse mail récupérée de LDAP
Cette méthode doit retourner un entier : LINK_MAIL_TO pour lancer la méthode getUrlMailToLink() ou CHANNEL_MAIL_TO pour lancer getUrlMailToChannel();
getUrlMailToLink
Cette méthode retourne un lien de type mailto. Les paramètres disponibles sont :
- boolean servantActive
- boolean guestMode
- String mailAddress
getUrlMailToChannel
Cette méthode retourne un lien vers le canal mailto. Les paramètres sont :
- boolean servantActive
- boolean guestMode
- String attributeName
- String idPeople
Internationalisation
Cette partie conserne les administrateurs car elle décrit comment modifier les textes d'affichage. Celà se situe soit au niveau de la configuration (nom des champs, nom des annuaires ... etc), soit au niveau des textes normaux.
Au niveau de la configuration
Comme vous l'avez vu dans le détail du fichier de configuration, es entêtes des champs sont multilangues. Dans le fichier de configuration vous avez un lot de déclaration de variables de texte.
Ce sont ces variables que vous devez écrire dans des fichiers de propriétés (dans le répertoire properties/languages) nommés config<<langue>>.properties
Les textes "normaux"
Les textes des menus et tous les textes affiché doivent se trouvés dans le fichier de propriété correspondant à la langue en cours et doit être dans le répertoire languages à la racine du package. Les fichiers de langues s'appellent (dans le répertoire languages) CAnnuaire<<langue>>.properties
Déploiement
Préparation du fichier de configuration CAnnuaire.xlm.: mettre les renseignements relatifs aux serveurs et aux attributs importants.
Préparation du déploiement : modifier les chemins d'installation du fichier build.properties.
Si vous aviez déjà installé une ancienne version du canal, lancez la commande ant undeploy, pour effacer toute trace du canal dans l'environnement de production.
Lancement de la commande ant deploy, pour déployer le canal dans les bons répertoires.
L'administrateur peut maintenant publier les canaux dont il a besoin en fonction du paramètre d'instanciation : "serverView". Pour cela, il y a 2 méthodes :
La plus simple étant de publier le canal de manière normale, par l'interface WEB prévue à cet effet.
La seconde étant d'utiliser la commande ant pubchan.
Cette méthode remplace toute la démarche de publication.
Utilisez la commande ant deploypubchan qui va déposer le fichier de déploiment (pubchan_CAnnuaire.xml) dans le répertoire {uPortal}/properties/chanpub. Les informations nécessaires à la publication sont décrites dans des tags XML, vous permettant ainsi même de spécifier l'attribut "serverView".
Ensuite, lancez la commande "ant pubchan -Dchannel=CAnnuaire.xml". depuis le répertoire "racine esup".
Vous pouvez bien sur créer autant de fichier xml que vous désirez. Par exemple, rien n'interdit d'en avoir un pour la vue en anonyme, un pour les étudiants et un pour le personnel.
Si vous décidez de mettre en place l'utilisation du canal MailTo, vous devez déployer ce canal. Il faut au moins la version 1.0.2 du MailTo (documentation ici).