On normalise les éléments du forum pour qu'il transmette l'id du forum en paramètre, notamment pour la création et la redirection dans le bon forum. On ajoute des fonctions d'autorisation pour qu'un créateur de sujet puisse le modifier tant qu'il n'a pas de réponse. On modifie les autorisations pour le formulaire editer_auteur, afin qu'un simple inscrit (6forum) puisse éditer son profil aussi !
129 lines
3.2 KiB
PHP
129 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* Définit les autorisations du plugin balint
|
|
*
|
|
* @plugin balint
|
|
* @copyright 2020
|
|
* @author Gamuza[informatique]
|
|
* @licence GNU/GPL
|
|
* @package SPIP\Fip\Autorisations
|
|
*/
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
return;
|
|
}
|
|
|
|
|
|
/**
|
|
* Fonction d'appel pour le pipeline
|
|
* @pipeline autoriser */
|
|
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))){
|
|
return true;
|
|
}
|
|
else{
|
|
return in_array($qui['statut'], array('0minirezo'));
|
|
}
|
|
}
|
|
|
|
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'));
|
|
}
|
|
}
|
|
}
|