http://plinn.org
Les échos du Plinn – journal d'information du projet Plinn – no 0 – janvier 2006
Fonctions clefs
Présentation
Document Plinn
Plinn est un logiciel libre sous licence GPL permettant de mettre
Le document Plinn est un outil de mise
en place aisément des portails web de travail collaboratif. Une in-
en page en ligne où textes et images
terface intuitive et une suite d’outils complets permettant l’édition
sont manipulés par glisser-déposer.
en ligne de documents, l’indexation des fichiers bureautiques, le
classement et la gestion documentaire ainsi que des partages sou-
Album photo
ples et extensibles font de Plinn un outil à même de couvrir un
L’album photo assure la génération
large éventail de besoins pour faire vivre au quotidien des sites in-
des vignettes, l’extraction et l'indexa-
tion des métadonnées EXIF, la généra-
ternet ou intranet.
tion de diaporamas, ainsi que l’impor-
Plinn est construit sur le serveur d’application ZOPE et son produit
tation et exportation en fichier ZIP. De
nombreux formats de fichiers sont
phare, le CMF, qui apporte les fonctions essentielles de gestion de
supportés.
contenu comme l’auto-indexation, les partages, la gestion des
workflows etc.
Annuaire central
L’annuaire contient l’ensemble des
membres du portail que l’on agence
par groupes imbriquables. Les privilè-
AJAX partout
ges accordés aux membres sont défi-
nis par l’appartenance aux groupes.
L’interface web de Plinn utilise massivement les techniques de pro-
grammation javascript AJAX permettant d’éviter les rechargements
Partage des ressources
complets des pages lorsqu’ils s’avèrent inutiles afin de rendre l’ap-
Le créateur d’un document peut ajou-
ter des accès pour les autres membres
plication plus interactive que sur un site classique. Plinn utilise
du portail. Plinn détermine automati-
AJAX de manière tellement systématique que les situations qui né-
quement les rôles qui pourront être
cessitent un rechargement complet sont traitées comme des cas
attribués en fonction des autorisations
particuliers.
du créateur. Ce fonctionnement géné-
rique permet la prise en compte im-
Ce procédé ouvre des perspectives inédites qui repoussent les limi-
médiate de rôles personnalisés (ou
tations du HTML standard. Par exemple, Plinn offre la possibilité
rôles métiers).
d’éditer à tout moment les métadonnées d’un document en cours
de rédaction.
Arborescence adaptative
Même en cas de discontinuité dans les
Pour autant, avec le confort en moins, l’interface web reste utilisa-
autorisations, l’arborescence est
ble avec des navigateurs n’exécutant pas javascript, du fait du res-
constamment mise à jour pour assurer
pect de la norme XHTML 1.0 Transitional.
l’accès aux documents par urls, sans
rendre obligatoire l’utilisation du mo-
teur de recherche.
Vue en calendrier
Mise en page des documents
Tous les documents placés dans un
dossier peuvent être affichés sous
En plus de l’édition en texte riche, comme dans un traitement de
forme d’un calendrier en fonction des
texte, le Document Plinn offre des fonctions de mise en page par
dates qu’ils fournissent (création, mo-
placement à la souris. En outre, il n’est plus nécessaire d’envoyer au
dification ou encore date de prise de
préalable des images pour les insérer dans le document : cette opé-
vue pour les photos). Tous les attributs
ration se réalise directement par un envoi à partir du disque dur.
de type date présents conjointement
Les images ainsi attachées sont ré-échantillonnées et stockées
dans un lot de documents sont affi-
chables sans restriction.
conjointement au document. Les problèmes liés à la validité des
urls ainsi que l’état de workflow des images disparaissent complè-
tement.

Éditorial
Ce qu’apporte Plinn
Les utilisateurs d’un site web de travail collaboratif rédigent fréquemment des nouveaux documents, de
manière autonome et si possible en groupe. Le web et, a fortiori, le protocole http ne sont pas particu-
lièrement adaptés à ce type de gestion de contenu : en effet, par conception, ils répondent mieux à des
impératifs de consultation, qu’à des besoins de rédaction.
Côté interface homme-machine, les défis posés par la gestion de contenu sont tout aussi tangibles :
comment concevoir un site web, quelle ergonomie adopter, quels outils mettre en œuvre pour que la
rédaction et le partage de documents en ligne deviennent aussi naturels que la navigation classique ? La
solution est d’autant moins évidente que l’outil utilisé — un navigateur internet — est devenu commun,
et que son utilisation en tant que « visionneuse » est ancrée dans les habitudes de chacun. Les pro-
blématiques soulevées sont donc d’origine diverses et les solutions le sont tout autant.
La génération dynamique de pages web ressort, dans l’immense majorité des cas, du domaine exclusif du
serveur web qui, à chaque requête, exécute une séquence d’opérations plus ou moins complexes (accès à
des sources de données, génération de code HTML, etc.), le navigateur se contentant d’en afficher le
résultat en bout de chaîne. Ce mode de fonctionnement ne pose pas de problème technique majeur, la
puissance disponible sur les serveurs actuels étant conséquente, et les architectures pouvant répartir la
charge sur plusieurs machines. Néanmoins, ce schéma présente des limites pour un site de gestion de
contenu pour lequel la création, l’annotation, l’organisation et le partage des documents conduisent à
un nombre significatif de requêtes qui, même si le serveur et le réseau sont rapides, en rendra l’utilisa-
tion moins agréable. Indépendamment de toutes les optimisations (qui demeurent importantes) appor-
tées par l’utilisation de caches ou par la séparation contenu / mise en forme, le volume cumulé des don-
nées transférées reste élevé, sans parler du fait que les délais d’affichage du navigateur ne sont pas négli-
geables.
Pour accélérer la réactivité de l’interface web, la solution choisie dans Plinn consiste à déléguer à un
programme javascript le rafraîchissement des pages. Pour ce faire, chacune des actions de l’utilisateur
(clics, frappes...) est interceptée par javascript, qui interroge alors le serveur pour obtenir une réponse
spécifique à l’action et, par conséquent, potentiellement plus concise qu’une page web complète. La
réponse (au format XML ou texte) est à son tour évaluée par le programme s’exécutant sur le navigateur
qui s’occupera d’appliquer les modifications locales dans la page. Cette approche permet de diminuer
significativement le volume de données transférées : par exemple, lors de l’expansion d’une branche
d’un affichage arborescent, la taille de la réponse est de quelques centaines d’octets alors que la page
complète représente typiquement quelques dizaines de kilo octets, soit deux ordres de grandeur de dif-
férence ! Outre ce gain facilement quantifiable, les bénéfices apportés par cette nouvelle approche sont
nombreux ; on peut citer par exemple la moindre sollicitation des ressources du serveur ou la possibilité
d’édition simultanée dans plusieurs formulaires.
En pratique, les navigateurs ne sont pas tous capables d’exécuter du javascript ; de plus, même parmi
ceux qui le permettent, tous ne sont pas à même d’envoyer des requêtes http via javascript (fonctionna-
lité « AJAX »). L’emploi de javascript doit donc être fait avec discernement : il peut apporter des amé-
liorations ergonomiques mais en aucun cas conduire à des fonctionnements qui seraient, du coup, inac-
cessibles aux navigateurs n’ayant pas javascript. Plinn procède ainsi : tous les liens et formulaires ont des
cibles et actions correctement renseignées, dans le respect des normes Internet. Il est donc utilisable
avec tous types de navigateurs1.
Le nom de « Plinn » est un emprunt à la culture traditionnelle bretonne : il s’agit d’une danse de
groupe, toujours appréciée de nos jours, qui avait jadis comme utilité de faire sauter à pieds joints les
danseurs pour tasser la terre battue dans les maisons. Le logiciel Plinn reprend cette idée de départ :
faire du travail collaboratif une expérience agréable !
1 Une exception à la règle : bien qu’étant techniquement possible (mais sans intérêt), l’édition du
Document Plinn ne peut se faire sans javascript.
Les échos du Plinn no 0, janvier 2006 — 2

