Migration 0.7 – 0.9 : points pratiques

Hier, nous avons installé Lodel 0.9. Aujourd’hui, le programme est plus compliqué : migrer des sites en 0.7 vers des sites en 0.9. Toujours avec l’aide du développeur de Lodel, ce qui accélère grandement les choses.
Les structures sont différentes entre la version 0.7 et 0.8 : par exemple, l’identifiant est unique en 0.8 et représentent un objet. En 0.7, le français est la langue de base, en 0.8, c’est l’anglais. Tout ceci nécessite quelques adaptations, qui seront rendues plus faciles grâce aux scripts de migration fournis, mais il est indispensable de bien connaître le modèle éditorial (ME) de l’ancienne version et le modèle éditorial pour la nouvelle version : c’est pourquoi, il est conseillé de faire en amont un travail complet de définition du modèle éditorial pour limiter les adaptations pour chaque site du paquet de sites à migrer. Les évolutions futures du modèle seront ensuite plus facile à mettre en oeuvre. En pratique, il est conseillé de définir un ME propre sur un site vide, de l’exporter au format XML dans le répertoire définit à l’installation de lodel et d’importer ce ME à l’étape d’import XML après la migration.

Au niveau des données

Il faut d’abord effectuer dans l’interface d’administration du site à migrer (0.7) un export des données. Ces données sont ensuite importées dans un lodel 0.7 utilisé uniquement pour la migration.
Le script va casser la base de données, il donc indispensable de travailler sur une copie du site en production pour que le site en production reste accessible. Après le passage de ce script, la base peut fonctionner en 0.8. Le script n’efface pas les données, les tables originelles sont copiées dans des tables nommées nom-table_old.

Migration

Tout ce qui est relatif au modèle éditorial porte pour l’exemple sur celui de Revues.org.

Copier le script http://sourcesup.cru.fr/cgi/viewvc.cgi/branches/version_0_7-bugfixes-branch/export_to_08.php à la racine du site en 0.7 (par exemple dans le répertoire mondomaine/monsite07). Copier également le script http://sourcesup.cru.fr/cgi/viewvc.cgi/branches/version_0_7-bugfixes-branch/lodel/scripts/07to08.php dans le répertoire lodel/scripts (mondomaine/monsite07/lodel/scripts).

Prêt? Alors lancez http://mondomaine/monsite07/export_to_08.php

A priori, il n’y a pas besoin de modifier les champs g_title et g_name, donc laisser la valeur par défaut. Le troisième champ sert à déplacer les documents annexes et les sources, on les déplacera manuellement dans une étape ultérieure. En résumé, on décoche tout.

La base de données est maintenant prête à être utilisée en 0.9. Il faut donc faire un dump de celle-ci, et l’importer dans un site en 0.9.

Nous pouvons maintenant effectuer la mise à jour du modèle éditorial via l’import XML.

Il va falloir indiquer à lodel comment se correspondent les champs entre les deux versions : l’ancien modèle éditorial est présenté à gauche, le nouveau est à droite.

Si le ME a été transformé par rapport au modèle par défaut, ne pas indiquer de correspondance et laisser le champ vide (dans la colonne nouveau ME), lodel ajoutera le champ.

Les classes du ME correspondent à des tables de la base de données. Chaque champ doit être compris dans un groupe de champs.

En 0.8, la classe documents est transformée en classe textes.

  • étape 1 : mise à jour des groupes de champs
  • étape 2 : mise à jour des classes. la classe documents n’a pas d’équivalent dans le ME et devient textes.
  • étape 3 : mise à jour des champs
  • étape 4 : conversion des types
    • plan = information
    • chercheur = individu
    • volume = rubrique
    • colloque = rubrique
    • regroupement = souspartie
    • docannexe-lienfichier = fichierannexe
    • docannexe* = lienannexe
    • breve = billet
    • presentation = information
    • regroupement-documentsannexes : pas d’équivalent
    • articlevide = article
    • objetdelarecension : pas d’équivalent
    • motcle = motclesfr
    • periode = chrono
  • étape 5 :
    Si jamais vous recevez comme nous l’erreur “unknown column mask”, pas de souci, une petite modif de table dans mysql : alter table tablefields_oldME add mask text not null
  • étape 6 : on y est presque, il s’agit de faire la concordance pour les textes simples
    • lien = url
    • datepubli = date

La mise à jour du ME est presque terminée. On peaufine en lançant un dernier script complete.php qui est une compilation des scripts disponibles sur http://www.lodel.org/wiki/index.php/Migration_Lodel_0.7_vers_Lodel_0.8.

