Projet Socle ENT
Pages enfant
  • Profils utilisateurs (esup-3)

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migrated to Confluence 5.3

Le DLM (distributed layout management ou gestion de

...

profils répartis)


Le DLM (distributed layout management) est un mode de fonctionnement des environnements utilisateur qui utilise des fragments de profils répartis dans des utilisateurs modèles.

Sommaire
minLevel2
indent20px
styledisc

Principe 

On référence dans un fichier XML (dlm.xml) des fragments de profils que les utilisateurs peuvent se voir attribuer.

...

  • le portail parcourt le fichier dlm.xml pour savoir quels fragments lui attribuer (en fonction des règles d'audience indiquées dans la balise <dlm/audience>)
  • ensuite il va voir le détail du profil de chaque propriétaire (layout owner) concerné (voir gestion des fragments) et attribue la partie de profil (onglet, groupe d'onglets) a l'utilisateur connecté.
  • les fragments sont classés et affichés selon l'ordre indiqué dans l'attribut precedence
  • pour finir le portail applique les personnalisations faites par l'utilisateur lors de ses connexions précédentes (déplacement, modification, suppression de fragment, ajouts d'onglets et de canaux...)

Le fichier

...

dlm.xml

Il se trouve dans le dossier properties du portail. On définit dans ce fichier la position des fragments et leur visibilité pour les utilisateurs. Le contenu des fragments (canaux) est précisé ailleurs, dans les fichiers d'import de fragments ou par l'interface graphique (voir gestion des fragments)

Bloc de code
xml
xml
<?xml version="1.0"?>
<!-- $Header$ -->

<managedLayoutFragments xmlns:dlm="http://org.jasig.portal.layout.dlm.config">
  <dlm:property name='defaultLayoutOwner' value='fragmentTemplate'/>
  <!--  <dlm:property name='layoutDecorator' value='someClass'/> -->

  <!-- Controls clearing of dlm fragment cache.  This allows changes  made to layout
  owners to be reflected once the cache has been updated.  Specified in minutes. -->
  <dlm:property name='org.jasig.portal.layout.dlm.RDBMDistributedLayoutStore.fragment_cache_refresh' value="5"/>

  <dlm:fragment name='Guests' ownerID='guest-lo' precedence='20100'>
   <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GuestUserEvaluatorFactory'/>
  </dlm:fragment>

  <dlm:fragment name='AdminScolarite' ownerID='adminscolarite-lo' precedence='1050'>
    <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.PersonEvaluatorFactoryGroupMembershipEvaluatorFactory'>
      <paren mode="AND">
        <attribute name="username" mode='equalsdeepMemberOf' valuename='adminLDAP Tous les etudiants'/>
      </paren>
    </dlm:audience>
  </dlm:fragment>

  <dlm:fragment name='DefaultPersonnels' ownerID='defaultpersonnel-lo' precedence='1050'>
    <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
      <paren mode="AND">
        <attribute mode='deepMemberOf' name='LDAP Tout le personnel'/>
      </paren>
    </dlm:audience>

  <dlm:fragment name='Admin' ownerID='admin-lo' precedence='10'>
    <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.PersonEvaluatorFactory'>
      <paren mode="AND">
        <attribute name="username" mode='equals' value='Etablissementadmin'/>
      </paren>
    </dlm:audience>
  </dlm:fragment>

  </dlm:fragment></managedLayoutFragments>



On retrouve dans ce fichier :  

  • L'utilisateur par défaut (dont tout le monde hérite) : defaultLayoutOwner
  • le temps pendant lequel ce fichier est caché :  org.jasig.portal.layout.dlm.RDBMDistributedLayoutStore.fragment_cache_refresh
  • Balise Wikitous les fragments *<dlm:fragment> \ [...\]&nbsp;   </dlm:fragment>*

Modification du fichier dlm.xml

Copier le fichier update/uPortal/uportal-impl/src/main/resources/properties/dlm.xml dans custom/uPortal/uportal-impl/src/main/resources/properties et travailler dans le répertoire custom

Définition d'un fragment

Bloc de code
xml
xml
<dlm:fragment name='DefaultScolarite' ownerID='defaultscolarite-lo' precedence='1050'>
    <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
      <paren mode="AND">
        <attribute mode='deepMemberOf' name='EtablissementLDAP Tous les etudiants'/>
      </paren>
    </dlm:audience>
  </dlm:fragment>

On retrouve :

...

nom

...

[name

...

]

Uniquement utilisé dans ce fichier pour les distinguer

...

propriétaire [ownerID

...

]

C'est le layout owner (par convention on suffixe le login de ces utilisateurs par -lo pour les distinguer des utilisateurs classiques).

...

emplacement

...

de

...

gauche

...

a

...

droite

...

[precedence

...

]

Détermine la place du fragment de gauche a droite par rapport aux autres.
C'est un numérique ; plus il est grand plus il se trouve a gauche.
Les precedences sont évaluées entre différents fragments.

Bloc de code
xml
xml
<dlm:fragment name='Testing' ownerID='test-lo' precedence='90'>
...
<dlm:fragment name='Other' ownerID='other-lo' precedence='100'>

...

En cas de conflit c'est l'ordre de définition dans le fichier dlm.xml qui tranchera.

...

ciblage

...

[audience

...

]

Va déterminer à qui doit être attribué le fragment.unmigrated-wiki-markup

On paramètre une classe java qui va faire l'évaluation \ [evaluatorFactory\].

On dispose de plusieurs classes java de base dans le portail :

...

  • PersonEvaluatorFactory
    • equals
    • exists
    • contains
    • startsWith
    • endsWith
  • GroupMembershipEvaluatorFactory
    • memberOf (Membre direct)
    • deepMemberOf (Membre Recusif)

Exemple

Volet

Le fichier dlm.xml ci-dessus définit quatre fragments de profils, affichés de gauche à droite comme suit :

  • Guest (propriétaire : guest-lo) : Visible uniquement si l'utilisateur n'est pas authentifié
  • Scolarite (propriétaire : scolarite-lo) : Visible par les membres du groupe "LDAP Tous les etudiants" (voir Groupes )
  • Personnels (propriétaire : personnel-lo) : Visible par les membres du groupe "LDAP Tous les personnels"
  • Admin (propriétaire : admin-lo) : Visible par l'utilisateur dont le nom est "admin"

Le contenu détaillé de chaque fragment est défini dans le profil de son propriétaire : voir le chapitre suivant

Gestion des fragments

Un fragment consiste en un ou des onglets, contenant un ou des canaux disposés en colonnes.

Vous pouvez gérer les fragments de deux manières :

  • Créer un fichier xml (contenant le détail du fragment)  pour chaque utilisateur propriétaire et importer ce fichier .
  • Se connecter en tant qu'administrateur du portail (ou avec des droits suffisants) et configurer les fragments avec le canal fragment administrator
  • Utilisation de fichiers XML contenant l'environnement de l'utilisateur (fichiers d'import de fragment) puis importation/exportation via des tâches ANT.
  • Connexion directement avec l'utilisateur propriétaire et création de son environnement par l'interface web du portail.

Utilisation de fichiers XML

Fichier d'import de fragment

...

Volet

package ESUP :

Si vous voulez importer automatiquement les fragments lors de l'initialisation de la base (ant db.init, voir Installation ), vous devez stocker les fichiers dans le répertoire :

custom/uPortal/uportal-impl/src/main/resources/properties/db/mini/fragment-layout

Les fichiers d'import de fragment sont stockés dans le répertoire properties/layouts. Il y a un fichier par fragment. Par convention, on donne au fichier le nom de son propriétaire (guest-lo.xml pour le propriétaire guest-lo), l'extension du fichier est .fragment-layout

Bloc de code
xml
xml
<?xml<layout versionscript="1.0" encoding="UTF-8"?>
<layout userclasspath://org/jasig/portal/io/import-layout_v3-0.crn" username="guest-lo">
    <root-folder>
        <folder mutable="True" removable="True" type="header unremovable="Y" immutable="N" hidden="N" name="Root folder">
    <header unremovable="Y" immutable="Y" hidden="N"     <name>Header folder</name>name="Header folder">
      <channel unremovable="" immutable=""    <channel fNamehidden="" fname="header"/>
      <channel unremovable="" immutable=""    <channel fNamehidden="" fname="portal/login/general"/>
      <channel unremovable="" immutable=""    <channel fNamehidden="" fname="session-locales-selector"/>
      <channel unremovable="" immutable=""  </folder>hidden="" fname="fragment-admin-exit"/>
    </header>
    <folder mutable<footer unremovable="N" immutable="TrueN" removablehidden="TrueN" typename="regularFooter folder">
      <channel unremovable="" immutable=""  <name>Accueil</name>hidden="" fname="footer"/>
    </footer>
    <tab  <folder mutableunremovable="" immutable="TrueN" removablehidden="TrueN" typename="regularESUP Portail">
      <column unremovable="" immutable="N" hidden="N" name="Column 1">
      <name>Column</name>
  <structure-attribute type="folder">
         <channel fName="accueil-esup-portail"/> <name>width</name>
          <<value>100%</folder>value>
        </folder>structure-attribute>
        <channel <folder mutableunremovable="" immutable="True" removablehidden="True" typefname="footeresup-portail.org"/>
      </column>
    </tab>
  </root>
   <name>Footer folder</name><profile name="HTML browser profile">
    <description>A sample profile for common web browsers</description>
    <channel<structure fNamename="footerDLM Tabs and columns"/>
    <theme    </folder>name="DLM XHTML"/>
    </root-folder>profile>
</layout>

On retrouve dans ce fichier la structure complète de l'environnement utilisateur :

...

layout

Element racine, indique le nom de

...

l'utilisateur

...

propriétaire

...

du

...

fragment

...

Balise Wiki
dossier racine \[root-folder\] : contient l'ensemble des folders

(username)

root
header

Contenu (canaux) de l'en-tête de la page

Contenu (canaux)du bas de page

tab

Un onglet :

Un dossier de premier niveau est un onglet, un dossier de second niveau (folder/folder) est une colonne.

...

  • name : Nom de l'onglet affiché à l'écranunmigrated-wiki-markup
  • mutable : \ [true\|false\] est-il déplaçable ? Balise Wikiremovable : \
  • hidden : [true\|false\] est-il supprimable affiché ?
  • Balise Wiki
    type : \[header\|regular\|footer\] : type de l'onglet (_header_ et _footer_ sont réservés par le portail)
  • Balise Wiki
    Les colonnes \[folder/folder\] : idem onglets (les noms des colonnes ne s'affichent pas)
  • Les canaux contenus dans une colonne : le fName correspond au functional name utilisé lors de la publication du canal.

Import/Export ANT

  • removable : [true|false] est-il supprimable ?
column

Contient des canaux, qui seront affichés les uns en dessous des autres. Si plusieurs colonnes sont définies pour un onglet, elles seront affichées côte à côte.

  • width : largeur de la colonne en pourcentage. pris en compte uniquement s'il y a plusieurs colonnes, sinon 100%
channel

Un canal affiché dans une colonne

profile

Le profil qui peut être utilisé pour afficher ce fragment, en fonction du navigateur du client (navigateur html, mobile, etc.). Un élément structre par type de client possible

  • structure : rendu général
  • theme : fichiers de transformation xsl utilisés (structure) et habillage (skin) par défaut

Import d'un fichier de fragment

L'import se fait par la tâche ant  Importation du fichier uPortal/properties/layouts/guest-lo.xml (appartenant a guest-lo) dans la base du portail :

Bloc de code
ant layoutdb.import -Dusername=guest-lo

On peut aussi importer tous les environnements contenus dans le dossier layouts

Bloc de code

ant layout.import -Dusername=allDdir=<répertoire du fichier> -Dpattern=<nom ou pattern regex du fichier>

NB :En base, les fragments sont stockés dans les tables UP_LAYOUT_STRUCT et UP_LAYOUT_PARAM

Opération inverse : Exportation de l'environnement de guest-lo dans uPortal/properties/layouts/guest-lo.xml lo  (utile par exemple si on a créé/modifié l'environnement de guest-lo avec l'interface graphique) :

Bloc de code
ant layoutdb.export -Ddir=<répertoire où exporter le fichier> -DusernameDsysId=guest-lo

Utilisation de l'interface graphique

Pour modifier un fragment avec l'interface graphique, il faut pouvoir se connecter sous le nom de l'utilisateur propriétaire. Il faut donc préalablement le créer dans la table servant à l'authentification locale  Exportation de tous les fragments  :

Bloc de code
ant user.adddb.export -Ddir= -DusernameDtype=guestall-fragment-lodefinitions

Puis indiquer son mot de passe.

NB : Ceci ajoute l'utilisateur dans la table UP_PERSON_DIR

Exemple

Volet

Le fichier de fragment ci-dessus appartient à l'utilisateur guest-lo

  • Il contient un onglet (tab) de libellé "ESUP Portail", qui n'est ni supprimable ni déplaçable par l'utilisateur
  • Dans cet onglet, les canaux sont disposés en une seule colonne (column)
  • Cette colonne contient un seul canal dont le nom fonctionnel est esup-portail.org
  • Ce fragment est disponible pour les navigateurs html (profile)

Utilisation de l'interface graphique

Pour modifier un fragment avec l'interface graphique, il faut se connecter sous le nom d'un utilisateur ayant le droit d'utiliser le canal fragment administrator

Dans le canal fragment administrator, sélectionner le fragment puis effectuer les modifications voulues avec l'interface graphique :Une fois l'utilisateur créé dans le portail vous pouvez vous connecter sous son nom. Attention il s'agit d'une authentification locale, le paramètre esup.db.auth de config.properties doit donc être égal à true. On devrait aussi pouvoir passer par une authentification distante (CAS => LDAP), mais je n'en voit pas l'intérêt.

Vous pouvez comme tout utilisateur ajouter des onglets, des colonnes et des canaux.

...