Dotclear

Ticket #786 (closed defect: fixed)

Opened 15 years ago

Last modified 14 years ago

Les namespaces de settings ne remplissent par leur rôle

Reported by: zeiram Owned by: xave
Priority: normal Milestone: 2.2
Component: module:core Version: 2.1
Severity: normal Keywords: namespace setting
Cc:

Description

En l'état actuel, la gestion des namespaces dans Dotclear2 ne sert qu'à regrouper les settings pour un plus bel affichage dans le plugin about:config. Il n'y a aucune gestion des namespaces pour la modification ou l'accès à un setting. Par conséquent, si deux plugins définissent le même setting, mais dans des namespaces différents, il n'y aura en réalité qu'un seul setting stocké dans la base et les deux plugins vont se marcher sur les pieds. Voir  la discussion sur le forum pour tous les détails.

Pour éviter des conflits, il est nécessaire de forcer les plugins (et le core de Dotclear2 également) à faire un appel à setNamespace avant un quelconque accès (lecture, création, modification, suppression) aux settings. Et il faut modifier la classe dcSettings pour utiliser ce namespace dans chaque accès base de données.

Attachments

class.dc.namespace.php Download (7.6 KB) - added by zeiram 15 years ago.
Nouvelle classe dcNamespace gérant les espaces de noms
class.dc.settings.php Download (7.9 KB) - added by zeiram 15 years ago.
Nouvelle classe dcSettings gérant les espaces de noms

Change History

comment:1 Changed 15 years ago by pep

Il va falloir réfléchir à deux fois avant de mettre les mains là-dedans : en l'état, le jeu en vaut-il vraiment la chandelle vu les risques potentiels en terme de compatibilité, stabilité et performances que cette modification risque d'introduire ?

Changed 15 years ago by zeiram

Nouvelle classe dcNamespace gérant les espaces de noms

comment:2 Changed 15 years ago by zeiram

Voilà deux fichiers implémentant une gestion presque[1] correcte des espaces de noms dans Dotclear2.

Quelques remarques :

  • on accède aux settings ainsi : $core->blog->setttings->system->public_url ;
  • l'ajout d'un nouvel espace de noms se fait en deux étapes :
  • * $core->blog->settings->addNamespace('foo');
  • * $core->blog->settings->foo->put('bar', 'baz');
  • il y a une rétro compatibilité pour que le code actuel n'ait pas à être modifié, mais :
  • * les fonctions de rétro compatibilité sont indiquées deprecated dans la documentation du code ;
  • * de plus, elles lèvent une erreur E_USER_NOTICE pour signaler leur utilisation (avec un stack trace pour retrouver l'appel) ;
  • * si le serveur est configuré pour afficher les erreurs de type NOTICE, cette modification a un effet de bord sur les pages faisant appel à http::redirect (les headers sont déjà envoyés par les messages d'erreur et le redirect ne peut avoir lieu).

À suivre bientôt : un gros fichier diff permettant de convertir intégralement une installation de Dotclear 2.1.5 à la nouvelle utilisation des namespaces et, très rapidement, la correction du fichier class.dc.settings.php avec la méthode addNamespace qui manque en ce moment.

[1] J'ai oublié d'offrir la possibilité d'ajouter un espace de noms (méthode addNamespace) dans les settings dans cette version. Ce sera corrigé tout soudain avec un nouvel attachment pour remplacer le class.dc.settings.php.

Changed 15 years ago by zeiram

Nouvelle classe dcSettings gérant les espaces de noms

comment:3 Changed 15 years ago by zeiram

Voilà, cette fois-ci la classe dcSettings contient la méthode addNamespace et est donc complète.

comment:4 follow-up: ↓ 5 Changed 15 years ago by zeiram

Le diff permettant de convertir un Dotclear 2.1.5 afin qu'il supporte le nouveau système de namespaces est trop lourd pour pouvoir être ajouté à ce ticket. Il est donc  à disposition sur mon site.

comment:5 in reply to: ↑ 4 Changed 15 years ago by zeiram

Replying to zeiram:

Le diff permettant de convertir un Dotclear 2.1.5 afin qu'il supporte le nouveau système de namespaces est trop lourd pour pouvoir être ajouté à ce ticket. Il est donc  à disposition sur mon site.

Attention : ce diff suppose que les deux classes proposées ci-dessus (class.dc.settings.php et class.dc.namespace.php) sont déjà en place dans l'installation de Dotclear2.

comment:6 Changed 14 years ago by xave

  • Status changed from new to closed
  • Resolution set to fixed

(In [2920]) New namespace system for the settings. Hats off to Zeiram !

Closes #786.

comment:7 follow-up: ↓ 9 Changed 14 years ago by bruno

(In [3040]) Disabled "Deprecated" exceptions when DC_DEBUG not enabled, addresses #786

comment:8 Changed 14 years ago by xave

(In [3044]) Merging changes from Bazar. Closes #676, #786, #801.

comment:9 in reply to: ↑ 7 Changed 14 years ago by zeiram

Replying to bruno:

(In [3040]) Disabled "Deprecated" exceptions when DC_DEBUG not enabled, addresses #786

Ah ouais, ça c'est une bonne idée... je m'en veux de ne pas y avoir pensé. :-)

Note: See TracTickets for help on using tickets.

Sites map