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.

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 .. !