En route pour la 0.8 - Où en sommes-nous... [1]

Transmis par : Chestnut Actif 03 Nov 2005 - 23:43
PostNuke [2]
Bien que certains ne l'auront pas encore réalisé, la version 0.761 de PostNuke nous rapproche sensiblement de la version 0.8.

L'inclusion de certains aspects les plus matures de la version 0.8 en étant la principale raison. Les premiers (Xanthia et le pnRender) inclus depuis les deux dernières version majeures nous permettent d'utiliser de façon plus globale la puissance des templates au coeur de la distribution, une des promesses les plus importantes de la version 0.8.


Les modules mis en templates et inclus dans la version 0.760-1 et tirés de la branche 0.8 du CVS sont les suivants :



Cela représente un pourcentage conséquent du code 0.8 mais il y a encore à faire. Le but de cet article est de préciser ce qu'il reste à faire avant de considérer une éventuelle sortie de la version 0.8.

Six projets principaux pour le développement de PostNuke



Nous avons identifié six sous-projets vitaux pour la future version .8. Ces sous-projets couvrent un large éventail de fonctionnalités et sont tous à différents stades de leur cheminement. Les six projets (sans ordre particulier) sont les suivants:



Cet article contient aussi quelques informations sur certaines nouveautés qui seront introduites dans la version .8. (Voir la fin de l'article mentionnant le EZComments et la gestion d'erreur).

Intégration de la librairie Objet Open Star et son utilitaire de base de données



La nouvelle couche d'abstraction de base de données utilise l'information des tables déjà existante et fourni une représentation objet des lignes de base de données. L'avantage de cette approche est de supprimer la composition manuelle de déclaration SQL en la remplaçant par des déclaration d'une seule ligne. Quelques exemples :

Code: [Cacher]
  1. // Sélectionner un objet par son identifiant 
  2. $myObj =& DBUtil::selectObjectByID (<pntable_key>, $id); 
  3.  
  4. // Sélectionner un(des) objet(s) (avec critère) 
  5. $myObj =& DBUtil::selectObject (<pntable_key>, $where); 
  6.  
  7. // Sélectionner les objets (avec critère et ordre) 
  8. $myObjArray =& DBUtil::selectObjectArray (<pntable_key>, $where, $sort); 
  9.  
  10. // Insérer un objet 
  11. DBUtil::insertObject ($myObj, <pntable_key>); 
  12.  
  13. // Modifier un objet 
  14. DBUtil::updateObject ($myObj, <pntable_key>); 


