Sommaire FI 3/2004 plate-forme Open Source de développement de sites communautaires [email protected], Domaine IT Introduction Si ces derniers temps nous avons connu un séisme de force 5, celui qui se prépare dans le domaine des systèmes de gestion de contenu (ou CMS) Open Source s’annonce tout aussi fort. Pour preuve: ❚ les publications du Domaine IT qui sont sous SPIP (Système de Publication Pour Internet); ❚ nos quelques 160 sites éditoriaux actuellement sous Jahia v.3 vont progressivement passer sous Jahia v.4 qui va apporter la gestion multilingue et un circuit de validation ou workflow des contenus éditoriaux; ❚ le site actualites exploité par le Service de presse & information utilise php-Nuke; ❚ et un nouveau candidat pour les sites communautaires et bases de connaissances qui fait beaucoup parler de lui, Zope/CMF, ou plus exactement Python/Zope/CMF/ Plone qui fait l’objet de cet article. 1 Plone – plate-forme Open Source de développement de sites communautaires Francis Lapique 2 DIT-info ◗Redhat@epfl ◗Nouveaux collaborateurs au DIT 3 Un monde parfait adldap ou la synchronisation entre annuaires LDAP pour Active Directory Laurent Kling 16 Concours de sécurité informatique 16 Séminaire FEMLAB 17 Impression numérique couleur directement depuis votre poste de travail Roland Chabloz 21 Persistance des objets Java avec Hibernate Laurent Boatto 23 Les nouveautés d’Outlook 2003 Jacqueline Frey 24 Programme des cours Pour les lecteurs qui désireraient très rapidement avoir une idée du produit PLONE, je les encourage à visualiser les vidéos disponibles sur le site www.plone.fr. suite en page 11 27 Un roboceptionniste à l’accueil du DIT Dora Derauze 28 Attention virus! Christian Raemy 28 Concours de la meilleure nouvelle fi 3 – 30 mars 2004 – page 1 Plone, plate-forme Open Source de développement de sites communautaires suite de la première page Schéma de principe Une première remarque, le choix de l’Open Source pour l’ensemble des concepts et outils visant à résoudre les problèmes de production de contenu des sites Web reste toujours le bon. La diversité et la richesse des frameworks Open Source écrits en Java/PHP/Python est la seule approche qui couvre l’ensemble des fonctionnalités essentielles d’un système de gestion de contenu qui sont: ❚ la gestion des utilisateurs et de leurs droits; ❚ la création et l’édition de contenu; ❚ le stockage du contenu; ❚ les métadonnées (ensemble de propriétés décrivant le contenu); ❚ la gestion de la qualité de l’information (workflow); ❚ l’indexation et la recherche; ❚ la gestion de l’interface utilisateur; ❚ la syndication (regroupement d’informations provenant de différentes sources). Une deuxième, pour compléter la première. Tous ces outils ou solutions sont-ils en concurrence directe? Oui et non. Oui, car tous font de la gestion et production de contenu. Non, si vous prenez Jahia, c’est un CMS qui cible des portails d’information et non celui de communautés en ligne. Zope c’est l’inverse. Au milieu, je vous l’accorde c’est assez confus. Une troisième, il est impossible dans le cadre d’un article de couvrir tous les aspects d’un framework tel que Python/ Zope/CMF, nous irons à l’essentiel avec tout ce que cette démarche sous-entend comme frustration pour le lecteur comme pour l’auteur. La gestion de contenu avec ZOPE et le CMF Architecture technique vue d’avion Commençons par le commencement. Qu’est-ce que Zope? En une seule phrase, comme l’indiquent O. Deckmyn et P-J. Grizel dans leur livre Zope (2e édition): Zope est un environnement de publications d’objets sur le Web. Zope à l’image du langage de programmation Python sur lequel il est bâti à 90% est orienté objet. Insistons, avec Zope, on ne publie pas des pages Web mais des objets pouvant être assemblés automatiquement à partir de composants dont le comportement, les données et l’apparence sont configurables par le concepteur du site. La persistance de ces objets est assurée par une base objet, la ZODB (Zope Object Data Base). L’ensemble est stocké dans un fichier data.fs. Ce fichier contient non seulement les versions des objets utilisés, mais un historique des modifications apportées, ce qui permet de revenir à un état précédent. La base ZODB est transactionnelle, ce qui signifie que tout traitement entamé est soit terminé avec succès soit annulé. Chaque objet possède un contexte qui lui est propre. Les objets Zope les plus courants appartiennent aux classes Folder, Document et Method. Ils sont à prendre dans le cadre de la programmation objet. Un objet est défini par: ❚ son état (l’ensemble des valeurs de ses attributs); ❚ son comportement (l’ensemble des méthodes qui lui sont applicables). La plupart des objets Zope possèdent une méthode qui permet leur représentation en HTML. Pour un Folder, cette méthode affiche un document particulier à l’intérieur du Folder. La publication de ces objets est gérée par un composant de Zope nommé Zpublisher. La fig. 1 montre l’architecture de la plate-forme Zope. Fig. 1 Les requêtes HTTP parviennent à Zserver (un composant qui comme son nom l’indique joue le rôle de serveur Web; Zope peut aussi être placé derrière un serveur classique Apache). Elles sont transformées en requêtes interprétables par Zpublisher. Comment invoquer des méthodes d’objets sur le serveur Zope? Avec Apache, l’URL localhost/web/test/mapage.html revient à accèder au fichier mapage.html situé dans le répertoire DocumentRoot/web/test/ de la machine localhost. Sous Zope: localhost:8080/web/test/mapage.html signifie publier l’objet mapage.html contenu dans l’objet test contenu dans l’objet web contenu dans la racine de la base ZODB. Site collaboratif sous ZOPE/CMF Un site collaboratif est un site sur lequel des internautes fournissent le contenu et le mettent en valeur pour d’autres à travers 4 grandes étapes: ❚ Identification: un membre s’identifie et accède à un espace privé au sein du site. ❚ Composition: le membre-rédacteur rédige un article, une brève. Ce document restera privé tant que son auteur ne déclarera pas explicitement qu’il veut le partager avec la communauté. ❚ Modération et validation: le rédacteur décide de publier son contenu. Suivant le type de données et les règles en vigueur sur le site, l’information est soit directement mise en ligne, soit sujette à l’approbation d’un modérateur ou relecteur. ❚ Publication: le contenu publié est classé et indexé en fonction de son type, du workflow associé et de ses métadonnées. fi 3 – 30 mars 2004 – page 11 Plone, plate-forme Open Source de développement de sites communautaires Products/Zope. Démarrez Zope et vérifiez son bon fonctionnement en vous connectant à l’url: localhost:8080 ou dans son environnement de développement localhost:8080/manage. Vous trouverez sur le site Zope The Zope Book (2.6 Edition) qui fait environ 500 pages en format PDF. Vous pouvez également vous procurer en librairie le livre Zope 2ème édition déjà cité, très bon ouvrage qui couvre l’essentiel de Zope, du langage Python et donne des exemples de mise en oeuvre trés didactiques. CMF Le CMF (Content Management Framework) offre un ensemble de services de base pour la gestion de contenu comme la gestion: ❚ d’un espace personnel: le contenu n’est pas situé à l’endroit où il est affiché; ❚ du processus de création de contenu par les membres: dans son espace privé le membre ajoute du contenu en selectionnant le type de contenu; ❚ du workflow de publications: le concepteur du site peut déterminer tous les états possibles, les transitions, les acteurs; ❚ de l’indexation et du moteur de recherche: tous les contenus créés sont indexés dans un moteur de recherche intégré à Zope; ❚ de l’interface utilisateur: séparation du contenu, de la logique et de la présentation sur un concept de Skins; ❚ des métadonnées: on peut associer à tous les contenus du site un ensemble de métadonnées définies par le standard Dublin Core (titre, description, sujet,...); ❚ des versions: chaque rédacteur peut revenir à une version précédente de son contenu; ❚ de la syndication: le CMF permet d’exposer n’importe quel contenu de votre site sous forme RSS XML. Et Plone dans tout cela? C’est l’outil de gestion de contenu (CMS) construit au dessus du CMF. C’est la simplicité d’utilisation et la robustesse de Plone qui ont permis à Zope d’avoir le succès qu’il a actuellement. Le nombre de sites Plone dans le monde ne cesse de croître. Installation et configuration PYTHON/ZOPE L’installation de Zope est très simple et ne doit prendre que quelques minutes (ça fait rêver quand une suite de produits équivalents d’un grand éditeur va vous prendre au bas mot 8 à 10 jours et sans garantie de résultat!). A l’heure actuelle la version 2.7 est officiellement sortie, vous pouvez télécharger sa version binaire pour Windows (.exe), Linux (.rpm ou .tar.gz) et Mac OS X à l’adresse: www.zope.org/ fi 3 – 30 mars 2004 – page 12 CMF est une extension de Zope livrée sous forme de Produits. Pour l’heure vous trouverez une archive de sa version 1.4.2 à l’adresse: cmf.zope.org/download. Cette archive comprend les sous-répertoires: CMFCore, CMFDefault CMFTopic, CMFCalendar et DCWorkflow. Copiez tous ces répertoires sous celui de Zope: la_où_vous avez_zope/lib/ python/Products/. Redémarrez Zope et vérifiez au moyen du menu Control_Panel->Product Management de l’interface de management de Zope (localhost:8080/manage ou ZMI) la présence de l’infrastructure CMF. Quelques mots sur ces composants CMF: ❚ CMFCore fournit l’infrastructure de base du framework ❚ CMFDefault fournit une implémentation d’un site de type portail simple ❚ CMFTopic permet de gérer des objets de type Topic qui encapsulent des requêtes prédéfinies par l’utilisateur vers le moteur d’indexation ❚ CMFCalendar permet de gérer des objets de type Event et de les afficher au sein du portail via un calendrier ❚ DCWorkflow comme son nom l’indique est une solution de mise en œuvre de workflow pour les applications CMF. PLONE Dernière étape: l’installation de Plone. Téléchargez le produit dans sa version 2.0 à l’adresse: plone.org/downloads/. Le produit Plone, couche au-dessus de CMF, fournit un applicatif utilisable Out of the Box par l’utilisateur final. Attention pour une utilisation du support des langues vous avez besoin des produits: i18n, Localizer et TranslationService. Si vous rencontrez des problèmes avec l’internationalisation de Plone, n’installez pas le produit TranslationService. Redémarrez Zope pour vérifier que tout se passe bien. Présentation des composants et service d’un site PLONE La gestion d’un site Plone a deux aspects: ❚ technique à travers l’interface localhost:8080/monsite/ manage où monsite est l’id (voir plus bas) du site ❚ gestion de contenu avec comme interface localhost: 8080/monsite Créer un site: PLONE Rien de plus simple, lancez l’interface de management Zope, allez dans le menu déroulant à droite, choisissez Plone Site. Vous obtenez un formulaire. Plone, plate-forme Open Source de développement de sites communautaires Ce formulaire vous invite à donner l’identifiant de l’objet, pour nous ce sera monsite, le titre donné au site, l’endroit de stockage de la base des utilisateurs du site (dans l’arborescence de notre site ou dans le dossier acl_users à la racine du site Zope) et une description sommaire. Cliquez le bouton Add et vous êtes automatiquement dirigé sur la page d’accueil. Le site est prêt à l’emploi. Pour un paramétrage avancé cliquez le lien plone setup. Vue technique: services du site En ouvrant notre site en mode manage sous un compte administrateur vous pouvez voir le contenu de l’objet représentant le site Plone. Vous y trouverez des composants d’aide à la mise en œuvre du site: ❚ MailHost pour envoyer des e-mails; ❚ le dossier Members. Chaque membre va se voir attribuer un dossier, plus exactement un conteneur de type Portal Folder ou Plone Folder qui lui sera propre; ❚ acl_users objet User Folder contenant les utilisateurs déclarés avec leur rôle; ❚ l’objet content_type_registery, définition de la correspondance entre les types MIME et les types de contenu; ❚ l’objet cookie_authentication pour configurer les paramètres d’authentification dans le navigateur de l’utilisateur; et des composants d’infrastructure de services: ❚ portal_catalog pour l’emploi du moteur d’indexation ❚ portal_actions présente les actions disponibles pour un utilisateur sur un document ou un dossier donné ❚ portal_discussion permet de configurer la possibilité de discuter chaque document du portail (mini-forums) ❚ portal_membership pour gérer le mécanisme d’authentification des membres ❚ portal_memberdata permet de définir les propriétés que l’on souhaite conserver pour chaque utilisateur ❚ portal_metadata fournit l’interface de gestion des métadonnées ❚ portal_properties pour y définir des fiches de propriétés ❚ portal_skins fournit les services de l’interface graphique du site. Un/une skin est un ensemble de mises en page graphiques pour respecter la sacro-sainte séparation contenu/design/logique que TOUT gestionnaire de contenu se doit de respecter. fi 3 – 30 mars 2004 – page 13 Plone, plate-forme Open Source de développement de sites communautaires L’en-tête contient un logo, un petit formulaire de recherche, et des onglets de navigation. Les côtés contiennent plusieurs boîtes à outils. A gauche, une boîte de navigation représente une arborescence comme dans un explorateur Windows. A droite, la boîte des publications récentes et un calendrier qui indique les événements du mois en cours et la date du jour encadrée d’un petit rectangle rouge. Dans la partie centrale, le contenu du document que vous visualisez. En haut à droite quelques actions rapides: envoyer le lien par e-mail, imprimer la page, ajouter aux favoris. Pour ajouter du contenu, cliquez my folder dans la barre d’outils à côté d’admin. Une liste déroulante propose tous les types de contenus que vous avez le droit de rajouter. Pour publier cliquez l’onglet state et choisir publish. Suivant la règle du site, l’article est publié directement ou soumis au modérateur. La date d’activation permet de choisir la date à partir de laquelle l’article sera visible des autres utilisateurs. La date d’expiration permet quant à elle de retirer un article à partir d’une certaine date. Il est possible d’autoriser d’autres personnes à travailler sur vos documents en cliquant sur l’onglet sharing. Pour ce faire, ajoutez un membre existant et attribuez lui un rôle pour le document. Pour modifier il faut vérifier que son état est autre que publish. Vous pouvez modifier l’ordre d’apparition de vos articles. Personnalisation Vous avez deux types de personnalisation, une personnalisation graphique (l’apparence du site) et une autre fonctionnelle. Dans le cadre de cet article nous ne pouvons qu’en décrire les grandes lignes. ❚ portal_types, vous définissez pour chaque type de contenu, les actions par lesquelles l’utilisateur interagit avec le contenu en fonction de ses droits. ❚ portal_workflow aide à définir le cycle de vie du contenu ❚ portal_syndication gère la syndication du contenu à travers le site ❚ portal_undo permet l’annulation des actions effectuées sur le contenu ❚ portal_form permet de gérer les formulaires d’édition associés à vos types de contenu. ❚ portal__calendar permet la gestion de contenu de type Event, et l’accès au contenu du site sur des critères de date Vue utilisateur Sur la figure précédente, on distingue 4 parties: 1. l’en-tête 2. les côtés 3. la partie centrale 4. le pied de page fi 3 – 30 mars 2004 – page 14 Personnalisation graphique L’architecture du CMF met en œuvre un mécanisme de Zope nommé skins qui permet de modifier l’apparence du site en choisissant une méthode de présentation. Une skin est composée de méthodes DTML ou ZPT et de scripts Python. Le DTML est un langage à balises pour modèle de document qui est en train de s’effacer au profit de ZPT ou Zope Page Template. Le grand enjeu de ZPT est de proposer une approche pour améliorer la collaboration entre les différents intervenants techniques du projet et plus particulièrement les graphistes et les développeurs. Le principe général de ZPT repose sur une astuce simple: les règles de transformation sont portées par les attributs des balises HTML. Exemple: Si la maquette graphique dispose de la phrase suivante: Plone, plate-forme Open Source de développement de sites communautaires <h1>Le titre du chapitre</h1> l’intégration dans une page template se fera en écrivant: <h1 tal:content="here/title_or_ id">Le titre du chapitre</h1> En dehors de Zope, le navigateur affiche la chaîne «Le titre du chapitre»; dans Zope, title_or_id renvoie le titre du document s’il en possède ou son identifiant dans le cas contraire et le substitue au titre statique. L’expression tal: content="here/title_or_id" est un attribut de TAL (Template Attribute Language) qui complète HTML en fournissant des attributs permettant d’effectuer des actions dynamiques. La variable here correspond au contexte de la page en cours. Voici un exemple plus complet pour afficher les attributs des objets contenus dans un dossier: <table> <tr> <th>Id </th> <th> Titre </th> <th> Dernière modification </th> </tr> <tr tal:repeat="Item here/objectValues". <td tal:content="item/getId"> MonObjet </td> <td tal:content="item/title"> MonObjet à moi</td> <td tal:content="item/bobobase_modification_ time"> 27/02/2004 </td> </tr> </table> Un exemple pratique Comment modifier le haut de page comprenant le logo? Cette opération est très simple: 1. vous êtes dans la ZMI (localhost:8080/monsite/manage) suivez le chemin portal_skin->plone_images; 2. cherchez et sélectionnez dans la liste logo.jpg; 3. cliquez Customize pour créer une version personnalisée de cette image; 4. cliquez le bouton Browse pour aller chercher votre image puis Upload. Vous avez créé dans le dossier custom un nouvel objet logo.jpg qui est en tête de liste. Vous pouvez faire des choses plus complexes en modifiant le contenu du répertoire portal_skins->plone_styles qui contient toutes les feuilles de styles ou portal_skins->plone_templates pour les templates (header, footer,...). Personnalisation fonctionnelle Passons aussi brièvement sur la personnalisation fonctionnelle. C’est à dire la personnalisation du comportement du CMF et de la manière dont sont stockées et gérées les données qui forment le contenu du site. Vous pouvez personnaliser le workflow en cliquant sur l’outil portal_workflow comme les types de contenu simple tels que Document, News Item, Image, File, Link, Favorite. Nous laisserons de côté, dans le cadre de cet article, le workflow. Le composant portal_type vous offre plusieurs solutions pour définir vos propres types de contenu. De la plus simple à la plus complexe 1. personnaliser directement un type défaut; 2. recopier un type défaut et s’en servir de base; 3. définir un type à partir d’une extension de type Zclass (une Zclass est un produit Zope qu’il est possible de créer de rien ou d’étendre d’une classe existante par héritage); 4. définir un type à partir d’une extension de type Produit Python. Pour modifier, par exemple le News Item, sélectionnez sous portal_types l’objet News Item (Actualites). La figure suivante vous donne une image de cette interface. Si vous voulez ouvrir cet objet à la discussion, cochez la case Allow Discussion? Cliquez ensuite sur l’onglet Actions pour découvrir les actions associées au type. L’action View est associée à l’action newsitem_view et State au programme python object and portal.portal_workflow.getTransitionsFor (object, object.getParentNode()). Terminer la personnalisation en vous reportant au template de visualisation ou d’édition. Mise en production et montée en charge Zope est un serveur d’applications disposant d’un serveur HTTP interne, mais comme toujours il est vivement conseillé de lui adjoindre un serveur HTTP pour laisser Zope jouer simplement son rôle de serveur d’applications. Dans le cas d’Apache comme serveur Web frontal, modifier le fichier httpd.conf pour faire intervenir les mod_proxy et rewrite. Utiliser les gestionnaires de cache de Zope: RAM Cache manager pour l’organisation du CPU et HTTP Accelerated Cache Manager pour l’optimisation de la bande passante. Pour les très gros sites (montée en charge) et pour les sites critiques vous pouvez aller vers des solutions clusters. Il faut jeter un coup d’œil sur ZEO (Zope Entreprise Object) qui permet de construire des clusters de serveurs Zope. fi 3 – 30 mars 2004 – page 15 Plone, plate-forme Open Source de développement de sites communautaires Conclusion Développé par la société Digital Creations, ZOPE est commercialisé jusqu’en novembre 1998, date à laquelle cette société décide de placer son application en open source. Et depuis, la diffusion de Zope ne fait qu’augmenter, en partie grâce au succès remporté par Plone. L’énorme force de Zope c’est le langage Python, orienté objet très facile d’approche et la pléthore de composants prêts à l’emploi (authentifier les utilisateurs avec LDAP, gérer un caddy de e-commerce, mettre en ligne un sondage,...). Pour la suite prendre contact avec le signataire de l’article pour aller plus loin,... Modélisation multiphysique Inscription souhaitée www.comsol.fr/activities/. Références 1. 2. 3. 4. 5. 6. Séminaire FEMLAB www.zope.org/ www.zope.org/Products/ cmf.zope.org/ www.plone.org/ www.python.org/ www.zopezen.org/ Communautés en Europe 1. Allemagne: www.zope.de 2. Zope en France: www.zopera.org 3. Plone en France: www.plonefr.org Livres 1. Learning Python, Second Edition by David Ascher (Author), Mark Lutz (Author) 2. Python Cookbook by Alex Martelli (Editor), David Ascher (Editor) 3. Zope, Olivier Deckmyn, Pierre-Julien Grizel 4. Les Cahiers du programmeur Zope: Premier site collaboratif avec Zope/CM - Kamon Ayeva ■ Failles Web, cryptographie, stéganographie, reverse engineering, failles applicatives et d’autres défis sont au programme Concours de sécurité informatique Organisé par 7 étudiants de l’ESIEA (Ecole Supérieure d’Informatique, d’Electronique et l’Automatique - France) Venez tester, améliorer et comparer vos connaissances en sécurité informatique et remportez de nombreux lots ! Renseignements, inscriptions: [email protected] fi 3 – 30 mars 2004 – page 16 à l’adresse: 7 avril 2004, 10h30 salle de conférence du DIT EPFL-Ecublens Bâtiment MA - 1015 Lausanne Résumé du séminaire ❚ introduction et résolution d’un problème couplé, non-linéaire (multiphysique) ❚ méthode de résolution, structure de FEMLAB, modification des EDP ❚ FEMLAB dans l’environnement Matlab ❚ illustrations sur d’autres exemples, en fonction de l’intérêt de l’auditoire: ◗changement de phase: fusion d’un bloc de glace ◗modèles de pile à combustible 2D et 3D ◗cristal photonique, divers guide d’ondes, calculs d’impédances ◗frittage de poudre par micro-ondes ◗réservoir pressurisé avec éléments de coques ◗piezoélectricité ◗écoulement diphasique ◗… Les sujets sont adaptés selon l’auditoire: n’hésitez pas à préciser vos centres d’intérêt lors de votre inscription. Vous êtes également invités à nous soumettre votre problème (géométrie, conditions limites et équations à résoudre) que nous résoudrons avant ou pendant le séminaire. Merci de nous l’envoyer par email à l’adresse suivante: [email protected]. Une introduction à FEMLAB sous forme de démonstrations animées est donnée sur www.comsol.fr/showroom/.