Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : call_trigger() ne permet pas de passer $object

call_trigger() ne permet pas de passer $object il y a 4 ans 8 mois #56980

  • lrq3000
  • Portrait de lrq3000
  • Hors ligne
  • Gold Boarder
  • Messages : 285
  • Remerciements reçus 41
  • Karma: 19
Bonjour à tous,

J'ai vu qu'il était indiqué sur le wiki qu'à partir de Dolibarr 3.7.0, il était préférable de remplacer run_triggers() de la classe Interfaces par call_trigger() de la même classe. Pour l'instant les deux semblent cohabiter dans Dolibarr 3.7 alpha, mais j'imagine que dans le futur, run_triggers() sera amené à être supprimé pour ne garder que call_trigger().

Cependant le problème que j'ai rencontré est que run_triggers() permet de passer bien plus d'arguments, et notamment $object, ce qui permet aux triggers de travailler avec plus d'informations, ce que ne permet pas call_trigger() (les deux seuls arguments: nom du trigger et $user pour gérer les droits).

Pourquoi un tel changement? Est-ce qu'il y a une raison à la suppression de tous ces arguments supplémentaires? Ce nombre réduit d'arguments risque d’empêcher bon nombre de modules se basant sur les triggers de fonctionner avec Dolibarr 3.7 sans changements conséquents (comme c'est le cas de CustomFields qui a besoin que $object soit passé en argument d'un trigger). Ou alors est-ce qu'il faut maintenant accéder à $object en la déclarant comme une variable globale?

Bref, je vous remercie pour tout éclairage à ce sujet.
L'administrateur a désactivé l'accès en écriture pour le public.

call_trigger() ne permet pas de passer $object il y a 4 ans 8 mois #56981

  • defrance
  • Portrait de defrance
  • Hors ligne
  • Gold Boarder
  • Dev-Leader des patas-monkey
  • Messages : 3377
  • Remerciements reçus 668
  • Karma: 131
Bonsoir
A moins que je ne me trompe et d'après ce que j'en comprend, l'appel du call_trigger à la place du run_trigger permet juste de simplifier l'appel et ne pas avoir à transmettre des valeurs qui sont récupérables...
bref à part simplifier l'appel, je n'ai pas l'impression que cela change quoi que ce soit
L'administrateur a désactivé l'accès en écriture pour le public.

call_trigger() ne permet pas de passer $object il y a 4 ans 8 mois #56982

  • lrq3000
  • Portrait de lrq3000
  • Hors ligne
  • Gold Boarder
  • Messages : 285
  • Remerciements reçus 41
  • Karma: 19
Si ce n'est qu'une fonction simplificatrice, dans ce cas là pourquoi pas, mais ce n'est pas ce que je comprends de la doc:
With Dolibarr >= 3.7 you must use this piece of code for new trigger :
wiki.dolibarr.org/index.php/Triggers#Man...w_trigger.27s_action

Il semble d'après cette phrase qu'il soit nécessaire d'utiliser call_trigger() à la place de run_triggers() pour être compatible avec les futures versions de Dolibarr. D'où ma question: est-ce que run_triggers() est appelé à disparaitre? Et si oui, comment vont être passés les $object ?
L'administrateur a désactivé l'accès en écriture pour le public.

call_trigger() ne permet pas de passer $object il y a 4 ans 7 mois #57898

  • lrq3000
  • Portrait de lrq3000
  • Hors ligne
  • Gold Boarder
  • Messages : 285
  • Remerciements reçus 41
  • Karma: 19
Pas de réponse à ce sujet? J'ai regardé le code de Dolibarr v3.7, run_triggers() est toujours dispo dans cette version. Peut-on continuer à utiliser run_triggers() alors ou est-ce que cette commande sera remplacée à terme par call_trigger() ?
L'administrateur a désactivé l'accès en écriture pour le public.

call_trigger() ne permet pas de passer $object il y a 4 ans 7 mois #57903

  • frederic34
  • Portrait de frederic34
  • Hors ligne
  • Gold Boarder
  • @NetLogic
  • Messages : 1277
  • Remerciements reçus 345
  • Karma: 62
Bonjour
Si j'ai bien compris au lieu de faire run_triggers($trigger_name,$object,$user,$langs,$conf) on fait $object->call_triggers($trigger_name, $user)

github.com/Dolibarr/dolibarr/blob/develo...lass.php#L3367-L3397

Fred
Dernière édition: il y a 4 ans 7 mois par frederic34.
L'administrateur a désactivé l'accès en écriture pour le public.