Fonction autoriser() espace public et espace privé

Bonjour à tous,

Je travaille sur la refonte du plugin InfoSites pour le rendre compatible SPIP 4.0. Ce plugin utilise plusieurs plugins de la communauté, dont « Coordonnées » et « Contacts et Organisations ». Dans le back, sur la page d’un contact, grâce aux boutons « Ajouter numéro », « Ajouter email » et « Ajouter adresse », je peux ajouter les éléments que je désire.
Dans l’espace public, (auteur authentifié et tout ce qu’il faudrait), sur la page dudit même contact, j’ai bien les boutons. MAIS, quand je clique sur n’importe lequel, j’ai une erreur fatale :

Fatal error : Uncaught Error: Call to undefined function autoriser() in /var/www/spip_40/ecrire/inc/editer.php:334 
Stack trace: 
    #0 /var/www/spip_40/plugins/gitea/coordonnees/formulaires/editer_numero.php(122): formulaires_editer_objet_charger() 
    #1 /var/www/spip_40/ecrire/balise/formulaire_.php(319): formulaires_editer_numero_charger_dist() #2 /var/www/spip_40/ecrire/balise/formulaire_.php(210): formulaire__charger() 
    #3 /var/www/spip_40/ecrire/balise/formulaire_.php(162): balise_FORMULAIRE__contexte() 
    #4 /var/www/spip_40/ecrire/public/evaluer_page.php(51) : eval()'d code(16): balise_FORMULAIRE__dyn() 
    #5 /var/www/spip_40/ecrire/public/evaluer_page.php(51): eval() 
    #6 /var/www/spip_40/ecrire/public/assembler.php(683): include('/var/www/spip_4...') 
    #7 /var/www/spip_40/ecrire/inc/utils.php(3297): evaluer_fond() 
    #8 /var/www/spip_40/ecrire/public/aiguiller.php(143): recuperer_fond() 
    #9 /var/www/spip_40/ecrire/public.php(102): traiter_appels_inclusions_ajax() 
    #10 /var/www/spip_40/spip.php(20): include('/var/www/spip_4...') 
    #11 {mai in /var/www/spip_40/ecrire/inc/editer.php on line 334

Est-ce que cela vous parle ?
J’utilise le même code entre l’espace public et l’espace privé. Je ne vois pas ce qui pourrait faire planter l’appel à la fonction autoriser().

hum,

je ne sais pas pourquoi tu a cela, car il faudrait avoir toutes la pile d’appel

mais un petit include_spip('inc/autoriser') resolverait sans doute le problème.

Je te confirme que l’ajout de l’inclure règle le souci.
Je ne sais pas la méthode maintenant pour proposer un correctif au core de SPIP en git. :slight_smile:

  1. Forker le depot
  2. Clone le fork
  3. Creer une branche
  4. Faire le correctit et commiter
  5. pusher
  6. Faire une demande de fusion

(C’est valable pour d’autres projets que SPIP en fait !)

Mais bon, tout de depend du contexte d’appel encore une fois, donc casse trouve le problème est pas dans le core, mais dans ton usage

1 « J'aime »

Merci pour ce processus. Je vais regarder ça.

En règle générale, il est préférable d’avoir les inclusions pour éviter des surprises. :slight_smile: Il faut les utiliser à bon escient.

bien sur, mais si l’inclusion est manquante, ca peut être que tu appelle une fonction qui n’azraut pas du être appelée directement.

Hum… En soit, je ne vois pas pourquoi l’appel à la fonction autoriser poserait un problème. Certes, je l’appelle en espace public, mais, il n’y a rien dans la fonction qui test si on est en espace privé ou pas.

De plus, pour remettre dans le contexte, j’utilise le même principe que le BO :

Y-a-t-il une non recommandation à ce niveau stp ?

non, ce que je disais c’est que selon l’endroit où tu appelle non pas autoriser(), mais la fonction qui in fine appelle autoriser(), bah il se peut que inc/autoriser ait été chargé OU PAS. En gros : côté privé, visiblement inc/autoriser est systématiquement chargé, côté public apparament c’est pas toujours le cas.

Oui, on est d’accord. Dans le privé, beaucoup de fonctions sont chargées sans même l’inclusion explicite. Et cela amène parfois a des difficultés de développement lorsqu’on désire amener des formulaires dans le public.
Je n’en ai pas fait la liste, mais j’ai rencontré cette problématique au début du développement du plugin InfoSites.
Je vais voir pour faire le « tour » du propriétaire et mettre ces inclusions dans le core. Il ne doit certainement rester que des broutilles avec tout le travail réalisé par la core-team.