Dotclear

Ticket #1380 (closed defect: wontfix)

Opened 11 years ago

Last modified 11 years ago

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:1 Changed 11 years ago by franck

Euh, pas moyen de reproduire l'erreur ! Je désactive l'antispam et rien ne se passe…

comment:2 Changed 11 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:3 Changed 11 years ago by franck

Idem ici, aucun souci, que ce soit PHP 5.2 ou PHP 5.4

comment:4 Changed 11 years ago by franck

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

comment:5 Changed 11 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 11 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 11 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 11 years ago by lipki

  • Status changed from closed to reopened
  • Resolution worksforme deleted

comment:9 Changed 11 years ago by franck

Faire ça de manière systématique dans dcModules, c'est hard je trouve.

comment:10 follow-up: ↓ 11 Changed 11 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 11 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

Version 0, edited 11 years ago by bruno (next)

comment:12 follow-up: ↓ 13 Changed 11 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 ?

Last edited 11 years ago by franck (previous) (diff)

comment:13 in reply to: ↑ 12 Changed 11 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 11 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 11 years ago by JcDenis

  • Status changed from reopened to closed
  • Resolution set to wontfix

Donc rapport à l'appel de variable global. Voir ticket:1471

comment:16 Changed 11 years ago by franck

  • Milestone A definir deleted
Note: See TracTickets for help on using tickets.

Sites map