Ces fonctions retournent toutes un tableau associatif ou dans le cas de fontions tableaux, un tableau des tableaux. Les champs dans le tableau sont nettoyés dans le sens ou tous les préfixes ont été retirés. Cette API de base de données donne aussi la possibilité de générer un objet (d'un tableau associatif), des objets contenant des tables jointes par champs (permettant de limiter les appels SQL) ainsi que la sauvegarde/récupération d'attributs dynamiques sans altérer la structure originale de la table. L'ensemble fourni une API complète couvrant toutes les opérations de sauvegarde et de récupération de données.

En plus de la couche de la base de données, on y trouvera la couche Objet. Les objets fournissent un modèle de composant qui présente les facilités de persistence transparentes. Objets et Classes sont chargés par l'API par :

Code: [Cacher]
  1. // Objet Unique 
  2. Loader::loadClassFromModule (<module>, 'foo'); 
  3.  
  4. // Tableau d'objet 
  5. Loader::loadClassFromModule (<module>, 'foo', true); 



et les classes sont recherchées dans le répertoire <module>/classes et utilisent la convention suivante (pour un objet appelé "foo"):

Code: [Cacher]
  1. PNFoo.class.php 
  2.  
  3. PNFooArray.class.php 


La couche objet est assez flexible ; elle peut être utilisée pour manipuler des objets persistants mais peut aussi servir d'abstraction de classe sans fournir de persistence. La couche est construite de façon à permettre en 5 lignes l'implantation des possibilités de persistances simples pour la base de données. L'implantation objet fourni un grand nombre d'extensions permettant d'étendre les possibilités d'objets complexes. Les objets fournissant une API standard, le code (comme le pnuser.php) peut aussi être écrit de façon à utiliser des des objets génériques ayant pour résultat une grande économie d'écriture puisqu'une seule fonction peut servir (par exemple) à récupérer un objet quel qu'il soit.

L'ensemble (DBUtil et ObjUtil) permet d'implanter des fonctionnalités complexes tout en écrivant moins de code facilitant ainsi le développement de module tout en améliorant la qualité du code par l'utilisation d'opérations persistentes gérées par une librairie standard.

Intégration de la gestion de catégorie Open Star



Le module pnCategories fourni la nouvelle gestion de catégories. Il est basé sur un modèle au niveau répertoire fournissant ainsi une explication sémantique claire au programmeur. Dans le contexte actuel, on peut accéder à une catégorie par son numéro (exemple: 52), ce modèle ayant toutefois le défaut de ne donner aucune information descriptive. Dans un modèle "répertoire", le pnCategories permet de faire :

Code: [Cacher]
  1. CategoryUtil::getCategoryByPath ('__SYSTEM__/Modules/Topics'); 


ce qui donne instantanément l'information que l'on cherche une catégorie de Sujets (Topics). MySQL étant limité, le champs contenant le répertoire n'est pas indexé (MySQL4 ne permet l'indexation sur un maximum de 255 caractères d'un champs texte). Toutefois, une représentation alternative existe en interne par la le champs numérique permettant la récupération du chemin ci-haut par l'utilisation de :

Code: [Cacher]
  1. CategoryUtil::getCategoryByPath ('1/12/32', 'ipath'); 


Le champ numérique est indexé et si on y accède par le nom d'un répertoire (chaîne), la première résolution se fait par le biais de la chaîne et toutes celles qui suivent par l'entier correspondant. Il y a probablement encore des ajustements et améliorations à faire à ce modèle mais son utilité fut déjà prouvé et les modules Open Star fonctionnent sans aucun problème.

Le pnCategories fourni 5 champs supplémentaires lui permettant ainsi de fournir des catégories contenant plus d'information (PostCalendar par exemple utilise un code couleur associé à une catégorie) sans avoir à écrire plus de code. En résumé, le pnCategories a le potentiel de remplacer beaucoup de petites tables secondaires.

Installation



Ayant comme but de créer un système simple pouvant être étendu par des distributions personnalisées, l'installateur a été réécrit pour accroître la flexibilité du processus d'installation. Ce nouvel installateur est présentement dans le cvs et peut être testé en téléchargeant le dernier pack cvs [3]. Le processus inclus des liens d'aide contextuelle simplifiant l'installation pour les nouveaux utilisateurs.

Xanthia



Xanthia dans sa version .8 aura subit une refonte complète. Le code aura été complètement réécrit pour en faire une sous-classe du pnRender réduisant ainsi sensiblement son poids et une augmentation perceptible de performance surtout sous PHP5. De plus, son interface aura été redessinée et nous étudions une meilleure intégration du contrôle des blocs ainsi que du module Blocs lui-même. Ces améliorations sur l'interface pourront aider les nouveaux utilisateurs d'acquérir la connaissance requise pour son usage plus rapidement et les habitués pourront constater que l'utilisation de Xanthia sera plus simple et plus intuitive.

Gestion des utilisateurs



Une des plus grandes tâches restantes pour la version 0.8 se situe au niveau de la gestion des utilisateurs et des modules utilisateurs en général. Cette section peut se scinder en trois sous-sections.

Groupes



Certains utilisant les modules pnGroups et pncGroups seront déjà familiers des améliorations apportées sur le module Groupes de la version 0.8. La version 0.8 sera la fusion de ces améliorations à celles déjà apportées par la version 0.760.

Profiles



En termes simples, le module Profile affichera les informations du profil d'un utilisateur telles que déjà présentées depuis la version 0.760 à la différence que le module de base est le advProfile de Franky Chestnut (voir pnConcept). Le module supporte les plugins Smarty et les développeurs peuvent donc tirer avantage des possibilités fournies par le module Profile en y ajoutant leurs propres informations sur la page. Par exemple, afficher les derniers message d'un forum si le plugin adéquat est disponible.

En outre, il prend en charge la gestion des données dynamiques (DynamicUserData) au niveau administration qui elle, étend ses possibilités en fournissant d'autres types de champs.

Améliorations Générales pour les Utilisateurs



Il y a plusieurs demandes d'améliorations sur le NOC qui seront ajoutées au système Utilisateurs. La clé étant la flexibilité, la gestion des données dynamiques devrait être améliorée. La recherche fait aussi partie des amliorations souhaitées. Certaines de ces améliorations sont :



Finition des modules de contenu



Comme mentionné précédenment, l'intégration de plusieurs modules de contenu à la gestion des catégories de la version 0.8 reste à faire. Il reste aussi beaucoup de développement à faire pour certains de ces modules. Cette partie du développement étant moins critique et bien que ces modules ne seront pas inclus dans la distribution principale de la version 0.8, tous les modules maintenus par l'équipe de développement du système seront mis en template et entièrement pnAPI compatible à la distribution 0.8.

Gestion des Erreurs



Avec le nouveau module de gestion des erreurs, un programmeur peut maintenant activer une erreur en utilisation la fonction standard PHP trigger_error comme :

Code: [Cacher]
  1. if (empty($myvar)) { 
  2.     trigger_error('Ma variable est vide !', E_RROR); 


Dans le cas présenté, le script sera automatiquement arrêté et l'utilisateur verra "Ma variable est vide !". Les avertissements habituels tels que E_NOTICE ou E_WARNING ne seront affichés que si la gestion d'erreur est configuré pour les afficher. Un utilisateur ayant les permissions administratives adéquates sur le module, source de l'erreur verra aussi l'erreur.

Une extension possible pourrait la journalisation des erreurs dans une table que l'administrateur pourra vérifier ce qui a pu se produire (exemple: doublon de constante, variable non-initialisée ou erreur plus sévère). Il est aussi possible de sauvegarder le contenu de toutes les variables actives lorsqu'une erreur se produit (toujours en étude car ADODB enregistre les mots de passe en texte clair en son objet).

Nous n'utilisons pas les exceptions car c'est une fonctionalité PHP 5 et nous ne souhaitons pas élever les pré-requis pour PostNuke du php4 au 5 et les exceptions ne sont pas aussi facile d'utilisation que la gestion d'erreur, beaucoup de code est requis pour les faire fonctionner principalement dans les modules les utilisant.

EZComments



Le module EZComments remplacera le module actuel de commentaire dans la version 0.8 supprimant la solution disparate et non-pnAPI des versions précédentes. L'avantage du module EZComments est qu'il fournit une solution unique de commentaires pour tous les modules compatibles avec les extensions d'affichage. Le EZComments comprend aussi une modération avancée inexistante dans le module actuel. La version RC récente (voir ici [4] donne un aperçu de ce que l'on pourra y trouver. Vous pouvez bénéficier dès aujourd'hui du module EZComments avant la version 0.8 de PostNuke, le module de News de PostNuke supporte les extensions d'affichage depuis sa version 0.750. Toutefois, un patch est disponible dans le cvs de la version 0.761 permettant une intégration améliorée du EZComments. Le patch est disponible ici [5].

Suivre le développement



Si vous souhaitez suivre le développement et les progrès vers la version 0.8, vous pouvez vous inscrire sur la liste postnuke-cvsnotices [6]. Un email est envoyé pour chaque changement fait dans le CVS vous permettant de suivre ces changements au moment où ils se produisent. Nous recommandons principalement cette liste aux développeurs de modules. Pour un usage plus général, vous pouvez télécharger une distribution journalière du cvs ici [7]. Nous faisons de notre mieux pour garder la version CVS utilisable ; toutefois, elle pourrait ne pas fonctionner, le code étant en constant développement. Si c'est le cas, svp., veuillez soumettre un rapport de bug sur le tracker (voir lien plus bas).

Liens Utiles


Bug Tracker [8]
Requêtes [9]

Commentaires

Nuky [10] - 04.11.2005, 08:18
Un chemin clair... le genre d'informations qui a parfois manqué par le passé.

Merci bien !
mumuri [11] - 04.11.2005, 13:02
A quand les templates sur le modules Your_account ???
Chestnut [12] - 04.11.2005, 14:02
Le module est déjà en template dans le cvs mais attention, il n'a plus du tout la même fonction qu'autrefois...

Chestnut [13] - 05.11.2005, 13:06
Bon finalement... J'ai décidé cette nuit que le module Your_Account allait disparaître.

He he ! (J'essaie d'imaginer ta tête).

Le module Your_Account ne faisait presque rien et je vais déplacer ses actions dans le module Profile.

Au final, au lieu d'avoir 5 modules disparates gérant les aspects utilisateurs, il n'y en aura plus que 2.

Users (gérant les utilisateurs en général), Profile (gérant ce qui touche au compte des utilisateurs).

contre

Users, NewUser (Users), Profile, Your_Account (Profile), DynamicUserData (Profile)

C !
mumuri [14] - 05.11.2005, 13:58

He he ! (J'essaie d'imaginer ta tête).
lol tu sais qu'il disparaissent ou pas j'ai un peu rien à f****e lol, c'est juste que j'ai arrangé le code html [15] directement dans les fichiers pour l'affichage et que je me demandais quand ca pourrait etre fait dans un template.


Merci en tout cas.

PS : est ce que y'aura toujours la possibilité de rajouter des liens provenant d'autres modules (de la méme maniére, un fichier links.XXXX.php dans modules/nomdumodule/user/links).

http://topflood.free.fr/compte-postnuke.gif [16]

la par exemple, j'ai un lien vers le profil (module userinfos),vers les messages privés (messages), et un lien vers la déconnection (module user).

Chestnut [17] - 06.11.2005, 02:50
Evidemment...

:roll: ... quelle question.....

;-)
C !
Gilles [18] - 04.11.2005, 17:18
Ca fait plaisir de voir quel avenir a PostNuke [19]. Bon courage à tout les developpeurs!
MisterLagaffe [20] - 06.11.2005, 21:58
cela m'al'air prometteur en effet... j'espere que le nouveau systeme expliquer Oject open star sera clair pour les programmeurs. :)
Seuls les utilisateurs enregistrés peuvent ajouter un commentaire. S'enregister/S'identifier [21]
_LINKS
  [1] http://www.postnuke-france.org/index.php?name=News&file=article&sid=19
  [2] http://www.postnuke-france.org/index.php?name=News&catid=&topic=1
  [3] http://news.postnuke.com/index.php?module=pncvs
  [4] http://mods.postnuke.com/Article2672.html
  [5] http://cvs.postnuke.com/viewcvs.cgi/Historic/PostNuke7x/html/modules/News/funcs.php
  [6] http://lists.postnuke.com/mailman/listinfo/postnuke-cvsnotices
  [7] http://news.postnuke.com/module-pncvs.html
  [8] http://noc.postnuke.com/tracker/?atid=101&group_id=5&func=browse
  [9] http://noc.postnuke.com/tracker/?atid=104&group_id=5&func=browse
  [10] http://www.postnuke-france.org/user.php?op=userinfo&uname=Nuky
  [11] http://www.postnuke-france.org/user.php?op=userinfo&uname=mumuri
  [12] http://www.postnuke-france.org/user.php?op=userinfo&uname=Chestnut
  [13] http://www.postnuke-france.org/user.php?op=userinfo&uname=Chestnut
  [14] http://www.postnuke-france.org/user.php?op=userinfo&uname=mumuri
  [15] http://www.w3.org/MarkUp
  [16] http://topflood.free.fr/compte-postnuke.gif
  [17] http://www.postnuke-france.org/user.php?op=userinfo&uname=Chestnut
  [18] http://www.postnuke-france.org/user.php?op=userinfo&uname=Gilles
  [19] http://www.postnuke.com
  [20] http://www.postnuke-france.org/user.php?op=userinfo&uname=MisterLagaffe
  [21] http://www.postnuke-france.org/user.php