Ticket #1380 (closed defect: wontfix)
Désactiver le plugin Antispam provoque une erreur
Reported by: | philippe | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | module:plugins | Version: | 2.4 |
Severity: | normal | Keywords: | |
Cc: |
Description
Lorsqu'on désactive le plugin, l'admin devient inaccessible avec le message
Fatal error: Call to a member function addBehavior() on a non-object in /xxx/xxx/www/dotclear/plugins/importExport/_prepend.php on line 28
La seule solution est d'aller supprimer, par FTP, le fichier disabled dans le répertoire du plugin
Change History
comment:2 Changed 10 years ago by philippe
Correction : c'est en désactivant akismet *et* antispam, mais seulement sur un blog en php 5.2. Sur un autre en php 5.4 il n'y a pas de souci.
Du coup, je me dis que c'est peut-être moi le problème...
comment:4 Changed 10 years ago by franck
- Status changed from new to closed
- Resolution set to worksforme
comment:5 Changed 10 years ago by lipki
Problème reproduit avec php 5.4.12 sur Dotclear 2.5.1 et 2.5.2 en test
je vais creuser.
comment:6 Changed 10 years ago by lipki
ok voilà le souci, c'est assez simple en fait.
Dans askimet et antispam, est déclarer en début de _prepend :
global $__autoload, $core;
Les autres plugin en profite bien.
Donc soit on considère que c'est le problème des plugins et on complète la doc.
Soit on chercher à régler le problème en déclarant :
global $__autoload, $core;
dans \inc\core\class.dc.modules.php function loadModules
comment:7 Changed 10 years ago by JcDenis
Tiens, oui problème connu. noramelement les plugineurs sont cencé le savoir et déclarer $aotoload et $core SI ILS EN ONT BESOIN dans leurs prepend.
Après je ne sais pas si c'est une bonne idée ou non de les déclarer dans dcModules ? ça règle le problème, mais quels impacts ?
comment:8 Changed 10 years ago by lipki
- Status changed from closed to reopened
- Resolution worksforme deleted
comment:9 Changed 10 years ago by franck
Faire ça de manière systématique dans dcModules, c'est hard je trouve.
comment:10 follow-up: ↓ 11 Changed 10 years ago by bruno
Mouais ... un peu d'injection de dépendances serait intéressant ici.
Pas vérifié, mais les _(prepend|public\admin).php des plugins devraient avoir visibilité sur $this qui pointe vers une instance de dcModule. Laquelle possède un attribut $core (au pourrait ajouter un autoloader).
Il suffit donc de remplacer les $core par $this->core. D'ailleurs, toute référence à $core directement dans un plugin serait à proscrire...
comment:11 in reply to: ↑ 10 Changed 10 years ago by bruno
Replying to bruno:
Mouais ... un peu d'injection de dépendances serait intéressant ici.
Nota : je ne parle pas ici de dépendances entre plugins/thèmes (quoique ça résoudrait quelques soucis de ce coté), mais de dependency injection, ie. dans un module, ne pas faire appel à des variables que l'on suppose déclarées par ailleurs, mais profiter d'un paramètre ajouté qui spécifie qui est qui. cf. http://www.siteduzero.com/informatique/tutoriels/introduction-a-l-injection-de-dependances-en-php (pas besoin de pimple ici, je parle juste du concept :)
comment:12 follow-up: ↓ 13 Changed 10 years ago by franck
Euh, y'a un truc que je ne comprends pas au sujet du bug décrit dans ce ticket, dans _prepend.php du plugin importExport j'ai :
global $__autoload,$core;
WTF ?
comment:13 in reply to: ↑ 12 Changed 10 years ago by JcDenis
Replying to franck:
Euh, y'a un truc que je ne comprends pas au sujet du bug décrit dans ce ticket, dans _prepend.php du plugin importExport j'ai :
global $__autoload,$core;WTF ?
Justement si tu enlèves ce plugin, les autres plugins qui ne déclare pas cette variable en GLOBAL ne profite plus de celle d'antispam.
comment:14 Changed 10 years ago by franck
Ben c'est pas ce qui est expliqué dans le ticket, l'erreur portait sur importExport, c'est pour ça que je posais la question.
comment:15 Changed 10 years ago by JcDenis
- Status changed from reopened to closed
- Resolution set to wontfix
Donc rapport à l'appel de variable global. Voir ticket:1471
Euh, pas moyen de reproduire l'erreur ! Je désactive l'antispam et rien ne se passe…