Il reste encore à transférer à la main les documents annexes et les fichiers sources (on l’avait laissé à faire pour plus tard…) : il faut copier en respectant les permissions sur les répertoires (donc utiliser les options p et r pour la commande cp). Donc, copier le répertoire docannexe de l’ancien site vers le nouveau site, ainsi que le répertoire lodel/sources. En 0.9, puisque la langue de base est l’anglais, docannexe contient un sous-répertoire file, ne pas renommer la copie du répertoire fichier du site en 0.7 : les répertoires file et fichier cohabiteront sans problème dans le répertoire docannexe et assureront la continuité dans le nommage des documents annexes.

Une dernière question sur l’indexation pour terminer la matinée…

Pour activer le moteur de recherche interne, il faut affecter la variable searchEngine à true dans le fichier lodelconfig.php global. Pour autoriser l’indexation d’un site, dans l’interface d’administration, cliquer sur le lien reconstruire l’index. Puis, après la création ou la mise à jour d’une entité, l’indexation automatique sera lancée .

Installation de Lodel 0.9 : points pratiques

Tout utilisateur rêve de pouvoir installer un logiciel en étant guidé pas à pas par son développeur : j’ai eu ce privilège au cours d’une formation donnée par la Cléo à des membres de l’EHESS, étape préalable à la migration de leurs sites lodel 0.7 en lodel 0.9 . Voici quelques notes, les explications données sont claires dans le déroulement de l’installation mais il y a toujours des petits bonus à glaner.

SourceSup

Lodel est un logiciel libre disponible sur SourceSup : http://sourcesup.cru.fr/ . Lodel est en bonne position dans les logiciels les plus téléchargés, donc on le trouve facilement à partir de la page d’accueil.

Il est conseillé de créer un compte pour pouvoir rapporter des problèmes (onglet Tickets / Bugs) et formuler des demandes (onglet Tickets / Feature Requests).

Au passage, s’abonner à la liste lodel-users@cru.fr (onglet Listes).

Installation

Il est conseillé d’installer à partir d’une version stable dans sourcesup. On peut aussi télécharger une version de développement (onglet Subversion), il faudra alors ajouter soi-même des liens symboliques sur 3 répertoires :

* mkdir monlodel
* cd monlodel
* svn  co  http://subversion.cru.fr/lodel/branches/version_0_9-bugfixes-branch/ . (j'oublie souvent le .)
* ln  -s  lodeladmin  lodeladmin-0.9
* ln  -s  share  share-0.9
* ln  -s  lodel  lodel-0.9

Passer dans l’interface web pour paramétrer le site global : http://monsite.fr/monlodel/lodeladmin

  • dans les premières étapes, j’ai noté qu’il faut sélectionner (comme dans le type d’installation qui sera faite à l’EHESS, plusieurs labos), l’installation multi-sites. Les droits sur les répertoires CACHE et lodeladmin/CACHE doivent être donnés à l’utilisateur Apache dont le nom dépend du système, en général www-data : chown  www-data  <nom_repertoire>
    Il n’y a qu’un type d’installation, l’installation par défaut. Pour avoir une autre possibilité, il aurait fallu placer au préalable, dans le répertoire lodel/install/plateform, un fichier de configuration adapté du fichier par défaut.
  • base de données : le serveur est localhost en général. La base générale lodel_base devra avoir été créée au préalable par l’administrateur directement sur le serveur. Pour un serveur dédié, il est inutile de mettre un préfixe aux bases (chez un hébergeur privé, le préfixe permet de ne pas avoir de conflit dans le nom des bases).
    Le script d’installation vérifie ensuite les droits et installe ses propres tables dans lodel_base.
  • créer un administrateur général du site lodel.
  • au fil de l’install :
    • le chemin est détecté automatiquement : ne pas le modifier à priori
    • pour les droits : ne pas laisser le droit en écriture pour le groupe et ne laisser aucun droit pour “les autres”
    • les fonctions d’archivages dépendent du serveur : Pclzip livré par défaut fonctionne bien mais est plus lent que zip et unzip. Indiquer en général zip et unzip sans oublier de cocher cette option.
    • l’url est l’endroit où va être accessible lodel, le chemin d’accès à lodeladmin, mais pas aux sites. Pour avoir un accès par l’url dans le navigateur, il faudra créer un lien symbolique vers lodeladmin.
    • l’extension des scripts dépend de la configuration du serveur web : en général choisir php.
    • utiliser plutôt des liens symboliques qui faciliteront les mises à jour des scripts lodel lorsqu’on a beaucoup de sites (une mise à jour dans le répertoire de base plutôt que le répertoire de chaque site).
    • le répertoire d’import est utilisé pour stocker les sauvegardes compressées des données et/ou des modèles éditoriaux. Il est conseillé de le créer sur le serveur avant cette étape. Il doit être accessible en lecture/écriture à l’utilisateur web et se trouver si possible à l’extérieur de la racine du serveur web pour ne pas être directement accessible dans le navigateur.
  • le fichier de configuration : il est prêt dans lodeladmin/CACHE. Il faut le copier à la main et le renommer (mv  lodeladmin/CACHE/lodelconfig-cfg.php  lodelconfig.php) et restreindre les droits (chmod  400  lodelconfig.php)

