Ticket #786 (closed defect: fixed)
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
Change History
Changed 15 years ago by zeiram
- attachment class.dc.namespace.php added
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
- attachment class.dc.settings.php added
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.
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 ?