[spip-dev] Petit recapitulatif des travaux sur la branche dev

Hello,

ayant pas mal de disponibilité personnelle ces temp-ci,
j'en ai profité pour faire avancer un certains nombre de chantiers qui étaient en souffrance sur la branche de développement
(master sur http://core.spip.org/trac/spip/ , numérotée 2.3-dev)

Comme cela génère beaucoup de commit et qu'il est difficile d'avoir une vue d'ensemble,
je fais ici un petit récapitulatif (j'aurais du annoncer avant de commencer, mea culpa).

Je précise bien que tout ceci concerne la version de développement et n'a rien de définitif en l'état.
Si certains chantiers paraissent aller dans une mauvaise direction ou être une mauvaise idée, ou mériteraient une ré-orientation, il y a toute la latitude pour le faire.
N'hésitez pas à donner votre avis.

Chantiers achevés :

Merci pour ce boulot et ce récapitulatif. J'ai quelques remarques / questions

Hello,

- Système de sauvegarde

  L'export XML des versions stables actuelles utilisé en sauvegarde est peu satisfaisant. Il est peu robuste, pose des problèmes au réimport entre versions différentes, plus ou moins bien gérés. Qui plus est, le code est devenu au fil du temps et des corrections de bug un maquis très difficilement debuggable. Sur une proposition de fil, le système d'export XML actuel a été sorti du core dans un plugin Connexion · GitLab
qui permet d'assurer la compatibiité au cas où (réimport d'un XML existant). Mais il est remplacé par défaut par l'extension Connexion · GitLab
qui réalise des sauvegardes complètes dans une base sqLite. La base incluant la structure des tables, cela facilitera la restauration de bases dans une version plus ancienne, qui viendra naturellement avec sa structure, et declenchera ensuite un upgrade classique. Par défaut, la sauvegarde sauve bien toutes les tables de la base, plugin actifs ou non, et restaure aussi toute la base, même celles d'un plugin inactif, ce qui était aussi un défaut du système actuel.

Sqlite a moins de choix dans les types de champs que MySQL. Donc est-ce qu'on risque pas d'avoir des soucis (du style un BIGTEXT qui se trouve transformer en TEXT). A moins que tu voulais dire que dans la base sqlite d'exporte il y a une table contenant la structure exact SQL ?

Chantiers en cours :
________

- Système de squelette de l'espace privé

  Le système de fond html unique placé dans prive/exec avec des commentaires HTML pour repérer des blocs était transitoire. Il a été dénoncé récemment a juste raison comme introduisant des nouvelles syntaxes. Ainsi que je l'avais proposé, j'ai implémenté une structure Z (comme ce qui se fait dans Zpip) dans prive/squelettes/, avec les blocs contenu,extra, hierarchie, navigation,top, head, pied. Le moteur 'styliser' de Zpip a donc été inclus avec quelques améliorations, mais n'est actif que pour l'espace privé.

Question : avec un 2.3 sera-t-il encore nécéssaire d'installer ZPIP pour profiter du moteur Z ? (detection automatique des pages-xxx.html, APL etc.)

Parceque par exemple, pour le moment, je suis obligé de surcharger certains fichiers extras / navigation du ZPIP qui sont différenciés selon le type de page alors que je ne veux des blocs identiques sur tout les types de pages.

Je sais pas si je suis très clair ....

- Reforme des pages et formulaires de configuration

  Tous les formulaires de configuration ont été réimplémentés en CVT, ce qui permet d'avoir une structure HTML homogène partout, un comportement identique, et de les utiliser dans des squelettes.
  Consécutivement, toutes les pages de configuration ont été ré-écrites en squelettes.

- Reforme des formulaires d'interaction

  De même, les formulaires d'interaction de l'espace privé sont peu a peu ré-écrits tous au format CVT, pour pouvoir être utilisés dans un squelette, proposer des interactions modernes avec message d'erreur etc... Ont déjà été faits #FORMULAIRE_DATER (date d'un article), #FORMULAIRE_EDITER_LOGO (logo d'un objet), #FORMULAIRE_REDIRIGER_ARTICLE (article virtuel) #FORMULAIRE_RECHERCHE_ECRIRE.
  

