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 bientrue
- dans
formulaires_editer_evenement_charger_dist()
la valeur deeditable
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']);
}