Admin restreint ne peut pas créer un événement lié à un article de son secteur

Testé sous SPIP 4.0.5 : un admin restreint à un secteur tente de créer un événement lié à un article situé dans le secteur en question => le formulaire editer_evenement n'est pas affiché sur ecrire/?exec=evenement_edit&id_evenement=new&id_article=XXX

Après débug, on voit que :

  • autoriser_article_creerevenementdans_dist() renvoie bien true
  • dans formulaires_editer_evenement_charger_dist() la valeur de editable vaut une chaîne vide

Cela vient de la fonction formulaires_editer_objet_charger() qui teste if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) { cf https://git.spip.net/SPIP/spip/src/commit/9f830f05724e9d7a0756125e3d2da24eddf1e889/ecrire/inc/editer.php#L334

On arrive donc dans function autoriser_evenement_creer_dist() avec une valeur id_parent au lieu de id_article comme attendu par défaut cf https://git.spip.net/spip-contrib-extensions/agenda/src/branch/master/agenda_autoriser.php#L87 et on retombe donc sur le second test qui ne laisse passer que les admins complets.

Proposition de patch, à venir dans une PR :

diff --git a/agenda_autoriser.php b/agenda_autoriser.php
index d6a5e01..5802306 100644
--- a/agenda_autoriser.php
+++ b/agenda_autoriser.php
@@ -68,6 +68,8 @@ function autoriser_article_creerevenementdans_dist($faire, $quoi, $id, $qui, $op
 function autoriser_evenement_creer_dist($faire, $quoi, $id, $qui, $options) {
 	if (isset($options['id_article']) and $options['id_article'] > 0) {
 		return autoriser('creerevenementdans', 'article', $options['id_article'], $qui, $options);
+	} elseif (isset($options['id_parent']) and $options['id_parent'] > 0) {
+		return autoriser('creerevenementdans', 'article', $options['id_parent'], $qui, $options);
 	} else {
 		return ($qui['statut'] == '0minirezo' and !$qui['restreint']);
 	}