<?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() {
}

// Pour ne permettre l'accès à l'espace privé qu'aux admins
// (pour les autres, on redirige vers l'accueil)
function autoriser_ecrire($faire, $type, $id, $qui, $opt){
	return in_array($qui['statut'], array('0minirezo')); 
}

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_lire($faire, $type, $id, $qui, $opt) {
	// Si l'article fait partie de la rubrique "Espace membre", il faut être au moins rédacteur ("membre").

	$id_membre = lire_config('balint/id_mots_espace_membre');
	$id_mot = sql_getfetsel('id_mot','spip_mots','id_groupe='. $id_membre);
	if (in_array($id_mot, $opt)){
		return in_array($qui['statut'], array('0minirezo','1comite'));
	}
	// Sinon il faut être admin
	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_article_rediger($faire, $type, $id, $qui, $opt) {
	// Si le membre est rédacteur, il doit être animateur d'au moins un groupe
	if ($qui['statut']=="1comite"){
		$id_rub = lire_config('balint/id_rub_groupes');
		$T_id_groupes = sql_allfetsel('id_article','spip_articles','id_secteur=' . $id_rub);
		foreach($T_id_groupes as $id_groupe){
			if (in_array($qui['id_auteur'],auteurs_objet('article',$id_groupe['id_article']))){
				return true;
			}
		}
	}
	// Sinon il faut être admin
	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'));
}

function autoriser_sujet_editer($faire, $type, $id, $qui, $opt) {
	// Seul les admins et l'auteur peuvent le supprimer
	if (in_array($qui['id_auteur'],auteurs_objet('article',$id))){
		return true;
	}
	else {
		return in_array($qui['statut'],array('0minirezo'));
	}
}

function autoriser_forum_voir($faire, $type, $id, $qui, $opt) {
	$id_auteur = $qui['id_auteur'];
	// Il faut être au moins membre
	if ($qui['statut'] == '1comite'){
		// si le forum est privé, il faut être membre du bureau
		if ($id == lire_config('balint/id_rub_forum_prive')){
			if (sql_getfetsel('bureau','spip_auteurs',"id_auteur=$id_auteur")=='on'){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return true;
		}
	}
	// Les admins ont accès à tout
	if ($qui['statut']=='0minirezo'){
		return true;
	}
	// si aucun des cas précédents (pas loggué par ex)
	return false;
}
