[Résolu] pipeline notifications_destinataires absent

Bonjour,
j’ai une erreur qui ressort souvent dans mes logs: Pub:ERREUR: fonction execute_pipeline_notifications_destinataires absente : pipeline desactive

Après recherche, ce pipeline est appelé dans ecrire/notifications/instituer_article.php et dans le plugin-dist forum/notifications/forumposte.php

Sauf que - sauf erreur - ce pipeline semble uniquement définit dans le plugin (Notifications avancées - SPIP-Contrib) à cet endroit exactement notifications_avancees/notifavancees_pipelines.php at master - notifications_avancees - SPIP on GIT

Ça me semble étrange qu’une fonction du core appelle une fonction définie dans un plugin facultatif :thinking:
Soit j’ai loupé un truc, soit le core ne devrait pas faire ça, soit ce plugin devrait être en plugin-dist non? Avez vous une autre explication?

N’étant pas très familier de l’univers SPIP, je vous remercie pour vos lumières.

Cordialement,

Ah tiens, c’est juste. Y a prescription :face_with_monocle:, le souci semble là depuis 14 ans…

Plus spécifiquement c’est qu’il manque la déclaration de ce pipeline dans le fichier ecrire/paquet.xml dans ces coins.

Est-ce que tu veux faire un ticket sur Issues - spip - SPIP on GIT ou une PR ?

Je viens d’essayer, je ne peux pas me connecter car il me demande de passer par l’administrateur.

Par contre si je comprends bien ce paquet.xml permet de déclarer:

  • des pipelines utilisés dans core
  • mais pas forcément disponible car core ne peut pas savoir si le plugin qui définit ce pipeline est bien installé?
  • le tout dans faire d’erreur?

Hello,

Pour s’inscrire au git et faire des beaux tickets, il faut passer par contrib, bouton « s’inscrire pour contribuer » en haut à droite.

Et pour paquet.xml et pipelines, c’est bien l’idée.

Je ne dirais plutot l’inverse : le core propose des pipelines (il sont disponibles) et les plugins les utilisent (« se branchent dessus »).

C’est comme ça que j’avais compris les pipelines initialement, mais il semble qu’il y ait une bidirectionnalité.
Le core peut proposer des pipelines (ceux documentés ici Liste des pipelines - Programmer avec SPIP 4 ) aux plugins (dist ou pas), mais le core se permet aussi d’utiliser des pipeline définis dans des plugins non obligatoires si et seulement si ces derniers sont disponibles. Et c’est pour ça qu’il faut les déclarer « vides » dans le paquet.xml du ecrire/ (si j’ai bien compris comment ça fonctionne)

C’est comme ça que j’avais compris les pipelines initialement, mais il semble qu’il y ait une bidirectionnalité.
Le core peut proposer des pipelines (ceux documentés ici Liste des pipelines - Programmer avec SPIP 4 https://programmer.spip.net/-Liste-des-pipelines- ) aux plugins (dist ou pas), mais le core se permet aussi d’utiliser des pipeline définis dans des plugins non obligatoires si et seulement si ces derniers sont disponibles. Et c’est pour ça qu’il faut les déclarer « vides » dans le paquet.xml du |ecrire/| (si j’ai bien compris comment ça fonctionne)

Il n’y a aucun rapport avec core plugins etc, n’importe lesquels peuvent appeler des pipelines (càd pipeline() en PHP ou #PIPELINE{} en squelettes) et ensuite les déclarations dans les XML permettent deux choses suivant l’écriture : si vide ça permet juste de dire que le pipeline existe (et c’est l’endroit où il est appelé dans le code qui doit le dire), et si on donne fichier fonctions etc, bah c’est pour utiliser le pipeline donc s’insérer dedans.

Le truc que tu montres de notifications avancées, ça ne déclare pas le pipeline, ça dit qu’on veut s’insérer dedans = ça déclare une utilisation par ce plugin du pipeline, qui peut être n’importe où ailleurs (et même en plusieurs endroits à la fois).


RastaPopoulos

Déjà je m’aperçois que j’aurais pu être plus précis dans mon lien, je parlais de la ligne 72: notifications_avancees/notifavancees_pipelines.php at master - notifications_avancees - SPIP on GIT
Donc ce que tu me dis c’est qu’il existe un pipeline notifications_destinataires (mais qui n’est pas dans la doc) et que - entre autres - le plugin notification avancées définit une fonction (function notifications_destinataires($quoi, $id=0, $options=array())) qui sera exécutée lorsque quelqu’un appellera le pipeline.
Mais que je pourrais aussi avoir mon propre plugin dans lequel je pourrais raccrocher ma propre fonction et qui serait aussi exécutée?
J’ai bon?

Bon sinon j’ai tenté de modifier paquet.xml dans écrire, ça ne change rien. Tenté de passer la version en 4.1.10 ne fonctionne pas non plus. J’imagine qu’il faut être moins bourrin, comment spip reconnait le changement de version du paquet?

Oui

La page ecrire/?exec=admin_plugin recalcule ces données. (ou vider le cache du site)

le plugin notification avancées définit une fonction notifications_destinataires qui sera exécutée lorsque quelqu’un appellera le pipeline

edit: bloubi boulga

Ça peut prêter à confusion car le plugin met plein de fonctions en vrac dans le fichier notifications_pipelines.php, mais ça n’est pas le cas : la fonction n’est pas exécutée quand quelqu’un appelle le pipeline, c’est juste un homonyme. C’est elle même qui utilise le pipeline, qui se trouve avoir le même nom.

Les fonctions pipelines sont toujours nommées pipeline_<truc>

Pas tout à fait bon, mais tu approche.

  1. Le pipeline qui existe c’est notifications_destinataires. Il est appelé ici spip/instituerarticle.php at master - spip - SPIP on GIT
  2. Mais il n’est pas utilisé par `notifications_avancees (voir le paquet.xml du plugin notifications_avancees/paquet.xml at master - notifications_avancees - SPIP on GIT)
  3. En revanche, par un malheureux concours de circonstance historique, il existe une fonction notifications_destinataires dans le plugin notif avancé… qui elle même appele le plugin notification_destinataires notifications_avancees/notifavancees_pipelines.php at master - notifications_avancees - SPIP on GIT
  4. Par ailleurs notifications avancées utilise le pipeline notification (c’est la fonction notifavancees_notification notifications_avancees/notifavancees_pipelines.php at master - notifications_avancees - SPIP on GIT : prefixe+nomdupipeline)
  5. Lequel est appelé par le core ici spip/notifications.php at master - spip - SPIP on GIT

Mais sinon oui c’est le principe des pipelines : n’importe quel plugin (ou pas d’ailleurs, on peut faire cela via un mes_options mais c’est plus crade) peut définir une fonction qui permet d’utiliser un pipeline. Et n’importe quel plugin (ou pas) peut dire qu’à un moment on va appeler un pipeline.

1 « J'aime »

OK c’est plus clair merci. J’ai mon accès à spip contrib, je vais tenter une PR. Y a t-il des règles quelque part?

Je vois que seule la branche 4.2 est encore en maintenance, ça vaut dire qu’il faut que je push sur 4.2 et master? Si on push dans ecrire, ça veut dire qu’il faut forcément incrémenter sa version (le z du x.y.z ?)

Oui ici Contribuer au développement de SPIP - SPIP

On push toujours une PR sur master, puis ensuite l’équipe s’occupe de reporter dans les branches maintenues.

1 « J'aime »

Done !

Merci @cpol0