Au sommaire de ce numéro
Ce numéro 0 coïncidant avec la sortie de la version 1.0 de Plinn donne l’essentiel des informations pour
installer, utiliser et comprendre le logiciel. Au fil des articles, vous trouverez également des encadrés
apportant des informations techniques spécialement destinées au développeurs ZOPE et CMF.
2❚Éditorial
4❚Installation Toutes les étapes avant de pouvoir utiliser Plinn
5❚Fonctions génériques Les dossiers, les métadonnées, les commentaires et les partages
9❚Document Plinn Le mode d’emploi de l’éditeur WYSIWYG
12❚Album Photo Toutes les fonctions de gestion des images
15❚Annuaire La gestion des utilisateurs, des groupes et des rôles globaux
Les échos du Plinn no 0, janvier 2006 — 3



Installation
Voici un résumé des étapes à effectuer pour installer un portail Plinn. Les
instructions qui suivent seront familières aux personnes ayant déjà utilisé
ZOPE et installé des produits additionnels. Pour les autres, de plus amples
informations se trouvent facilement sur les sites consacrés à ZOPE. De
manière générale, tout ce que vous pouvez lire et apprendre à propos de
ZOPE et CMF s’applique à Plinn.
Installation de ZOPE
Avant d’installer Plinn proprement-dit, vous devez préalablement instal-
ler ZOPE v2.7, 2.8 ou 2.9 qui est en téléchargement sur le site communau-
taire http://zope.org. Une version binaire pour Windows est disponible ainsi qu’une archive tar.gz qui
contient le code source à compiler soi-même. Dans ce deuxième cas vous devrez disposer d’un compila-
teur C type gcc ou équivalent, afin d’installer python 2.3.5 (ou 2.4) puis ZOPE.
Installation de PIL
Le module additionnel PIL (Pyhon Imaging Library) est une dépendance qui doit obligatoirement être
installée pour faire fonctionner Plinn. Le produit est en téléchargement à l’adresse
http://www.pythonware.com/products/pil. Une version binaire Windows et une archive des codes sour-
ces sont disponibles. Pour supporter le format JPEG, PIL utilise l’utilitaire de conversion accessible ici :
http://www.ijg.org/. Cette dépendance n’est pas obligatoire pour installer PIL, mais Plinn ne pourra pas
fonctionner correctement si le format JPEG n’est pas supporté. Pour Windows, l’installateur détecte, par
examen de la base de registre, la présence d’une installation de python. L’interpréteur python intégré à
ZOPE n’est pas détecté : il faut donc d’abord installer python pour Windows à partir de l’exécutable dis-
ponible sur http://python.org, puis installer PIL. Lorsque ces deux installations sont faîtes, il faut reco-
pier le contenu du répertoire « site-packages » dans le dossier « site-packages » de ZOPE.
Installation de Plinn
Décompressez l’archive du code Plinn et placez l’ensemble des dossiers et fichiers obtenus dans le dos-
sier « Products » d’une nouvelle instance ZOPE. Démarrez l’instance et ouvrez la ZMI dans un naviga-
teur web (typiquement à l’adresse http://localhost:8080/manage).
Pour instancier un nouveau portail Plinn, ajoutez un objet de type « Configured CMF Site » que l’on
trouve dans la liste déroulante située en haut à gauche de la frame de droite et cliquez sur « Add ».
Dans le formulaire, entrez un identifiant et choisissez « Plinn Default » pour le champ « Setup pro-
file ». Ne cochez aucune des options supplémentaires (telles « CMFCalendar » ou « CMFUid »), le
profil de configuration de Plinn s’en charge.
Une fois créé, le portail est accessible à l’adresse http://localhost:8080/identifiant_du_portail. À ce
stade, il est conseillé de terminer la configuration en remplissant le formulaire pointé par le lien
« Configurer le portail » qui se situe dans la colonne de droite de la page.
Remarque
Avec ZOPE-2.9, un paramétrage dans le fichier etc/zope.conf de l’instance est nécessaire. Localisez la
directive default_zpublisher_encoding et définissez la variable à “utf-8” :
default-zpublisher-encoding utf-8
Attention, les mots doivent être reliés pas des - (tirets) et non _ (souligné).
Les échos du Plinn no 0, janvier 2006 — 4




Fonctions génériques
Dossiers
Les dossiers sont les objets de base pour stocker les contenus. La mise en page du dossier de Plinn est
très voisine du CMF : on retrouve un listing sous forme de tableau avec, en bas, des boutons d’action
pour ajouter et manipuler les contenus (copier, coller...). Les en-têtes de colonne sont cliquables et per-
mettent de changer le critère ou le sens de tri des éléments. Le tri en cours est repérable par la présence
d’une flèche triangulaire accolée au libellé de la colonne. On peut définir, sur chaque dossier, le tri par
défaut qui sera utilisé lors de son ouverture. Pour définir un nouveau tri par défaut, cliquez sur une en-
tête de colonne et cliquez sur la coche ( ) qui apparaît à coté du libellé. Si cette coche n’apparaît sur
aucune colonne, c’est, soit que l’affichage et déjà en tri par défaut, soit que vous ne disposez pas des
autorisations pour définir le tri (la permission de modification sur le dossier est requise).
Au delà de vingt éléments, le listing s’étale sur plusieurs pages. Dans ce cas, des barres de navigation
apparaissent de part et d’autre du tableau pour atteindre les éléments suivants ou précédents.
Lorsque le tri s’effectue par position, il est possible de changer l’ordre des contenus. Cette opération se
réalise très simplement : attrapez un élément à la souris (n’importe où dans sa ligne) et déplacez-le à un
autre endroit du tableau comme ci-dessous. Pas besoin de valider l’opération à posteriori : AJAX s’en
charge !
Si vous souhaitez déplacer un élément sur une autre page du listing, procédez de la même manière et
déposez l’élément sur le numéro de page souhaité, dans la barre de navigation.
Le déplacement s’effectue dès le relâchement de la souris, et la page ciblée s’affiche à la fin de l’opéra-
tion. En l’absence de javascript, les boutons d’ordonnancement standards du CMF s’affichent. La fonc-
tion reste donc opérationnelle en toutes circonstances.
Les échos du Plinn no 0, janvier 2006 — 5




Édition des métadonnées
Dans les vues d’édition des contenus (onglets « Modifier » ou « Lister », selon le type), à gauche du
titre et de la description, on trouve un bouton triangulaire : il permet de « dérouler » un formu-
laire pour modifier les métadonnées.
Le formulaire présenté ci-dessus est la version condensée (titre et description uniquement). Pour modi-
fier l’ensemble, cliquez sur le lien « Éditer toutes les métadonnées », vous obtenez :
Par défaut, les dates de mise en ligne et d’expiration sont désactivées (cases « immédiatement » et
« jamais » cochées). Pour modifier ces dates, décochez et entrez les valeurs. Un calendrier permet la
saisie rapide ; il s’affiche avec le bouton « ... ». Sans javascript, la saisie est toujours possible, mais sans
l’aide des calendriers. Aussi, les cases à cocher n’ont plus d’effet, il faut donc remplir impérativement
tous les champs. L’ordre de saisie entre le jour et le mois est automatiquement établi en fonction des
paramètres linguistiques du navigateur.
Les échos du Plinn no 0, janvier 2006 — 6


Commentaires
Tous les contenus peuvent initier des forums de discussion qui s’ajoutent en bas de page. Il faut préala-
blement autoriser les commentaires2 sur le document de son choix, cette opération s’effectue dans le
formulaire d’édition des métadonnées complètes (voir plus haut). Lorsque la fonction de discussion est
activée, on trouve un lien « Ajouter un commentaire... » : cliquez pour ouvrir le formulaire de saisie.
On peut ajouter des réponses (lien « Répondre ») à n’importe quel commentaire. Ainsi, la discussion
prendra la forme d’une arborescence repliable triée chronologiquement. Lorsque l’on répond à un
commentaire, Plinn affiche le formulaire à l’endroit exact où il apparaîtra, et pour lever toute ambiguïté,
le commentaire auquel on répond est souligné : par exemple, dans capture ci-dessous, on voit immédia-
tement que la réponse qui va être rédigée concerne le premier commentaire et non le deuxième.
La fonction de discussion provient directement du CMF qui n’a pas été modifiée en interne. En revan-
che, Plinn améliore considérablement son utilisation qui se fait sans quitter la page en cours et dont
l’affichage permet aux utilisateurs de pouvoir lire (ou citer) l’ensemble des réponses précédentes au
moment même de la rédaction. La qualité des commentaires s’en trouve donc potentiellement augmen-
tée.
2 Pour chaque type de contenu, l’ajout des commentaires peut être activé par défaut dans l’outil
portal_types.
Les échos du Plinn no 0, janvier 2006 — 7



Partages
On retrouve, sur tous les contenus, un onglet « Partager » qui permet d’ajouter ou supprimer des ac-
cès supplémentaires (sous forme de rôles locaux) aux membres du portail. Cet onglet s’affiche que lors-
que l’utilisateur authentifié dispose de la permission « Set Local Roles », requise pour modifier les
partages. En pratique, il s’agit des propriétaires et des administrateurs.
L’interface de gestion des partages est décomposée en trois sous-onglets :
Le premier onglet « Partages » donne la liste, regroupée par rôles, de tous les membres ayant accès à
l’objet ; les deux autres permettent d’ajouter ou supprimer des rôles, soit par groupe, soit par membre.
Quelle que soit la manière par laquelle les partages ont été définis, la liste récapitulative donnera tou-
jours les membres effectifs pour chaque rôle (les groupes sont donc « éclatés » dans cet affichage).
Pour ajouter ou supprimer des rôles à des groupes, cliquez sur l’onglet « Ajout / Suppression de grou-
pes » puis sélectionnez le rôle à gérer dans la liste déroulante de droite. Sans javascript, il faut valider
avec le bouton « ok ». Utilisez ensuite les listes jumelles pour ajouter ou supprimer des groupes dans
le rôle sélectionné (voir ci-dessous). Pour ajouter des membres individuellement, allez dans l’onglet
« Ajout / Suppression de membres », le fonctionnement est identique.
La liste des rôles applicables dépend des autorisations de l’utilisateur connecté : elle est constituée dy-
namiquement par l’ensemble des rôles représentant un sous ensemble des permissions de l’utilisateur.
En conséquence, un utilisateur peut gérer les rôles dont il dispose et tout ceux qui sont moins permis-
sifs. Cette interface de partages analyse à chaque fois tous les paramètres de sécurité : si des rôles sup-
plémentaires sont ajoutés ou redéfinis localement, ils seront pris en compte de la même manière. Toutes
les personnalisations à ce sujet sont donc possibles.
Les échos du Plinn no 0, janvier 2006 — 8

Le tableau ci-après résume l’affectation des permissions de gestion de contenus sur les rôles standards.
Ces informations sont valables pour des documents ou dossiers à l’état privé.
Rôle
Voir
Modifier
Supp.
Supp. ses
Valider les
Gérer les
contenus
contenus
contenus
partages
Lecteur






Contributeur






Propriétaire






Modérateur






Administrateur






Remarques
— La suppression des objets dans Plinn est plus fine qu’en ZOPE classique. Trois permissions sont utili-
sées à ce sujet : Delete objects (1) – permission standard de ZOPE – qui est inchangée et qui autorise la
suppression de n’importe quel objet du dossier, Delete Portal Contents (2) qui autorise la suppression
des objets pour lesquels l’utilisateur courant dispose de l’autorisation Delete Owned Objects (3).
— Le workflow associé aux documents retire la permission Delete Owned Objects sur les états « En at-
tente » et « Publié ». Par conséquent, un utilisateur ayant rédigé un document dans un dossier
dont il n’est pas propriétaire ne pourra d’aucune façon supprimer ses documents publiés. L’utilisateur
pourra toutefois « Retirer » un de ses documents (transition de workflow) pour le supprimer. Par
contre, rien n’empêche de protéger la transition « Retirer » pour que cette opération devienne im-
possible.
Les échos du Plinn no 0, janvier 2006 — 9




Document Plinn
Créer un document Plinn
Dans un dossier, cliquez sur le bouton « Ajouter »,
entrez un titre dans le champ texte correspondant au
type « Document Plinn » et validez avec le bouton
juxtaposé « Ajouter » : le document s’affiche dans sa
vue d’édition (onglet « Modifier »).
Ajouter un cadre de texte
Cliquez sur le bouton d’ajout de texte (2), un bloc de texte s’ajoute dans l’espace de travail du document.
Le point d’insertion indique que la saisie peut commencer. Utilisez la barre d’outils pour mettre en
forme le texte.
Ajouter une image
Dans la barre d’outils, cliquez sur
: un formulaire d’envoi de
fichier apparaît. Choisissez un fichier d’image et validez. L’image
est alors envoyée vers le serveur, le cas échéant, convertie en JPEG,
retaillée, et insérée dans le document. Selon la taille de l’image et
de la vitesse de connexion, le délai entre l’envoi et l’affichage peut
durer plusieurs secondes.
Une image peut également être ajoutée dans un texte, dans ce cas, positionnez le curseur à l’endroit
souhaité et cochez la case « Insérer dans le texte » avant l’envoi.
Ajouter un fichier
Des fichiers binaires quelconques peuvent être envoyés dans les textes où ils apparaîtront sous forme de
liens hypertextes. Pour ajouter un fichier, placez le point d’insertion ou sélectionnez une portion de
texte puis cliquez sur le bouton : , un formulaire d’envoi apparaît. Choisissez un fichier et validez. Le
fichier est envoyé, et, à la fin du transfert, un lien est ajouté. Dans le cas où un texte était préalablement
sélectionné, le lien s’y s’appliquera, sinon, le nom du fichier est ajouté en tant que lien.
Déplacer, dimensionner et supprimer les cadres
— Pour déplacer un cadre (texte ou image) attrapez-le avec la souris (de préférence en son milieu) en
maintenant la touche Alt enfoncée.
— Pour dimensionner un cadre, attrapez-le avec la souris en maintenant la touche Majuscule enfon-
cée.
— Pour supprimer un cadre, maintenez à la fois Alt et Majuscule enfoncées et cliquez sur le cadre.
Confirmez la suppression avec la boîte de dialogue qui s’affiche.
Utiliser les calques
Le document Plinn utilise des calques pour le placement des éléments. Leur manipulation s’effectue
avec le sélecteur de calque (3) qui affiche le calque en cours d’utilisation. Lors de la création d’un nou-
veau document, un premier calque est ajouté automatiquement (nommé « Calque 0 »). Les opérations
que l’on peut effectuer sont les suivantes :
— Pour ajouter un calque, choisissez l’option « Nouveau calque » dans le
sélecteur : le nouveau calque apparaît en superposition du précédent, et
une couleur lui est automatiquement attribuée. Le nouveau calque devient
actif, les nouveaux éléments de texte et image s’y ajouteront.
— Pour activer un autre calque, sélectionnez-le dans la liste. La couleur de la
bordure de la zone de travail adoptera la couleur du calque. Seul les élé-
ments du calque en cours peuvent être édités, ils sont facilement recon-
Les échos du Plinn no 0, janvier 2006 — 10

naissables car leurs bordures ont la même couleur.
— Pour masquer ou afficher le calque en cours, cliquez sur le bouton : . Les données masquées ne sont
pas perdues et peuvent réapparaître même après enregistrement du document. Cependant, les cal-
ques masqués sont automatiquement retirés dans l’affichage final, autrement dit, le code HTML de
la page résultante ne contiendra pas leurs contenus.
Modifier les métadonnées
Les métadonnées du document en cours de rédaction peuvent être modifiées à tout moment, sans avoir
besoin d’enregistrer les modifications en cours. Pour saisir les métadonnées, cliquez sur le bouton trian-
gulaire (1) qui fait apparaître un formulaire de saisie condensé comportant le titre et la description. Pour
modifier l’ensemble des métadonnées, déroulez le formulaire complet en cliquant sur le lien « Éditer
toutes les métadonnées » en dessous du champ de description.
Remarques, limitations
Dans sa version actuelle, l’édition des documents Plinn ne fonctionne qu’avec les navigateurs Gecko dis-
posant des fonctionnalités d’édition en texte riche (i.e. Firefox, Mozi a...). Une version fonctionnant
également avec Internet Explorer est à l’étude. Cependant, une fois achevé, le résultat peut être vi-
sualisé par tous types de navigateur.
L’activation d’un calque sous-jacent a pour effet de le faire passer au premier plan. Ceci provient d’une
contrainte liée au HTML. Après enregistrement, les calques sont à nouveau superposés dans leur ordre
de création. Il n’est pas encore possible de ré-ordonnancer les calques, mais cette fonction apparaîtra
dans une version future.
Détails techniques
Le document Plinn hérite du document CMF standard. Le stockage du document est réalisé
au moyen d’un dialecte XML dont l’objectif est d’enregistrer l’état des différents éléments afin
de recréer les objets javascript qui les manipulent lors de l’ouverture en mode édition. Les
images et fichiers joints sont stockés en interne dans le document, dans un dossier nommé
« attachments ». L’ajout d’une image se fait par une instanciation d’un objet « Photo » (pro-
duit livré avec Plinn) et un fichier par un objet « File » standard (non CMF). Coté serveur, les
méthodes du document Plinn servent essentiellement à tranformer le fichier XML en HTML
au moyen du module python xml.dom.minidom. Les fichiers joints sont gérés de manière
automatique : à chaque édition, on détecte la présence des éléments qui ne sont plus utilisés
pour les supprimer.
Coté client, voilà la liste des scripts essentiels (ils se trouvent dans le dossier Products/
PlinnDocument/skins) :
layout_objets.js contient le code permettant l’ajout d’éléments dans les calques. Un élé-
ment s’affichant dans un document plinn en cours d’édition est une instance de l’objet
javascript « Rectangle » dont le constructeur prend en paramètres le point d’insertion, la
largeur, la hauteur, le type, les options de drag and drop et le ratio largeur / hauteur. Pour
s'afficher, l’objet « Rectangle » possède une méthode « draw » qui prend comme para-
mètre l’élément parent pouvant être, soit un objet Rectangle soit un élément html quel-
conque. Ce design ne limite donc pas la profondeur d'imbrication des éléments, même si,
en pratique, le document Plinn n’utilise que 2 niveaux (calques et éléments texte ou
image).
layout_controlers.js contient les fonctions de gestion de l’affichage (sélecteur de calque
etc...) et les fonctions de drag and drop. C’est dans ce fichier que l’on trouve le point
d’entrée du programme : fonction « initPlinn » qui prend comme paramètre le nœud DOM
racine du document (typiquement une référence d’un élément <div> de la page) et l’url du
fichier XML.
xml_io.js assure la sérialisation XML des objets javascript pour l’importation dans le navi-
gateur et pour l’exportation vers ZOPE.
Les échos du Plinn no 0, janvier 2006 — 11

Les éléments ajoutés dans un document Plinn, par importation XML ou par l’intermédiaire de
l’interface utilisateur suivent le même processus qui consiste à cloner des éléments DOM de
référence pour les inclure dans le document. Il existe trois éléments de base, « div », « img »
et « epoz » utilisés respectivement pour les calques, images et textes (que l’on peut voir
dans plinndocument_edit_template.pt, lignes 31 à 36). À l’initialisation, des références à ces
éléments sont chargées dans un tableau associatif «   ELEMENTS_POOL   » aux clefs
"DIV_ELEMENT", "IMG_ELEMENT", "EPOZ_ELEMENT". Chaque entrée du tableau
« ELEMENTS_POOL » est un tableau associatif qui contient ceci :
— "node" : référence vers l’élement DOM à cloner
— "beforeDraw" : fonction exécutée avant l’affichage dans le document.
— "getRawData" : fonction utilisée pour extraire le contenu utile de l’élément. Elle est exé-
cutée lors de l’exportation xml.
— "putData" : fonction utilisée pour remplir l’élément. Elle est exécutée lors de l’importation
XML.
Enfin, l’ajout d’un élément se fait par l’instanciation de l’objet javascript « Rectangle » qui,
d’une part effectue le clonage, et d’autre part attache les gestionnaires d’événements qui
assureront le drag and drop et le redimentionnement.
Par cette architecture, le document Plinn fournit un framework générique capable de gérer
tous types d’éléments HTML qui pourront être disposés à la souris dans le document. Il se-
rait possible d’ajouter des widgets plus élaborés (par exemple un tableau pré-formaté avec
des champs de formulaires précis pour un en-tête de papier à lettre). La procédure de déve-
loppement serait la suivante :
— Écrire le code HTML dans le lot d’éléments de base dans plinndocument_edit_template.pt.
— Ajouter une entrée au tableau « ELEMENTS_POOL » avec l’implémentation des fonctions
d’import / export spécifiques au widget.
— Ajouter un bouton dans la barre d’outils pour assurer l'ajout du widget.
— Coté serveur, implémenter le convertisseur pour transformer les données exportées en
HTML.
Les échos du Plinn no 0, janvier 2006 — 12

Album Photo
Créer un album
Dans un dossier, cliquez sur le bouton « Ajouter », entrez un titre dans le champ texte correspondant
au type « Album photo » et validez avec le bouton juxtaposé « Ajouter » : l’album (vide) s’affiche
dans sa vue en vignettes (onglet « Voir »). Pour ajouter des photos, plusieurs méthodes sont possibles ;
elles sont détaillées ci-après.
Ajouter des photos une à une
Allez dans l’onglet « Lister » et cliquez sur le bouton « Ajouter ». Entrez un titre dans le champ
« Photo » et validez avec le bouton juxtaposé « Ajouter ». Remplissez le formulaire qui vient d’ap-
paraître en choisissant une image du disque dur et validez. À la fin de l’opération, l’image s’affiche ainsi
que ses métadonnées EXIF, dans le cas d’une photo prise avec un appareil numérique. Pour revenir à
l’affichage des vignettes, cliquez sur le nom de l’album dans la breadcrumbs3.
Ajouter un lot d’images par fichier ZIP
Il est possible d’envoyer un fichier d’archive au format ZIP contenant des images qui peuvent être clas-
sées dans des dossiers. Les archives peuvent être compressées ou non, mais, si les images sont déjà dans
un format compressé (par ex. JPEG), le gain de taille sera négligeable ; dans ce cas, il est préférable de ne
pas compresser l’archive pour économiser les ressources du serveur. Pour importer une archive d’ima-
ges, procédez comme suit :
— Ouvrez l’onglet « Importer ».
— Dans le formulaire, choisissez un fichier Zip contenant exclusivement des images ou des dossiers, et
validez par le bouton « Importer ».
À la fin de l’opération, les vignettes des images sont affichées. Le temps de latence avant affichage peut
être long à cause, d’une part du temps de transfert, et d’autre part, du temps nécessaire à la génération
des vignettes, à laquelle précède éventuellement des convertions au format JPEG.
Ajouter des photos par WEBDAV et FTP
Il est possible d’ajouter des photos par lot en utilisant les protocoles WEBDAV ou FTP. Il faut préala-
blement créer dans le portail un album photo ou utiliser un album existant. L’envoi de photos dans un
dossier standard échouera. Dans un logiciel de navigation Webdav ou FTP de votre choix, connectez-
vous à ZOPE en entrant l’adresse de l’album. Dans le cas de WEBDAV, l’adresse est identique (l’url com-
plète commençant par « http:// ») ; dans le cas de FTP, remplacez « http:// » par
« ftp://[serveur]:8021 »4. Ensuite, vous pouvez envoyer vos fichiers d’images.
Remarques
— À cause de javascript, l’url affichée dans la barre d’adresse ne correspond généralement pas à l’adresse
de l’album. Pour récupérer l’adresse de l’album, faîtes un clic droit sur le lien de l’onglet « Voir » et
copiez l’url à l’aide du menu contextuel (dans Firefox : « Copier l’adresse du lien »).
— Par défaut, à partir de ZOPE 2.8.x, le serveur FTP est désactivé. Pour l’activer, ouvrez le fichier
etc/zope.conf de l’instance ZOPE dé-commentez les lignes suivantes :
<ftp-server>
# valid key is "address"
address 8021
</ftp-server>
3 Barre affichée en dessous du bandeau (commençant par « Vous êtes ici : » ) qui indique le placement
du document chargé par rapport à la racine du portail.
4 Le numéro de port FTP dépend de la configuration de ZOPE, reportez-vous aux remarques qui sui-
vent.
Les échos du Plinn no 0, janvier 2006 — 13


enregistrez et redémarrez ZOPE.
— Une arborescence d’images regroupées dans des dossiers peut être envoyée telle-quelle : des sous-al-
bums seront créés pour chaque dossier.
Modifier les titres des images
Dans l’affichage des vignettes, il est possible de modifier directement les titres des images. La procédure
est très simple : faîtes un double clic sur un titre : il devient modifiable (voir ci-dessous), saisissez le
texte et valider par la touche « entrer » ou cliquez en dehors.
Détails techniques
Les images dans Plinn reposent sur deux produits distincts : Photo et Portfolio. Photo n’a
pas de dépendance à CMF et, à ce titre, peut être utilisé séparément. Portfolio est un produit
CMF qui fourni deux classes :
— une version CMF de la classe Photo ;
— une classe « folderish » : Portfolio héritant de Plinn.Folder.Folder et qui ajoute les métho-
des d’import / export au format zip.
Photo est le produit qui assure le stockage, la conversion, le ré-échantillonnage et l’extrac-
tion des métadonnées des images. Une instance de la classe Photo stocke en permanence
le fichier brut envoyé qui n’est modifié que lors d’un nouveau téléchargement (écrasement).
Si l’image envoyée n’est pas de type JPEG, une conversion sera assurée lors de l’instancia-
tion. Par défaut, cette conversion est assurée par le module PIL qui supporte de nombreux
formats (BMP, DCX, EPS, GIF, ICO, JPEG, PCX, PNG, PSD, TIFF...) dont la liste est extensi-
ble par l’ajout de plugins de décodage spécifiques. La conversion au format JPEG peut in-
duire, au préalable, une conversion de mode colorimétrique (par ex. de couleurs indexées
vers RVB). Sur un poste sous Microsoft Windows5, la conversion JPEG peut être assurée par
Photoshop. Cette option permet notamment de bénéficier du support complet du format
PSD. En outre, Photoshop peut directement se connecter à ZOPE car il supporte le protocole
WEBDAV. Plinn peut donc être une solution pour des photographes qui souhaitent présenter
leurs travaux directement sur le web ou encore communiquer avec leurs clients qui, par le
biais des partages ou des workflows pourront accéder aux images les concernant.
La solution photoshop est encore au stade expérimental. Les évolutions prévues sont : le
portage pour Macintosh OS X, le stockage externalisé (en dehors de la ZODB) et la résolu-
tion des problèmes liés à l’utilisation de WEBDAV (certaines séquences de requêtes envoyées
par photoshop posent problème).
5 Avec Adobe photoshop installé + photoshop SDK + pythonwin (et quelques paramétrages)
Les échos du Plinn no 0, janvier 2006 — 14

Annuaire
L’annuaire de Plinn permet de gérer les membres du portail en les répartissant dans des groupes. On
adjoint des rôles globaux6 sur les groupes et l’appartenance d’un utilisateur à un (ou plusieurs) groupe(s)
lui donne ses rôles. L’interface web de l’annuaire a volontairement été conçue pour qu’il ne soit pas pos-
sible d’associer des rôles globaux directement aux membres, mais uniquement par l’intermédiaire des
groupes. Cependant, pour qu’un utilisateur puisse s’authentifier sur le portail, il faut qu’il dispose au
moins du rôle « Membre ». Pour résoudre ce cas particulier, la création d’un nouvel utilisateur, le place
automatiquement dans le groupe par défaut « Membres » qui possède le rôle de « Membre ».
Cette manière de procéder apporte une certaine souplesse dans la gestion des accès. À titre d’exemple
voilà deux opérations qui sont immédiates avec cette approche :
— pour désactiver temporairement l’accès authentifié au portail, il suffit de supprimer le rôle « Mem-
bre » au groupe « Membres ».
— pour que l’inscription des nouveaux membres soit soumise à vérification (modération), il suffit de
créer des utilisateurs sans rôle et donc sans privilèges et de piloter l’ajout dans les groupes par un
workflow.
Naturellement, il est toujours possible de « mettre en dur » un rôle sur un utilisateur, pour cela, allez
dans la ZMI et ajoutez le rôle souhaité dans l’objet acl_users. Il est d’ailleurs souhaitable que l’adminis-
trateur technique du site ait le rôle d’administrateur « en dur » pour que son accès ne soit pas à la
merci d’une erreur de manipulation dans l’annuaire.
L’outil de gestion de l’annuaire de Plinn peut être utilisé par des personnes qui ne sont pas nécessaire-
ment administrateur complet. Un rôle spécial pour l’administration de l’annuaire, « Adm. annuaire »
est prévu à cet effet : il autorise la gestion des membres, des groupes mais interdit la gestion des rôles.
Le cas d’utilisation standard consiste à ce qu’un administrateur du portail crée les premiers groupes et y
associe des rôles. Ensuite, l’administrateur de l’annuaire prend le relais pour s’occuper de la gestion des
utilisateurs.
L’interface de gestion de l’annuaire s’affiche en cliquant sur le lien « Annuaire » situé dans la colonne
de droite du portail. Elle se compose de quatre onglets :
— Membres des groupes : pour gérer la constitution des groupes par ajout / retrait de membres ou
de sous-groupes ;
— Données des groupes : pour modifier le titre et la description des groupes et leur ajouter des
rôles ;
— Membres du portail : pour ajouter, modifier et supprimer des membres et visualiser l’arborescence
des dossiers qui leurs sont accessibles ;
— Tous les groupes : pour ajouter et supprimer des groupes.
Ajouter, modifier et supprimer des membres
— Cliquez sur l’onglet « Membres du portail ».
— Ajouter un membre : utilisez le formulaire « Nouveau membre » comme ci-dessous.
6 Rôles qui s’appliquent dans l’ensemble du portail
Les échos du Plinn no 0, janvier 2006 — 15




— Modifier un membre : double-cliquez sur le membre dans la liste « Tous les membres », le for-
mulaire de droite se met à jour avec les données du membre sélectionné comme illustré ci-dessous.
Si javascript n’est pas activé, sélectionnez un membre dans la liste et cliquez sur « Modifier ».
— Supprimer des membres : Sélectionnez les membres à supprimer dans la liste « Tous les mem-
bres » et cliquez sur « Supprimer la sélection ». Pour faire une sélection d’éléments disjoints,
maintenez la touche Ctrl (ou ⌘ sur macinthosh) et cliquez sur les éléments à sélectionner.
Ajouter et supprimer des groupes
L’ajout et suppression de groupes s’effectue dans l’onglet « Tous les groupes » dont le maniement est
semblable à celui des membres. En revanche, la modification des groupes existants ne se fait pas à ce
niveau mais dans l’onglet « Données des groupes » qui sera expliqué plus loin.
Composition des groupes
Pour ajouter des membres et des sous-groupes dans des groupes, chargez l’onglet « Membres des grou-
pes ». Dans la partie gauche, cliquez sur le nom du groupe, de manière à faire apparaître sa composi-
tion. Vous obtenez le résultat ci-dessous.
Utilisez les formulaires à double listes pour ajouter ou supprimer des membres et des sous-groupes.
Les échos du Plinn no 0, janvier 2006 — 16


Attribution des rôles
L’onglet « Données des groupes » permet d’une part de changer les titres et les descriptions des grou-
pes, et d’autre part, d’affecter les rôles globaux. Cet onglet est constitué d’une arborescence pour sélec-
tionner le groupe à modifier de deux formulaires superposés : le premier permet la modification du titre
et de la description du groupe, le deuxième des rôles.
Pour ajouter des rôles, procéder comme suit :
— Sélectionnez le groupe à modifier dans l’arborescence en cliquant sur son nom.
— Dans le formulaire en bas à droite, choisissez le rôle à ajouter et cliquez sur le bouton « Ajouter ».
— Répétez cette dernière opération pour chaque rôle à ajouter.
Pour retirer des rôles, procéder comme suit :
— Dans la liste des « Rôles explicites », cocher les cases correspondant aux rôles à retirer et cliquez
sur le bouton « Retirer ».
Un groupe placé dans un autre acquiers les rôles de ce dernier. Ces rôles sont affichés dans la liste
« Rôles implicites ». Pour retirer les rôles implicites à un groupe, il faut l’enlever du (des) groupe(s) qui
les lui procure(nt). Cette opération s’effectue dans l’onglet : « Membres des groupes ».
Par exemple, comme ci-dessous, le groupe « Modérateurs » obtient le rôle de « Membre » par son
appartenance au groupe « Membres ». Il suffit de l’en retirer pour qu’il n’en bénéficie plus.
Détails techniques
Problématique posée par la gestion des groupes
La gestion des groupes n’existe pas nativement dans ZOPE. Plinn utilise donc un produit ad-
ditionnel, GRUF (Group User Folder), qui apporte cette fonctionnalité.
Les attributs des objets ZOPE sont protégés par des permissions, et, à chaque accès, le Zo-
peGuard (composant assurant la sécurité) vérifie que l’utilisateur connecté y est autorisé.
Les permissions ne sont pas immédiatement attribuées aux utilisateurs : elles sont d’abord
regroupées dans des rôles, et ces rôles sont attribués aux utilisateurs. Pour introduire la
gestion par groupe, tout en restant dans le cadre de l’API ZOPE, GRUF effectue cette combi-
naison :
— les utilisateurs « voient » les groupes comme des rôles ;
— les groupes sont physiquement des utilisateurs (avec un attribut drapeau pour les distin-
guer des « vrais » utilisateurs).
Le premier point permet donc d’associer un utilisateur à un groupe (et par extension, un
groupe à un groupe) et le deuxième d’attribuer des « vrais » rôles (globaux ou locaux) aux
groupes. Le corollaire est qu’un utilisateur appartenant à un groupe acquière les rôles affec-
tés aux groupes.
Voilà donc expliqué sommairement les fondements du fonctionnement de GRUF qui rend
possible, techniquement, la gestion des groupes.
Les échos du Plinn no 0, janvier 2006 — 17


L’opération pour récupérer les rôles d’un utilisateur est immédiate car il s’agit d’une donnée
intrinsèque7. En revanche, pour déterminer l’ensemble des utilisateurs correspondant à un
rôle, l’opération consiste à itérer sur l’ensemble des utilisateurs et vérifier à chaque fois l’ap-
partenance au rôle considéré. Or, au sein de GRUF, les groupes sont perçus par les utilisa-
teurs comme des rôles, l’obtention des utilisateurs appartenant à un groupe est donc sou-
mise au même problème.
Les outils de gestion des groupes
Dans la logique interne de GRUF dont on vient d’exposer les justifications techniques, on af-
fecte des groupes à un utilisateur. Pour la gestion d’un annuaire, il est préférable (car plus
naturel) d’ajouter des utilisateurs dans un groupe. Plinn dispose donc de ses propres outils
pour assurer cette fonction. Il s’agit de GroupsTool et GroupsDataTool qui héritent des outils
CMF équivalents fournis par GRUF.
GroupsTool est l’outil d’interrogation et de gestion des groupes de l’annuaire. Pour palier les
temps de réponses longs, il est cacheable, et par défaut, le profil de configuration8 de Plinn
l’associe au RAM Cache Manager nommé « rcm », à la racine du portail.
Trois vues différentes sont mises en cache :
— getGroupsOfGroup : pour retrouver les groupes inclus dans un groupe ;
— getRootGroups : pour retrouver les groupes racine (n’ayant aucun parent) ;
— getUserNamesOfGroup : pour retrouver les utilisateurs inclus dans un groupe.
Les méthodes de manipulation des groupes se chargent d’invalider sélectivement les vues.
En plus de la gestion des groupes au niveau de l’annuaire, l’API de GroupsTool est aussi
employée pour retrouver les rôles locaux sur les objets (utile dans les onglets « Partages »).
Pour plus d’informations, reportez-vous aux codes de GroupUserFolder/GroupsTool.py et
Plinn/GroupsTool.py.
GroupDataTool.py possède deux classes : la première, GroupDataTool, a pour fonction de
wrapper sur les groupes des instances de la deuxième classe, GroupData, qui adjoint dyna-
miquement des données supplémentaires et des méthodes spécifiques, à la manière de
MemberDataTool.py du CMF. Les méthodes en question sont removeMember, addMember,
removeGroup, addGroup
et elles s’appliquent effectivement à un groupe : on est donc capa-
ble d’ajouter un utilisateur ou un groupe à un groupe en non plus l’inverse.
Les outils de gestion des utilisateurs
Plinn utilise également des versions augmentées des outils MembershipTool, MemberData-
Tool et RegistrationTool. Les surcharges opérées ont deux buts principaux :
— Constituer dynamiquement une liste de rôles que l'utilisateur authentifié pourra accorder
dans les partages. Avec le fonctionnement du CMF standard, un utilisateur qui n'est pas
administrateur ne peut accorder que les rôles dont il dispose déjà, par exemple : un pro-
priétaire
d'un dossier ne pourra accorder que le rôle de propriétaire aux autres membres,
et notamment, il ne pourra pas attribuer un rôle en lecture seule. Dans Plinn, la méthode
MembershipTool.getCandidateLocalRoles a été surchargée de la manière suivante : on
récupère la liste des permissions de l'utilisateur pour le contexte donné, et l'on renvoie
7 Affirmation valable pour les rôles globaux
8 Profil géré dans CMFSetup
Les échos du Plinn no 0, janvier 2006 — 18


tous les rôles dont les permissions constituent des sous-ensembles des permissions de
l'utilisateur. De cette façon, un utilisateur peut partager un élément de manière égale ou
plus restrictive. Ce mécanisme ne se limite nullement aux seuls rôles définis à la racine
du portail.
— Rendre les objets de type MemberData « workflow aware » pour que l'inscription des
nouveaux membres puisse être soumise à un workflow de validation. Trois modes d'enre-
gistrement des nouveaux membres sont disponibles comme indiqué ci-dessous :
Le choix du mode se fait dans la ZMI avec l'outil portal_registration qui se trouve à la ra-
cine du portail. Le mode « Inscription modérée » permet de définir la séquence de work-
flow des objets MemberData. La syntaxe est identique que dans l'onglet « Workflows » de
l'outil portal_workflow (noms de workflows séparés par des virgules et espaces). Quelque
soit le mode sélectionné, l'outil configure automatiquement les permissions nécessaires
au bon fonctionnement, et, dans le cas de l'inscription modérée, l'outil portal_workflow.
Plinn est livré avec un workflow d'inscription de membres se nommant « member_work-
flow ». Pour l'utiliser, entrez le paramétrage comme ci-dessus.
Les échos du Plinn no 0, janvier 2006 — 19