Ajouter un site

  • utiliser l’interface lodeladmin : http://monsite.fr/monlodel/lodeladmin pour accéder à l’action Gérer les sites . Puis au lien Ajouter un site . Notez qu’en haut à droite est affiché le tableau de bord avec l’utilisateur connecté.
  • dans les paramètres du site : le titre est libre, le nom du site web ne doit comporter que des caractères simples, par exemple monsite. Dans le cas d’une installation multi-sites, ne pas cocher l’option Installer le site web à la racine du site. L’url du site est à préciser si le site du labo n’est pas un sous-site du site global. Par exemple marevue.revues.org (il faut que les modifications aient été faites auparavant au niveau du DNS). Le sous-titre est facultatif.
  • base de données : copier le code de création de la base, passer sous mysql en ligne de commande et coller le code (attention, il y a deux commandes CREATE et GRANT). Quitter mysql.
  • créer le répertoire web pour le site : à la racine de lodel, dans le répertoire monlodel (mkdir  monsite) et donner les droits à l’utilisateur web (chown  www-data  monsite).
  • création de l’arborescence lodel pour le site : cliquer sur le bouton Copie des fichiers (”on sécurisera après…”).
  • importation du modèle éditorial : si on souhaite utiliser un modèle générique pour tous les sites, il faut le copier auparavant dans le répertoire d’import défini ci-dessus.
  • sécurisation : lodel doit pouvoir écrire dans les répertoires CACHE docannexe et lodel/sources (documents convertis) . Et sinon : chmod  555  monsite

Et enfin

  • on peut connecter Lodel à un annuaire LDAP, ce n’est pas fait en natif, à suivre…
  • de nouvelles fonctionnalités peuvent être ajoutées avec des plugins
  • ServOO permet convertir des documents au format DOC, RTF, SXW et de les incorporer dans lodel : les informations sur le serveur servOO peuvent être ajoutées dans la configuration du site ou de manière globale dans le fichier de configuration de lodel lodelconfig.php . Lodel fera appel à l’un ou à l’autre selon leur disponibilité.
$servoourl="http://servoo1.revues.org";
$servoousername="user1_servoo";
$servoopasswd="abcdef";

S’il y a plusieurs servoo, on recopie ce bloc en incrémentant le nom des variables :

$servoourl2="http://servoo2.revues.org";
$servoousername2="user2_servoo";
$servoopasswd2="ab45ef";

L’installation de Servoo est compliquée : il utiliser Xfvb qui est un simulateur d’interface graphique et installer vnc. La machine qui héberge doit avoir de bonnes capacités mémoire et un processeur performant.
Pas de mise à jour à faire, simplement des redémarrages fréquents.

Une architecture de travail idéale : l’exemple de revues.org

Nous disposons de trois espaces, sur trois serveurs différents. Les versions (maquettes et lodel) sont gérées sous SVN :

  • espace de développement DEV (fichiers svn de type branche) : modifications principalement sur les maquettes (fichiers css et php des templates)
  • espace de travail EDT (fichiers svn de type trunk) : espace accessible aux revues avant la mise en production (protection par fichier htaccess)
  • espace de production PROD (fichiers svn de type tags) : modification des contenus par les revues.

Des miroirs sont en place ainsi que des backups pendant la journée et des sauvegardes sur bande pendant la nuit.

Sortie de Lodel 0.9 RC3

Et voici très certainement la dernière release candidate avant la sortie finale de la 0.9.

Cette RC corrige des petites erreurs concernant le niveau d’erreur (principalement E_NOTICE), et principalement les bugs suivants :

  • bug du parser LodelScript n’incluant plus un fichier de déclaration de filtre sur les résultats SQL d’une LOOP.
  • la langue d’un bloc LodelScript ne correspondant plus à la langue de navigation dans le site
  • bug dans le controller, qui créait une boucle de redirection infinie lorsqu’on appellait, côté site, une entité n’ayant pas de template associé et se situant à la racine du site

