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… 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 :
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.