est-ce que qu'on peut pas imaginer un formulaire_dater générique pour tout type d'objet (exemple : #FORMULAIRE_DATE{table,id,champsdateàmodifier} ?

  Il reste encore principalement le formulaire de traduction (langue de l'article, ecrire une nouvelle traduction etc...) à réformer en CVT. Cela va naturellement s'accompagner d'une généralisation du code pour permettre d'appliquer ces actions à n'importe quel objet disposant d'un champ lang et id_trad.

- Découpe du Noyau en extensions

  Outre la sauvegarde évoquée plus haut, les pétitions ont été sorties en extension il y a quelques semaines par bruno, et mathieu a sorti recemment les brèves et les mots. A l'heure actuelle, il ne reste plus que deux chantiers de découpe : une extension regroupant agenda+messagerie qui sont trop intriquées dans le code pour en faire 2 extensions pour le moment, et une extension document. Sur ce dernier point, l'essentiel du refactoring de code (API, recodage en squelettes et CVT) a déjà été fait dans le plugin mediatheque, et il s'agit surtout d'intégrer celui-ci en extension en le nettoyant quelque peu (compatibiité SPIP 2.0 et quelques nommages), et de nettoyer complètement le noyau des références aux documents.

cool pour les pétitions. On pourra facilement ainsi avoir des champs supplémentaires

Chantiers à venir
_________

- Isolation des vieilles_def

  Suite à tous ces chantiers le noyau commence à contenir pas mal de fonctions maintenues juste pour compatibilités. Les isoler dans un conteneur permettrait de dépolluer le noyau et d'alléger, tout en assurant la compatibilité des plugins existant qui les utilisent.
En extensions/ cela permettrait aussi aux projets nouveau de supprimer ce code inutile. Cela concerne le inc/vieiiles_def existant deja dans les versions précédentes, le inc/afficher_objets, l'ancienne gestion de l'ajax php de l'espace privé (ajax_declencheur, ajax_action_greffe).
Je crois que c'est camille qui avait proposé cela initialement, mais je n'ai plus trace de la discussion.

oui, et surtt prévoir un listing quelquepart (je me rappel encore les migrations 1.9 vers 2.0)

- Normalisation des pages de l'espace privé

  Une fois tous les composants d'interaction réécrits en CVT comme expliqué plus haut, l'essentiel des pages de l'espace privé peut être réécrit en squelettes. Ce pourrait être l'occasion de normaliser le nommage rationnellement pour tous les objets sur la base du nom de l'objet :
  /?exec=articles pour voir les articles
  /?exec=article&id_article=xxx pour voir un article
  /?exec=article_edit&id_article=xxx pour editer un article. A moins qu'on ne garde le meme nom article en ajoutant un paramètre ? Cela donnerait /?exec=article&id_article=xxx&edit=oui

bonne idée. Pas d'opinion sur la question de la syntaxe.

- Finalisation système de thèmes
  
  L'espace privé s'appuie sur un système de thèmes qui permet de décliner les css et les icones par thèmes. Il reste à debugger cela, proposer une interface de choix dans les préférences personnelles, et porter par exemple les travaux d'arno réalisés pour la sortie de la 2.1
Connexion · GitLab, dans une extension themes/ qui est elle en chantier complet

cool. Ca pourrait se conventionner avec un thème Z pour avoir un espace privé ressemblant à l'espace public ?

- Nettoyage des icones

  La navigation remaniée s'appuie sur des icones 16px. Presque tout les nommages d'icone ont été rationalisés (pour avoir un nom d'icone qui correspond à ce qu'elle exprime et à son usage). Il y a du nettoyage a faire dans prive/images, mais surtout les icones en 16px actuelles ont été obtenues par réduction des icones 24px traditionnelles, ce qui donne un résultat assez moche.

- Integration du gestionnaire de file job_queue

  Le plugin est développé sur la zone depuis un petit moment Connexion · GitLab
Il permet une gestion de file d'attente de travaux datés, dans laquelle les crons sont inclus. Il modernise ainsi la gestion des crons, en ne déclenchant de hit que lorsque c'est nécessaire, et permet la programmation de travaux aysnchrone (envoi de mails, syndication etc...) par les plugins.

- Intégration de TextWheel

  Le projet a été initié par fil, les explications sont sur son blog Présentation de Textwheel - ZZZ
Il vise à remplacer l'implémentation PHP de tous les traitements typographiques de SPIP par un moteur unique et un ensemble de règles décrites en yaml. Son utilisation permet une optimisation des traitements, qui sont plus rapides. Il s'agirait donc d'intégrer le moteur sous forme de librairie, et les règles dans le noyau.

encore +cool. Est-ce que cela s'applique qu'aux raccourcis ou aussi au respect de la typofrancaise ?

- Intégration de l'API de mémoization

  L'api dévelopée par fil dans le plugin Connexion · GitLab permet de gérer l'utilisation de xcache, memcache ou APC pour stocker le cache par exemple, mais aussi le résultat de toute fonction répétitive.

qui sera donc mis en extension ?

Hello,

Bonsoir !

> Il reste encore principalement le formulaire
> de traduction (langue de l'article, ecrire une nouvelle traduction etc...) à
> réformer en CVT. Cela va naturellement s'accompagner d'une généralisation du
> code pour permettre d'appliquer ces actions à n'importe quel objet disposant
> d'un champ lang et id_trad.

Ah oui, merci. Magnifique !

ayant pas mal de disponibilité personnelle ces temp-ci,

Cache-cool t'appelle aussi quand tu ne sauras plus quoi faire :wink:

Paolo

Hello,

ayant pas mal de disponibilité personnelle ces temp-ci,
j'en ai profité pour faire avancer un certains nombre de chantiers qui étaient en souffrance sur la branche de développement
(master sur http://core.spip.org/trac/spip/ , numérotée 2.3-dev)

Tous ces développements sont vraiment super, et apportent du bon air
car ils permettent d'entrevoir un spip plus homogène, plus généraliste, plus générique
... et plus facile à programmer afin de le personnaliser,
et notamment afin de lui faire gérer des objets "sur mesure".

Il ne faut toutefois pas perdre de vue qu'il faut aussi stabiliser les choses,
les stabiliser totalement et parfaitement, et les documenter aussi,
si on veut qu'il soit facile de bâtir dessus, et de se "reposer" dessus.

Il serait donc bien que tu anticipes la fin de tes super-disponibilités
- pour autant que ça soit possible -
de manière à bien finir les chantiers entrepris, avant d'en ouvrir de nouveaux
trop pantagruelliques et qui ne pourraient être correctement clos.
"release often"...

La question de la compatibilité me vient aussi :
je crains une période de transition où certains plugins ne suivraient pas.
Je ne comprend pas ce que tu veux dire par "conteneur" de vieilles defs.
Est-ce un objet informatique bien particulier, ou un simple vocable fourre-tout-possible ?

Enfin, je me pose la question des développements des prochains mois :
faut il commencer de nouveaux projets avec la nouvelle API ?
Sinon qu'est-ce qui est conseillé ?

JLuc

Merci pour ce boulot et ce récapitulatif. J'ai quelques remarques / questions

Hello,

- Système de sauvegarde

Sqlite a moins de choix dans les types de champs que MySQL. Donc est-ce qu'on risque pas d'avoir des soucis (du style un BIGTEXT qui se trouve transformer en TEXT). A moins que tu voulais dire que dans la base sqlite d'exporte il y a une table contenant la structure exact SQL ?

Oui tout a fait. En plus des données, on sauvegarde un schema de la base initiale pour pouvoir le restaurer à l'identique. Car en effet, au passage en sqlite on perd de l'information si on se réfère uniquement à la structure de la table sqlite.

- Système de squelette de l'espace privé

Question : avec un 2.3 sera-t-il encore nécéssaire d'installer ZPIP pour profiter du moteur Z ? (detection automatique des pages-xxx.html, APL etc.)

C'est une question indépendante. Pour le moment oui il faudra toujours un plugin, mais on pourrait faire un zpip-core réduit au simple minimum. Mais pour moi cette question n'est pas liée au core.

- Reforme des formulaires d'interaction
  

est-ce que qu'on peut pas imaginer un formulaire_dater générique pour tout type d'objet (exemple : #FORMULAIRE_DATE{table,id,champsdateàmodifier} ?

C'est le cas :
on peut faire #FORMULAIRE_DATE{chaton,23}
le champ date est défini par ailleurs dans $GLOBALS['table_date'] pour le compilateur, ou sinon on suppose qu'il s'appelle 'date'

- Finalisation système de thèmes
  
  L'espace privé s'appuie sur un système de thèmes qui permet de décliner les css et les icones par thèmes. Il reste à debugger cela, proposer une interface de choix dans les préférences personnelles, et porter par exemple les travaux d'arno réalisés pour la sortie de la 2.1
Connexion · GitLab, dans une extension themes/ qui est elle en chantier complet

cool. Ca pourrait se conventionner avec un thème Z pour avoir un espace privé ressemblant à l'espace public ?

Avoir un privé ressemblant au public pourquoi pas, mais les thèmes ne sont pas identiques à ceux du public car ils ne remplissent pas le meme besoin (icones, feuille de style dynamique...)

- Intégration de TextWheel

encore +cool. Est-ce que cela s'applique qu'aux raccourcis ou aussi au respect de la typofrancaise ?

TextWheel concerne tous les raccourcis. Je ne crois pas qu'on ait traduit les règles de typo lié à la lange car elles dépendent justement de la lange.

- Intégration de l'API de mémoization

qui sera donc mis en extension ?

Oui. Peut être intégré avec tout ce qui concerne la performance dans l'extension compresseur qui du coup deviendrait plutot accelerateur.

Cédric

Ah oui en plus j'ai pensé à un patch qui pourrait corriger ton bug. Il faut que je l'implémente pour que tu puisses tester.

Cédric

Je crois que comme pour toutes les versions, il est sage d'attendre une beta pour commencer à faire reposer des projets dessus.
Tant qu'on est pas à ce stade là, les choses peuvent bouger dans un sens ou un autre (c'est aussi l'objet du mail), voire trainer dans le temps faute de dispo.

Cédric

Hum, il faudrait pourvoir indiquer parfois le champs quand necessaire, avec pourquoi pas un 3e paramètre ? ... par exemple, si on prend un exemple courant :
#FORMULAIRE_DATER{evenement,12,date_debut}
#FORMULAIRE_DATER{evenement,12,date_fin}

Ou encore
#FORMULAIRE_DATER{article,3,date_redac}

Matthieu.

est-ce que qu'on peut pas imaginer un formulaire_dater générique pour tout type d'objet (exemple : #FORMULAIRE_DATE{table,id,champsdateàmodifier} ?

C'est le cas :
on peut faire #FORMULAIRE_DATE{chaton,23}
le champ date est défini par ailleurs dans $GLOBALS['table_date'] pour le compilateur, ou sinon on suppose qu'il s'appelle 'date'

Hum, il faudrait pourvoir indiquer parfois le champs quand necessaire, avec pourquoi pas un 3e paramètre ? ... par exemple, si on prend un exemple courant :
#FORMULAIRE_DATER{evenement,12,date_debut}
#FORMULAIRE_DATER{evenement,12,date_fin}

mmm, je ne suis pas sur que ce soit le meme sens. Le formulaire concerne vraiment la date éditoriale. Pour un evenement, la date seule n'a pas forcément de sens, car il faut règler les deux en meme temps.

Ou encore
#FORMULAIRE_DATER{article,3,date_redac}

Oui par contre le formulaire gère la date_redac pour les articles (en fait c'est inclus dans #FORMULAIRE_DATER : il y a la date editoriale, et la date_redac si necessaire).

En fait ce formulaire n'est pas une saisie de date universelle, mais bien un formulaire de date editoriale. Dans ce périmètre là il est générique. Mais il ne prétends pas devoir être utilisé dès qu'une date doit être saisie qqpart.

Cédric

- Intégration de TextWheel

encore +cool. Est-ce que cela s'applique qu'aux raccourcis ou aussi au respect de la typofrancaise ?

TextWheel concerne tous les raccourcis. Je ne crois pas qu'on ait traduit les règles de typo lié à la lange car elles dépendent justement de la lange.

Non, la typo n'est pas gérée par les wheels (mais c'est par flemme,
pas par principe).

Cela étant, la typo dans textwheel est un peu plus rapide que celle du
core, car j'en ai profité pour faire un test de rapidité de chaque
ligne de code, et trouvé quelques optimisations.

- Intégration de l'API de mémoization

qui sera donc mis en extension ?

Oui. Peut être intégré avec tout ce qui concerne la performance dans l'extension compresseur qui du coup deviendrait plutot accelerateur.

Je ne suis pas pour cette proposition d'intégration, car c'est
conceptuellement très indépendant.

-- Fil

Merci pour ce mail récapitulatif et pour tout ce travail.

Juste trois petites questions :

- Découpe du Noyau en extensions

  et une extension document. Sur ce dernier point, l'essentiel du refactoring de code (API, recodage en squelettes et CVT) a déjà été fait dans le plugin mediatheque, et il s'agit surtout d'intégrer celui-ci en extension en le nettoyant quelque peu (compatibiité SPIP 2.0 et quelques nommages), et de nettoyer complètement le noyau des références aux documents.

Est-ce du coup le bon moment de reposer la question du mode des images (document ou image) et de le remplacer éventuellement par un champ portfolio dans spip_documents_liens (cf. mail précédent) ?

- Normalisation des pages de l'espace privé

  Une fois tous les composants d'interaction réécrits en CVT comme expliqué plus haut, l'essentiel des pages de l'espace privé peut être réécrit en squelettes. Ce pourrait être l'occasion de normaliser le nommage rationnellement pour tous les objets sur la base du nom de l'objet :
  /?exec=articles pour voir les articles
  /?exec=article&id_article=xxx pour voir un article
  /?exec=article_edit&id_article=xxx pour editer un article. A moins qu'on ne garde le meme nom article en ajoutant un paramètre ? Cela donnerait /?exec=article&id_article=xxx&edit=oui

Avec exec=article et exec=article_edit on comprend qu'il s'agit de deux squelettes différents, ce qui semble moins évident avec un paramètre, non ?

- Integration du gestionnaire de file job_queue

  Le plugin est développé sur la zone depuis un petit moment http://zone…spip.org/trac/spip-zone/browser/plugins/job_queue/
Il permet une gestion de file d'attente de travaux datés, dans laquelle les crons sont inclus. Il modernise ainsi la gestion des crons, en ne déclenchant de hit que lorsque c'est nécessaire, et permet la programmation de travaux aysnchrone (envoi de mails, syndication etc...) par les plugins.

Est-il envisager d'améliorer un peu la page de gestion des jobs et notamment de forcer via un lien clicqable la réalisation immédiate d'un job ? (Par exemple pouvoir forcer la syndication des flux RSS sans avoir à attendre la prochaine exécution programmée du job ?)