Vous pouvez télécharger cette release candidate à l’adresse https://sourcesup.cru.fr/frs/?group_id=193.

Procédure de migration de Lodel 0.8 vers Lodel 0.9

La migration de Lodel 0.8 vers Lodel 0.9 est moins compliquée que de la 0.7 vers la 0.8.

Seuls quelques modifications dans la base de données sont à effectuer, ainsi que l’ajout de deux paramètres dans le lodelconfig.php.

Également, il vous faudra ajuster vos fichiers de configurations (lodelconfig.php ET siteconfig.php) en suivant les fichiers de configuration de la distribution (respectivement /lodel-0.9/install/plateform/lodelconfig-default.php et lodel-0.9/src/siteconfig.php (ou siteconfigroot.php si vous avez installé Lodel en mode mono-site)).

Voici la marche à suivre pour la base de données générale de Lodel :

  • dans la table urlstack, ajouter un champ ’site’ : ALTER TABLE urlstack ADD `site` varchar(64) CHARACTER SET utf8 collate utf8_bin NOT NULL;
  • ajouter la table de la messagerie interne : CREATE TABLE `internal_messaging` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `idparent` int(10) unsigned NOT NULL,
    `iduser` varchar(255) default NULL,
    `recipient` longtext NOT NULL,
    `recipients` longtext NOT NULL,
    `subject` varchar(255) NOT NULL,
    `body` longtext NOT NULL,
    `incom_date` datetime NOT NULL,
    `cond` tinyint(1) NOT NULL default ‘0′,
    `status` tinyint(4) NOT NULL default ‘0′,
    `upd` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
  • ajout d’un champ ‘userrights’ dans la table session : ALTER TABLE session ADD `userrights` tinyint(3) unsigned NOT NULL default ‘0′
  • ajout de la table ‘mainplugins’ : CREATE TABLE `mainplugins` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `name` varchar(64) character set utf8 collate utf8_bin NOT NULL,
    `upd` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `status` tinyint(4) NOT NULL default ‘0′,
    `trigger_preedit` tinyint(1) NOT NULL default ‘0′,
    `trigger_postedit` tinyint(1) NOT NULL default ‘0′,
    `trigger_prelogin` tinyint(1) NOT NULL default ‘0′,
    `trigger_postlogin` tinyint(1) NOT NULL default ‘0′,
    `trigger_preauth` tinyint(1) NOT NULL default ‘0′,
    `trigger_postauth` tinyint(1) NOT NULL default ‘0′,
    `trigger_preview` tinyint(1) NOT NULL default ‘0′,
    `trigger_postview` tinyint(1) NOT NULL default ‘0′,
    `config` longtext NOT NULL,
    `hooktype` varchar(5) NOT NULL,
    `title` text NOT NULL,
    `description` longtext NOT NULL,
    PRIMARY KEY  (`id`),
    UNIQUE KEY `name` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8

