Fix #20 : le formulaire de gestion des inscriptions affiche sur la page d'un auteur doit verifier que l'auteur connecte a bien le droit de voir et modifier le subscriber en question, et adapter le comportement du formulaire en fonction.

Les 2 fonctions autoriser(voir) et autoriser(modifier) d'un subscriber laissent maintenant passer la possibilité de voir/modifier un subscriber qui correspond à l'auteur identifié, quel que soit son statut
pull/21/head
Cerdic 1 year ago
parent 16eb8b2aea
commit b756649847

@ -8,20 +8,22 @@
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
#SET{fl,mailsubscriber}
[(#ENV{editable})
[(#ENV{editable}|oui)
<form method='post' action='#ENV{action}'><div>
#ACTION_FORMULAIRE{#ENV{action}}
]
<div class="editer-groupe">
#SET{name,listes}#SET{obli,'obligatoire'}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label>[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
<span class='erreur_message'>(#GET{erreurs})</span>
]
<INCLURE{fond=formulaires/inc-check-subscribinglists,name=#GET{name},choix_listes=#ENV{_listes_dispo},env} />
<INCLURE{fond=formulaires/inc-check-subscribinglists,name=#GET{name},choix_listes=#ENV{_listes_dispo},env,disabled=#ENV{editable}|?{'',' '}} />
</div>
</div>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
[(#ENV{editable}|oui)
<p class="boutons"><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]

@ -10,6 +10,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/actions');
include_spip('inc/mailsubscribers');
include_spip('inc/editer');
include_spip('inc/autoriser');
/**
* Declarer les champs postes et y integrer les valeurs par defaut
@ -29,6 +30,7 @@ function formulaires_editer_email_subscription_charger_dist($email) {
'_listes_dispo' => $listes_dispos,
'_email' => $email,
'_id_mailsubscriber' => '',
'editable' => ' ',
);
$subscriber = charger_fonction('subscriber', 'newsletter');
@ -43,6 +45,15 @@ function formulaires_editer_email_subscription_charger_dist($email) {
}
}
$id = (empty($valeurs['_id_mailsubscriber']) ? 0 : $valeurs['_id_mailsubscriber']);
if (!autoriser('voir', 'mailsubscriber', $id, null, ['email' => $email])) {
return false;
}
if (!autoriser('modifier', 'mailsubscriber', $id, null, ['email' => $email])) {
$valeurs['editable'] = '';
}
return $valeurs;
}

@ -5,7 +5,7 @@
|ou{#ENV{status,''}|=={#VALEUR{status}}}
|ou{#GET{val}|in_any{#ENV{#GET{name},#GET{defaut}}}})
<div class="choix">
<input type="checkbox" name="#GET{name}#EVAL{chr(91)}#EVAL{chr(93)}" class="checkbox" id="#GET{name}_#GET{val}" value="#GET{val}"[(#GET{val}|in_any{#ENV{#GET{name},#GET{defaut}}}|oui)checked="checked"] />
<input type="checkbox" name="#GET{name}#EVAL{chr(91)}#EVAL{chr(93)}" class="checkbox" id="#GET{name}_#GET{val}" value="#GET{val}"[(#GET{val}|in_any{#ENV{#GET{name},#GET{defaut}}}|oui)checked="checked"][(#ENV{disabled}|oui)disabled="disabled"] />
<label for="#GET{name}_#GET{val}">[(#VALEUR{titre}|typo)][ <i><small>((#VAL{}|concat{'mailsubscribinglist:texte_statut_',#VALEUR{status}|replace{open,ouverte}|replace{close,fermee}}|_T))</small></i>]</label>
[<p class="small">(#VALEUR{descriptif}|propre|PtoBR)</p>]
</div>

@ -45,12 +45,52 @@ function autoriser_mailsubscriber_iconifier_dist($faire, $type, $id, $qui, $opt)
// voir les fiches completes
function autoriser_mailsubscriber_voir_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
if ($qui['statut'] == '0minirezo' AND !$qui['restreint']) {
return true;
}
// un auteur connecte peut toujours voir sa propre fiche mailsubscriber
if (!empty($GLOBALS['visiteur_session']['email'])) {
$email = '';
if (!empty($opt['email'])) {
$email = $opt['email'];
}
elseif ($id) {
$email = sql_getfetsel('email', 'spip_mailsubscribers', 'id_mailsubscriber='.intval($id));
}
if (!empty($email)) {
if ($GLOBALS['visiteur_session']['email'] === $email
or mailsubscribers_obfusquer_email($GLOBALS['visiteur_session']['email']) === $email) {
return true;
}
}
}
return false;
}
// modifier
function autoriser_mailsubscriber_modifier_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
if ($qui['statut'] == '0minirezo' AND !$qui['restreint']) {
return true;
}
// un auteur connecte peut toujours voir sa propre fiche mailsubscriber
if (!empty($GLOBALS['visiteur_session']['email'])) {
$email = '';
if (!empty($opt['email'])) {
$email = $opt['email'];
}
elseif ($id) {
$email = sql_getfetsel('email', 'spip_mailsubscribers', 'id_mailsubscriber='.intval($id));
}
if (!empty($email)) {
if ($GLOBALS['visiteur_session']['email'] === $email
or mailsubscribers_obfusquer_email($GLOBALS['visiteur_session']['email']) === $email) {
return true;
}
}
}
return false;
}
// supprimer

Loading…
Cancel
Save