diff --git a/action/supprimer_sujet.php b/action/supprimer_sujet.php index e9c65a3..e684e88 100644 --- a/action/supprimer_sujet.php +++ b/action/supprimer_sujet.php @@ -19,8 +19,8 @@ function action_supprimer_sujet_dist(){ suivre_invalideur("id='id_article/$id_article'"); } - // redirection sur l'accueil - $retour = 'spip.php?page=forum_discussion'; + // redirection + $retour = _request('redirect'); include_spip('inc/headers'); redirige_par_entete($retour); } diff --git a/balint_autorisations.php b/balint_autorisations.php index 3cff955..0a16040 100644 --- a/balint_autorisations.php +++ b/balint_autorisations.php @@ -20,6 +20,82 @@ if (!defined('_ECRIRE_INC_VERSION')) { function balint_autoriser() { } +function autoriser_auteur_modifier($faire, $type, $id, $qui, $opt) { + + // Ni admin ni redacteur => non + if (!in_array($qui['statut'], array('0minirezo', '1comite', '6forum'))) { + return false; + } + + // Un redacteur peut modifier ses propres donnees mais ni son login/email + // ni son statut (qui sont le cas echeant passes comme option) + if (in_array($qui['statut'], array('1comite','6forum'))) { + if (!empty($opt['webmestre'])) { + return false; + } elseif ( + !empty($opt['statut']) + or !empty($opt['restreintes']) + or !empty($opt['email']) + ) { + return false; + } elseif ($id == $qui['id_auteur']) { + return true; + } else { + return false; + } + } + + // Un admin restreint peut modifier/creer un auteur non-admin mais il + // n'a le droit ni de le promouvoir admin, ni de changer les rubriques + if ($qui['restreint']) { + if (isset($opt['webmestre']) and $opt['webmestre']) { + return false; + } elseif ((isset($opt['statut']) and ($opt['statut'] == '0minirezo')) + or (isset($opt['restreintes']) and $opt['restreintes']) + ) { + return false; + } else { + if ($id == $qui['id_auteur']) { + if (isset($opt['statut']) and $opt['statut']) { + return false; + } else { + return true; + } + } else { + if ($id_auteur = intval($id)) { + $t = sql_fetsel('statut', 'spip_auteurs', "id_auteur=$id_auteur"); + if ($t and $t['statut'] != '0minirezo') { + return true; + } else { + return false; + } + } // id = 0 => creation + else { + return true; + } + } + } + } + + // Un admin complet fait ce qu'il veut + // sauf se degrader + if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) { + return false; + } elseif (isset($opt['webmestre']) + and $opt['webmestre'] + and (defined('_ID_WEBMESTRES') + or !autoriser('webmestre'))) { + // et toucher au statut webmestre si il ne l'est pas lui meme + // ou si les webmestres sont fixes par constante (securite) + return false; + } // et modifier un webmestre si il ne l'est pas lui meme + elseif (intval($id) and autoriser('webmestre', '', 0, $id) and !autoriser('webmestre')) { + return false; + } else { + return true; + } +} + function autoriser_article_modifier($faire, $type, $id, $qui, $opt) { if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){ @@ -30,3 +106,24 @@ function autoriser_article_modifier($faire, $type, $id, $qui, $opt) { } } +function autoriser_sujet_creer($faire, $type, $id, $qui, $opt) { + return in_array($qui['statut'], array('0minirezo','1comite','6forum')); +} + +function autoriser_sujet_supprimer($faire, $type, $id, $qui, $opt) { + + // Si le sujet a eu au moins une réponse, on ne peut plus le supprimer + if (sql_fetsel('*','spip_forum',"id_objet=$id AND objet='article'")){ + return false; + } + // Sinon, seul les admins et l'auteur peuvent le supprimer + else{ + + if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){ + return true; + } + else{ + return in_array($qui['statut'], array('0minirezo')); + } + } +} diff --git a/content/editer_sujet.html b/content/editer_sujet.html index 1c2ba1f..07813ab 100644 --- a/content/editer_sujet.html +++ b/content/editer_sujet.html @@ -12,7 +12,7 @@ [(#ENV{id_article}|oui) [(#AUTORISER{modifier, article, #ENV{id_article}}|?{