À partir de là, il faut, pour chaque site :

  • ajouter le champ ‘ip’ dans la table restricted_users : ALTER TABLE restricted_users ADD `ip` longtext NOT NULL;
  • ajouter la table des plugins : CREATE TABLE plugins (
    `id` int(10) unsigned NOT NULL default ‘0′,
    `name` varchar(64) character set utf8 collate utf8_bin NOT NULL,
    `upd` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `status` tinyint(4) NOT NULL default ‘0′,
    `config` longtext NOT NULL,
    PRIMARY KEY  (`id`),
    UNIQUE KEY `name` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Il suffit maintenant d’ajouter, dans le lodelconfig.php, les deux paramètres suivants :
$cfg['dbDriver']=’mysql’; // mettre mysqli si votre installation vous le permet
$cfg['$sqlCacheTime']=3600*24; // temps de cache des requêtes SQL, mettre à 0 pour désactiver

Voilà, votre installation est prête, vous pouvez maintenant télécharger Lodel 0.9, décompresser l’archive, et remplacer les répertoires lodel-0.8, lodeladmin-0.8 et share-0.8 par leurs équivalents 0.9.

Sortie de Lodel 0.9 RC2

La seconde release candidate est maintenant disponible sur sourcesup à cette adresse : https://sourcesup.cru.fr/frs/?group_id=193 .

Quelques bugs mineurs ont été corrigés depuis la RC1, principalement :

- diverses corrections pour ne pas déclencher d’erreurs E_NOTICE

- débuggage du changement de langue d’un utilisateur de l’accès restreint

- l’idparent n’était plus récupéré lors de l’édition d’une entité : l’action de déplacement d’une entité ne fonctionnait donc plus

- correction de la macro “PRELUDE” de la maquette du modèle éditorial Revues.org

- correction d’un bug à l’import XML d’un modèle éditorial : certains identifiants n’étaient plus uniques

- ajout du filtre lin_array, version LodelScript de la fonction PHP in_array (http://php.net/in_array)

- ajout de la variable de configuration ’searchEngine’ indiquant si le moteur de recherche interne doit indexer les entités dont le modèle éditorial a été prévu pour (par défaut désactivé)

- correction d’un bug quant à la gestion des champs d’une classe et des masques

- correction du javascript permettant de déployer les entités côté interface

Attention, à partir de cette release, Lodel n’acceptera plus les bases de données ayant un encodage différent de l’utf8, et s’arrêtera instantanément s’il rencontre une base de données dans un autre encodage.

Également, le parser LodelScript n’accepte plus maintenant que des attributs (dans les blocs de conditions ou les boucles) sous la forme attr=”value” (les simples quotes ne sont plus reconnues et leur utilisation provoquera des erreurs).

Nouvelle contribution pour Lodel 0.8 : authentification LDAP

Une nouvelle contribution vient d’être ajoutée sur sourcesup.

Elle permet d’effectuer une authentification dans Lodel via un annuaire LDAP.

Cette contribution est librement téléchargeable à cette adresse : https://sourcesup.cru.fr/frs/?group_id=193 , rubrique “contributions” de Lodel 0.8.

Le fichier .zip contient le patch, les fichiers modifiés, la licence ainsi qu’un fichier expliquant le fonctionnement de ce patch dont je copie le contenu ici :

---------------------------------------
PATCH FOR LODEL VERSION 0.8
http://sourcesup.cru.fr/projects/lodel/
LDAP AUTHENTICATION V 0.1
Odile Benassy <odile.benassy@u-psud.fr>
---------------------------------------

Features
--------

With this patch, Lodel authentication mechanism is modified as follows:

* First, LDAP authentication is tried
* If it fails, normal Lodel authentication is tried
* In case of LDAP authentication success, a corresponding lodel user
is searched in Lodel database
 * if there is one, Lodel authorizations take place
 * if there is none, a Lodel user is created with minimal user rights,
 and Lodel authorizations take place (as VISITOR) 

Configuration
-------------

* in your siteconfig.php, setup your LDAP parameters,
 then switch to $use_ldap=true

Merci à Odile Benassy pour cette contribution.

Les nouveautés de la version 0.9 RC1 de Lodel

La version 0.9 RC1 de Lodel est désormais en ligne sur Source sup !

Cette sortie correspond à une évolution majeure du logiciel.

L’équipe de Lodel.org a travaillé à la création de nouvelles fonctionnalités, à l’apport d’améliorations et à la correction de bugs de la précédente version.

Voici ci-dessous la liste des améliorations et des nouvelles fonctionnalités apportées au logiciel dans la version 0.9 RC1 :

Évolutions dans l’interface privée

  • Il est désormais possible de réaliser des « drag’n'drop » (cliquer-glisser-déposer) des entités (collections, numéros, articles…) pour facilement changer l’ordre des entités
  • Mise en place de l’affichage des alias qui permet d’établir des liens entre les entités
  • Déploiement des conteneurs dynamiquement grâce à la technologie AJAX sans rechargement de page
  • Affichage du sitemap en version XML qui n’était pas visible auparavant dans l’interface privée
  • Lors du rechargement d’un document les fac-similés/index sont désormais gardés
  • Lors de la création d’utilisateurs, un mail est maintenant envoyé à l’utilisateur créé contenant le login, le mot de passe et l’url du site
  • Une liste des utilisateurs connectés s’affiche une fois connecté
  • Un système de messagerie interne permet d’envoyer des messages aux autres utilisateurs de la revue
  • Traduction du site et de l’interface : ajout d’une fonctionnalité permettant de récupérer toutes les variables de traductions contenues dans les templates et d’ajouter les entrées correspondantes si elles n’existent pas
  • Amélioration du système de mise en maintenance d’un ou plusieurs sites

Évolutions dans l’interface publique

  • Possibilité de réduire le desk (bandeau affichant les fonctionnalités de l’interface privée) côté site

Gestion du modèle éditorial (ME)

  • Possibilité d’ajout d’un masque de validation de champs (supporte les expressions régulières) (voir http://blog.lodel.org/47)
  • Export/mise à jour du modèle éditorial en XML (encore en phase béta)

Corrections de bugs

  • L’interface pour IE 7 a été débuggée
  • Correction d’une erreur d’affichage sur la page de traductions : les langues affichées ne correspondaient pas forcément à la langue des variables

Bugs corrigés sur source sup (https://sourcesup.cru.fr/tracker/?atid=857&group_id=193&func=browse) :

  • [#4327]
  • [#949]
  • [#4454]
  • [#768]
  • [#5796]
  • [#5952]

Amélioration du comportement

  • Il y a désormais un seul point d’entrée dans Lodel : la gestion des requêtes se fait uniquement par le controller et non plus par l’index.php
  • La gestion des accès restreint peut maintenant se faire par IP
  • Il est maintenant possible de construire des urls du type www.monsite.com/[id] ([id] correspond à l’id de l’entité à afficher)
  • Le système de cache recompile désormais automatiquement le template si celui-ci a été modifié depuis la dernière compilation (uniquement côté site et lorsqu’on est en mode debug)
  • Ajout des constantes ‘backoffice’ et ‘backoffice-lodeladmin’ indiquant respectivement que l’on se trouve côté interface du site ou côté lodeladmin.
  • Ajout d’un paramètre ‘nocache’ indiquant à la classe générant les pages web de ne pas utiliser le cache (lecture et écriture)

Améliorations dans le noyau

  • Passage des classes en PHP 5
  • Ajout de l’autoload pour les classes internes
  • Passage du context de variable globale à une classe statique, et centralisation des variables de configuration en lecture seule
  • Ajout d’un système de plugin (encore en phase béta) (voir http://www.lodel.org/wiki/index.php/Plugins)
  • Gestion des erreurs grandement améliorée : suppression des ‘die’ intempestifs et ajout d’un gestionnaire d’erreurs interne centralisé
  • Compatibilité avec le niveau d’erreur PHP E_STRICT

Optimisations du code

  • Pour améliorer les performances générales de Lodel, le parser LodelScript a été modifié pour intégrer ADOdb ( ADOdb (voir http://phplens.com/lens/adodb/docs-adodb.htm) est une API orientée objet offrant un support d’abstraction de bases de données) afin de pouvoir utiliser les drivers de base de données MySQL ou MySQLi (voir http://blog.lodel.org/43)
  • Refonte de la classe générant les pages (voir http://blog.lodel.org/43)
  • Conversion presque totale de Lodel pour utiliser ADOdb (seul le script d’installation utilise les fonctions mysql_*)
  • Mise en cache de certains résultats SQL (templates, variables de traductions)
  • Intégration de l’API HTMLPurifier (voir http://htmlpurifier.org) et suppression de la classe InputFilter
  • Mise à jour des APIs PclZip (voir http://www.phpconcept.net/pclzip/) et ADOdb

Développement du code (LodelScript)

  • Ajout des filtres lexplode (appel de la fonction PHP explode) et lmath (fonction mathématiques basiques : addition, soustraction, division, multiplication)
  • Ajout de la syntaxe [#VAR.STRING.#VAR2....] permettant de parcourir un tableau multidimensionnel
  • Gestion des variables de types tableau :

<LET ARRAY=”test”>test 1</LET>

<LET ARRAY=”test[]“>test 2</LET>

<LET ARRAY=”test[]“>[#TEST]</LET>

<LET ARRAY=”test.index_text”>test 3</LET>

[#TEST|var_dump]

/* la sortie donne :

array(4) {

[0]=> string(6) “test 1″

[1]=> array(1) {

[0]=> string(6) “test 2″ }

[2]=> array(2) {

[0]=> string(6) “test 1″

[1]=> array(1) {

[0]=> string(6) “test 2″ } }

["index_text"]=> array(1) {

[0]=> string(6) “test 3″ }}

*/

<LET ARRAY=”test”></LET>

<LET VAR=”blah”>testing</LET>

<LET VAR=”blah2″>testing 2</LET>

<LET ARRAY=”test.#BLAH.#BLAH2″>testeuh</LET>

[#TEST|var_dump]

/* la sortie donne :

array(1) {

["testing"]=> array(1) {

["testing 2"]=> string(7) “testeuh”

}

}

*/

- accès aux variables ‘globales’ du context, dans une loop ou autre, via la syntaxe [%VAR]

- multiple cases dans les blocs SWITCH et ajout de la condition ‘default’ :

<SWITCH TEST=”[#TRI]“>

<DO CASE=”1″>

****

</DO>

<DO CASES=”3,4,5,6″>

****

</DO>

<DO CASE=”default”>

****

</DO>

</SWITCH>

- ajout de la variable $context['matches'] correspondant au matches du preg_match (condition ‘LIKE’) :

<LET VAR=”titre”>ceci est un test pour les matches</LET>

<IF COND=”[#TITRE] LIKE /^(.*?)\stest\s(.*?)$/”>

[#MATCHES.1]<br /> // ‘ceci est un’

[#MATCHES.2] // ‘pour les matches’

</IF>

- ajout conditions SNE et SEQ (respectivement !== et ===)

- correction du parser lorsqu’une condition contient une simple ou double quote :

<IF COND=”[#TITRE] EQ ‘Repères pour l’étude’”>

- ajout de la possibilité de cache par bloc contenu dans un template, avec leur propre charset et refresh. Un id numérique unique obligatoire est demandé pour chaque bloc. De plus, il est possible de déclarer un bloc qui sera ignoré à la compilation en rajoutant le paramètre ‘DISPLAY= ”0 ”‘.

<BLOCK ID=”1″ REFRESH=”600″ CHARSET=”utf-8″>

Ce bloc sera rafraichit toutes les 600 secondes indépendamment du template qui le contient, et est encodé en utf8.

</BLOCK>

<BLOCK ID=”2″ REFRESH=”600″ CHARSET=”utf-8″ DISPLAY=”0″>

Ce bloc sera également rafraichit toutes les 600 secondes indépendamment du template qui le contient, et est encodé en utf8. Cependant, il ne sera pas inclus pendant la compilation du template le contenant, mais peut être appellé par n’importe quel template.

</BLOCK>

// appel d’un bloc à partir de n’importe quel autre template

<USE TEMPLATEFILE=”index.html” BLOCKID=”2″/>

Masque de validation de champs de type texte

Dans la 0.9 j’ai rajouté la possibilité de filtrer le contenu des champs de type texte du ME avec l’utilisation de masque (et pseudo-masque) ou des expressions régulières.

Un masque est une chaine de caractère comprise entre deux caractères ‘%’ sans espaces (’% blah%’ ou ‘%blah %’ ne fonctionnera pas, alors que %blah% oui)

Exemple avec un masque :
- “p. %1-2%” obligera l’utilisateur à entrer une valeur correspondante à ‘p. x-x’ avec ‘x’ étant un nombre allant de 0 à 9

Une autre possibilité est d’utiliser le mode ‘raisonnable’, qui va analyser la chaine de caractère passée dans le champ et générer une expression régulière  qui sera l’équivalent de la chaine passée SANS limite dans le nombre de caractère, sans tenir compte ni de la casse ni de l’accentuation.

Exemple :
- ‘p. 1-2′ autorisera les valeurs ‘p. 12-1987′, ‘p. 0-1′, ‘p. 1-5488′, ‘apgha…..     45587-987145′ etc…
- ‘testé 10′ autorisera les valeurs ‘alkufhrekbghàéksbg    68744171544′, ‘qgéhgùà 1′, etc..

Pour finir les regexp, pour les utilisateurs avertis :
- ‘/p\.\s\d{1,3}\-\d{1,3}/’ autorisera les valeurs ‘p. 123-123′, ‘p. 1-2′ mais pas ‘p. -2′ ni ‘p. 1-’, etc..

Benchmark de Lodel 0.8.7.3 versus Lodel 0.9

La version 0.9 de Lodel va apporter, en plus de l’import XML du modèle éditorial, des améliorations significatives au niveau des performances.

Les principales modifications ont été effectuées sur les requêtes SQL des templates qui sont maintenant mises en cache (celà inclut les loop ainsi que les variables de traductions), une refonte de la vue et des améliorations au niveau du parser.

Le test a été fait en local sur un serveur dédié, en utilisant Siege (http://freshmeat.net/projects/siege/).

Configuration matériel du serveur :

* 4x Intel(R) Xeon(R) CPU X3363 @ 2.83GHz
* 8 GO RAM
* disques durs 15 000trs/min
* PHP 5.2.6, MySQLi 5.0.51a, installés en configuration de base (paquets Debian)

Configuration de Siege :
root:~# siege -C
CURRENT SIEGE CONFIGURATION
JoeDog/1.00 [en] (X11; I; Siege 2.66)
Edit the resource file to change the settings.
———————————————-
version: 2.66
verbose: false
debug: false
protocol: HTTP/1.1
connection: close
concurrent users: 25
time to run: 60 seconds
repetitions: n/a
socket timeout: 90
delay: 0 sec
internet simulation: true
benchmark mode: true
failures until abort: 1024
named URL: none
URLs file: /root/siege_urls.txt
logging: false
log file: /var/siege.log
resource file: /etc/siege/siegerc
allow redirects: true
allow zero byte data: true
allow chunked encoding: true

Résultats :

Lodel 0.8.7.3 sans cache Lodel 0.8.7.3 avec cache Lodel 0.9 sans cache Lodel 0.9 avec cache
Transactions (hits) 5289 5553 15875 17416
Availability (%) 100 100 100 100
Data transfered (MB) 73,26 76,91 226,05 245,86
Response time (s) 0,28 0,27 0,09 0,09
Transaction rate (trans/sec) 88,76 92,77 262,79 289,93
Concurrency 24,88 24,93 24,95 24,94
Longest transaction (s) 8,16 1,44 16,27 0,67

On peut voir que Lodel 0.9 peut maintenant servir plus de 3 fois plus de pages que sa version précédente, avec une moyenne de 0.09s de temps de calcul par page contre 0.28s auparavant.

Petit plus, Lodel 0.9 sera compatible avec le niveau d’erreur E_STRICT .. !

Sortie de Lodel 0.8.7

Suite au remplacement du système de cache du logiciel et au cours de la sortie d’une série de mises à jour (release), des bugs ont été découverts et rapidement corrigés depuis la version 0.8.2. Voici donc une version 0.8.7 intégrant les corrections nécessaires. Vous trouverez ci-dessous les principales améliorations et corrections de bugs.

Nouvelles fonctionnalités, améliorations et mises à jour

Améliorations logicielles

Visibles par l’utilisateur :
  • les options des sites peuvent maintenant être multi-langues
  • le renseignement du courriel est désormais obligatoire lors de la création d’un utilisateur
  • la page ‘missing.html’ a été ajoutée et s’affiche lors de la demande d’une page qui n’existe pas
  • dans le choix de type de fichier permis au téléchargement (upload), le format XML a été ajouté
  • pour restreindre les droits aux seuls administrateurs Lodel, la gestion des droits a été modifiée pour :
    • l’export de données,
    • l’import de données,
    • l’import du modèle éditorial
Fonctionnement :
  • remplacement du système de cache par le paquet PEAR Cache_Lite (http://pear.php.net/package/Cache_Lite)
  • la variable globale ‘defaultlang’ prend comme valeur les languages disponibles par défaut dans Lodel
  • erreur 403 renvoyée lorsque le parser rencontre un problème (fichier absent, erreur LodelScript)
  • ajout de caractères UTF-8 dans la fonction ‘makeSortKey’ permettant de générer le sortkey des entrées et des auteurs dans les index (tri alphabétique)
  • indentation du code source optimisée
  • augmentation de la limite de la taille de fichier chargé par le ServOO à 10Mo
  • obligation de passer par le fichier index.php pour récupérer les docannexe (similaire à Lodel 0.7)
  • erreur 404 renvoyée lorsqu’une page inconnue est demandée

Améliorations de l’interface

  • affichage des index optimisé :
    • découpage et affichage des index par lettre (une page par lettre). La présentation se fait par tranche de 30 entrées par lettre, afin d’éviter un temps de chargement trop long
    • l’affichage du nombre d’entrées se fait par type d’index
  • Sortie XML :
    • ajout de l’API GeSHi pour la coloration syntaxique du XML d’une entité
    • création du filtre ‘highlight_code’ permettant de coloriser syntaxiquement un contenu HTML/XML

Sécurité

  • protection anti-DOS DOS (déni de service) : pour pouvoir regénérer les fichiers mis en cache (clearcache), il faut maintenant être authentifié

Améliorations LodelScript

  • ajout d’une possibilité de trier par idtype dans la boucle LodelScript ‘alphabetSpec’

Correction de bugs

Au niveau :

De l’interface

  • la page de chargement de document par ServOO a été optimisée suite au débuggage du JavaScript

Du Lodelscript

  • correction du comportement de la boucle LodelScript ‘foreach’ (associée aux tableaux) qui créait une erreur PHP (WARNING) lorsqu’on lui passait en argument une variable représentant un tableau vide ou d’un autre type
  • réécriture du filtre paranumber de numérotation des paragraphes

Du logiciel

  • correction d’un bug du parser où les en-têtes d’un fichier template n’étaient plus récupérées (refresh, charset…)
  • vérification de l’intégrité des URLs : les URL comme www.monsite.com/index.php?id=12/lodel/edition affichaient une page sans styles CSS ; désormais, une page d’erreur s’affiche.

Vous pouvez télécharger le package sur sourcesup à cette adresse : (http://sourcesup.cru.fr/frs/?group_id=193)

Page suivante »