1816 lines
59 KiB
PHP
1816 lines
59 KiB
PHP
<?php
|
||
|
||
/***************************************************************************\
|
||
* SPIP, Systeme de publication pour l'internet *
|
||
* *
|
||
* Copyright (c) 2001-2019 *
|
||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
|
||
* *
|
||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
|
||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
|
||
\***************************************************************************/
|
||
|
||
/**
|
||
* Gestion de l'API autoriser et fonctions d'autorisations de SPIP
|
||
*
|
||
* @package SPIP\Core\Autorisations
|
||
**/
|
||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||
return;
|
||
}
|
||
|
||
include_spip('base/abstract_sql');
|
||
|
||
// Constantes surchargeables, cf. plugin autorite
|
||
|
||
/**
|
||
* Gérer les admins restreints ?
|
||
*
|
||
* @todo une option à activer
|
||
*/
|
||
defined('_ADMINS_RESTREINTS') || define('_ADMINS_RESTREINTS', true);
|
||
|
||
/** Statut par defaut à la creation */
|
||
defined('_STATUT_AUTEUR_CREATION') || define('_STATUT_AUTEUR_CREATION', '1comite');
|
||
|
||
/** statuts associables a des rubriques (separes par des virgules) */
|
||
defined('_STATUT_AUTEUR_RUBRIQUE') || define('_STATUT_AUTEUR_RUBRIQUE', _ADMINS_RESTREINTS ? '0minirezo' : '');
|
||
|
||
|
||
if (!function_exists('autoriser')) {
|
||
/**
|
||
* Autoriser une action
|
||
*
|
||
* Teste si une personne (par défaut le visiteur en cours) peut effectuer
|
||
* une certaine action. Cette fonction est le point d'entrée de toutes
|
||
* les autorisations.
|
||
*
|
||
* La fonction se charge d'appeler des fonctions d'autorisations spécifiques
|
||
* aux actions demandées si elles existent. Elle cherche donc les fonctions
|
||
* dans cet ordre :
|
||
*
|
||
* - autoriser_{type}_{faire}, sinon avec _dist
|
||
* - autoriser_{type}, sinon avec _dist
|
||
* - autoriser_{faire}, sinon avec _dist
|
||
* - autoriser_{defaut}, sinon avec _dist
|
||
*
|
||
* Seul le premier argument est obligatoire.
|
||
*
|
||
* @note
|
||
* Le paramètre `$type` attend par défaut un type d'objet éditorial, et à ce titre,
|
||
* la valeur transmise se verra appliquer la fonction 'objet_type' pour uniformiser
|
||
* cette valeur.
|
||
*
|
||
* Si ce paramètre n'a rien n'a voir avec un objet éditorial, par exemple
|
||
* 'statistiques', un souligné avant le terme est ajouté afin d'indiquer
|
||
* explicitement à la fonction autoriser de ne pas transformer la chaîne en type
|
||
* d'objet. Cela donne pour cet exemple : `autoriser('detruire', '_statistiques')`
|
||
*
|
||
* @note
|
||
* Le paramètre `$type`, en plus de l'uniformisation en type d'objet, se voit retirer
|
||
* tous les soulignés du terme. Ainsi le type d'objet `livre_art` deviendra `livreart`
|
||
* et SPIP cherchera une fonction `autoriser_livreart_{faire}`. Ceci permet
|
||
* d'éviter une possible confusion si une fonction `autoriser_livre_art` existait :
|
||
* quel serait le type, quel serait l'action ?
|
||
*
|
||
* Pour résumer, si le type d'objet éditorial a un souligné, tel que 'livre_art',
|
||
* la fonction d'autorisation correspondante ne l'aura pas.
|
||
* Exemple : `function autoriser_livreart_modifier_dist(...){...}`
|
||
*
|
||
* @api
|
||
* @see autoriser_dist()
|
||
*
|
||
* @param string $faire
|
||
* une action ('modifier', 'publier'...)
|
||
* @param string $type
|
||
* type d'objet ou nom de table ('article')
|
||
* @param int $id
|
||
* id de l'objet sur lequel on veut agir
|
||
* @param null|int|array $qui
|
||
* - si null on prend alors visiteur_session
|
||
* - un id_auteur (on regarde dans la base)
|
||
* - un tableau auteur complet, y compris [restreint]
|
||
* @param null|array $opt
|
||
* options sous forme de tableau associatif
|
||
* @return bool
|
||
* true si la personne peut effectuer l'action
|
||
*/
|
||
function autoriser($faire, $type = '', $id = 0, $qui = null, $opt = null) {
|
||
// Charger les fonctions d'autorisation supplementaires
|
||
static $pipe;
|
||
if (!isset($pipe)) {
|
||
$pipe = 1;
|
||
pipeline('autoriser');
|
||
}
|
||
|
||
$args = func_get_args();
|
||
|
||
return call_user_func_array('autoriser_dist', $args);
|
||
}
|
||
}
|
||
|
||
|
||
// mes_fonctions peut aussi declarer des autorisations, il faut donc le charger
|
||
// mais apres la fonction autoriser()
|
||
if ($f = find_in_path('mes_fonctions.php')) {
|
||
global $dossier_squelettes;
|
||
include_once(_ROOT_CWD . $f);
|
||
}
|
||
|
||
|
||
/**
|
||
* Autoriser une action
|
||
*
|
||
* Voir autoriser() pour une description complète
|
||
*
|
||
* @see autoriser()
|
||
*
|
||
* @param string $faire
|
||
* une action ('modifier', 'publier'...)
|
||
* @param string $type
|
||
* type d'objet ou nom de table ('article')
|
||
* @param int $id
|
||
* id de l'objet sur lequel on veut agir
|
||
* @param null|int|array $qui
|
||
* si null on prend alors visiteur_session
|
||
* un id_auteur (on regarde dans la base)
|
||
* un tableau auteur complet, y compris [restreint]
|
||
* @param null|array $opt
|
||
* options sous forme de tableau associatif
|
||
* @return bool
|
||
* true si la personne peut effectuer l'action
|
||
*/
|
||
function autoriser_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) {
|
||
|
||
// Qui ? visiteur_session ?
|
||
// si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
|
||
if ($qui === null or $qui === '') {
|
||
$qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array();
|
||
$qui = array_merge(array('statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'), $qui);
|
||
} elseif (is_numeric($qui)) {
|
||
$qui = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . $qui);
|
||
}
|
||
|
||
// Admins restreints, on construit ici (pas generique mais...)
|
||
// le tableau de toutes leurs rubriques (y compris les sous-rubriques)
|
||
if (_ADMINS_RESTREINTS and is_array($qui)) {
|
||
$qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : array();
|
||
}
|
||
|
||
spip_log(
|
||
"autoriser $faire $type $id (" . (isset($qui['nom']) ? $qui['nom'] : '') . ') ?',
|
||
'autoriser' . _LOG_DEBUG
|
||
);
|
||
|
||
// passer par objet_type pour avoir les alias
|
||
// et supprimer les _
|
||
$type = str_replace('_', '', strncmp($type, '_', 1) == 0 ? $type : objet_type($type, false));
|
||
|
||
// Si une exception a ete decretee plus haut dans le code, l'appliquer
|
||
if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id])
|
||
and autoriser_exception($faire, $type, $id, 'verifier')
|
||
) {
|
||
spip_log("autoriser ($faire, $type, $id, " . (isset($qui['nom']) ? $qui['nom'] : '') . ') : OK Exception', 'autoriser' . _LOG_DEBUG);
|
||
return true;
|
||
}
|
||
|
||
// Chercher une fonction d'autorisation
|
||
// Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
|
||
// autoriser_faire[_dist], autoriser_defaut[_dist]
|
||
$fonctions = $type
|
||
? array(
|
||
'autoriser_' . $type . '_' . $faire,
|
||
'autoriser_' . $type . '_' . $faire . '_dist',
|
||
'autoriser_' . $type,
|
||
'autoriser_' . $type . '_dist',
|
||
'autoriser_' . $faire,
|
||
'autoriser_' . $faire . '_dist',
|
||
'autoriser_defaut',
|
||
'autoriser_defaut_dist'
|
||
)
|
||
: array(
|
||
'autoriser_' . $faire,
|
||
'autoriser_' . $faire . '_dist',
|
||
'autoriser_defaut',
|
||
'autoriser_defaut_dist'
|
||
);
|
||
|
||
foreach ($fonctions as $f) {
|
||
if (function_exists($f)) {
|
||
$a = $f($faire, $type, $id, $qui, $opt);
|
||
break;
|
||
}
|
||
}
|
||
|
||
spip_log(
|
||
"$f($faire, $type, $id, " . (isset($qui['nom']) ? $qui['nom'] : '') . ') : ' . ($a ? 'OK' : 'niet'),
|
||
'autoriser' . _LOG_DEBUG
|
||
);
|
||
|
||
return $a;
|
||
}
|
||
|
||
// une globale pour aller au plus vite dans la fonction generique ci dessus
|
||
$GLOBALS['autoriser_exception'] = array();
|
||
|
||
/**
|
||
* Accorder une autorisation exceptionnel pour le hit en cours, ou la revoquer
|
||
*
|
||
* http://code.spip.net/@autoriser_exception
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param bool $autoriser accorder (true) ou revoquer (false)
|
||
* @return bool
|
||
*/
|
||
function autoriser_exception($faire, $type, $id, $autoriser = true) {
|
||
// une static innaccessible par url pour verifier que la globale est positionnee a bon escient
|
||
static $autorisation;
|
||
if ($autoriser === 'verifier') {
|
||
return isset($autorisation[$faire][$type][$id]);
|
||
}
|
||
if ($autoriser === true) {
|
||
$GLOBALS['autoriser_exception'][$faire][$type][$id] = $autorisation[$faire][$type][$id] = true;
|
||
}
|
||
if ($autoriser === false) {
|
||
unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
|
||
unset($autorisation[$faire][$type][$id]);
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation par defaut
|
||
*
|
||
* Les admins complets OK, les autres non
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
$qui['statut'] == '0minirezo'
|
||
and !$qui['restreint'];
|
||
}
|
||
|
||
/**
|
||
* Autorisation a se loger ? Retourne true pour tous les statuts sauf 5poubelle
|
||
* Peut etre surchargee pour interdire statut=nouveau a se connecter
|
||
* et forcer l'utilisation du lien de confirmation email pour valider le compte
|
||
*
|
||
* @param $faire
|
||
* @param $type
|
||
* @param $id
|
||
* @param $qui
|
||
* @param $opt
|
||
* @return bool
|
||
*/
|
||
function autoriser_loger_dist($faire, $type, $id, $qui, $opt) {
|
||
if ($qui['statut'] == '5poubelle') {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'accès à l'espace privé ?
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_ecrire_dist($faire, $type, $id, $qui, $opt) {
|
||
return isset($qui['statut']) and in_array($qui['statut'], array('0minirezo', '1comite'));
|
||
}
|
||
|
||
/**
|
||
* Autorisation de créer un contenu
|
||
*
|
||
* Accordée par defaut ceux qui accèdent à l'espace privé,
|
||
* peut-être surchargée au cas par cas
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_creer_dist($faire, $type, $id, $qui, $opt) {
|
||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||
}
|
||
|
||
/**
|
||
* Autorisation de prévisualiser un contenu
|
||
*
|
||
* @uses test_previsualiser_objet_champ()
|
||
* @uses decrire_token_previsu()
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) {
|
||
|
||
// Le visiteur a-t-il un statut prevu par la config ?
|
||
if (strpos($GLOBALS['meta']['preview'], ',' . $qui['statut'] . ',') !== false) {
|
||
return test_previsualiser_objet_champ($type, $id, $qui, $opt);
|
||
}
|
||
|
||
// A-t-on un token de prévisualisation valable ?
|
||
include_spip('inc/securiser_action');
|
||
if (decrire_token_previsu()) {
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Teste qu'un objet éditorial peut être prévisualisé
|
||
*
|
||
* Cela permet ainsi de commander l'affichage dans l'espace prive du bouton "previsualiser"
|
||
* voir `prive/objets/infos/article.html` etc.
|
||
*
|
||
* Cela dépend du statut actuel de l'objet d'une part, et d'autre part de la
|
||
* clé `previsu` dans le tableau `statut` de la déclaration de l'objet éditorial.
|
||
* Cette clé `previsu` liste des statuts, séparés par des virgules,
|
||
* qui ont le droit d'avoir une prévisualisation. La présence de `xx/auteur` indique que pour le
|
||
* statut `xx`, l'auteur en cours doit être un des auteurs de l'objet éditorial en question
|
||
* pour que ce statut autorise la prévisualisation.
|
||
*
|
||
* Exemple pour les articles : `'previsu' => 'publie,prop,prepa/auteur',`
|
||
*
|
||
* @uses lister_tables_objets_sql()
|
||
*
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return boolean True si autorisé, false sinon.
|
||
*/
|
||
function test_previsualiser_objet_champ($type = null, $id = 0, $qui = array(), $opt = array()) {
|
||
|
||
// si pas de type et statut fourni, c'est une autorisation generale => OK
|
||
if (!$type) {
|
||
return true;
|
||
}
|
||
|
||
include_spip('base/objets');
|
||
$infos = lister_tables_objets_sql(table_objet_sql($type));
|
||
if (isset($infos['statut'])) {
|
||
foreach ($infos['statut'] as $c) {
|
||
if (isset($c['publie'])) {
|
||
if (!isset($c['previsu'])) {
|
||
return false;
|
||
} // pas de previsu definie => NIET
|
||
$champ = $c['champ'];
|
||
if (!isset($opt[$champ])) {
|
||
return false;
|
||
} // pas de champ passe a la demande => NIET
|
||
$previsu = explode(',', $c['previsu']);
|
||
// regarder si ce statut est autorise pour l'auteur
|
||
if (in_array($opt[$champ] . '/auteur', $previsu)) {
|
||
|
||
// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
|
||
// sinon l’auteur en session
|
||
include_spip('inc/securiser_action');
|
||
if ($desc = decrire_token_previsu()) {
|
||
$id_auteur = $desc['id_auteur'];
|
||
} elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
|
||
$id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
|
||
} else {
|
||
$id_auteur = null;
|
||
}
|
||
|
||
if (!$id_auteur) {
|
||
return false;
|
||
} elseif(autoriser('previsualiser' . $opt[$champ], $type, '', $id_auteur)) {
|
||
// dans ce cas (admin en general), pas de filtrage sur ce statut
|
||
} elseif (!sql_countsel(
|
||
'spip_auteurs_liens',
|
||
'id_auteur=' . intval($id_auteur) . ' AND objet=' . sql_quote($type) . ' AND id_objet=' . intval($id)
|
||
)) {
|
||
return false;
|
||
} // pas auteur de cet objet => NIET
|
||
} elseif (!in_array($opt[$champ], $previsu)) {
|
||
// le statut n'est pas dans ceux definis par la previsu => NIET
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de changer de langue un contenu
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_changerlangue_dist($faire, $type, $id, $qui, $opt) {
|
||
$multi_objets = explode(',', lire_config('multi_objets'));
|
||
$gerer_trad_objets = explode(',', lire_config('gerer_trad_objets'));
|
||
$table = table_objet_sql($type);
|
||
if (in_array($table, $multi_objets)
|
||
or in_array($table, $gerer_trad_objets)) { // affichage du formulaire si la configuration l'accepte
|
||
$multi_secteurs = lire_config('multi_secteurs');
|
||
$champs = objet_info($type, 'field');
|
||
if ($multi_secteurs == 'oui'
|
||
and array_key_exists('id_rubrique', $champs)) {
|
||
// multilinguisme par secteur et objet rattaché à une rubrique
|
||
$primary = id_table_objet($type);
|
||
if ($table != 'spip_rubriques') {
|
||
$id_rubrique = sql_getfetsel('id_rubrique', "$table", "$primary=" . intval($id));
|
||
} else {
|
||
$id_rubrique = $id;
|
||
}
|
||
$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
|
||
if (!$id_secteur > 0) {
|
||
$id_secteur = $id_rubrique;
|
||
}
|
||
$langue_secteur = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_secteur));
|
||
$langue_objet = sql_getfetsel('lang', "$table", "$primary=" . intval($id));
|
||
if ($langue_secteur != $langue_objet) {
|
||
// configuration incohérente, on laisse l'utilisateur corriger la situation
|
||
return true;
|
||
}
|
||
if ($table != 'spip_rubriques') { // le choix de la langue se fait seulement sur les rubriques
|
||
return false;
|
||
} else {
|
||
$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id));
|
||
if ($id_parent != 0) {
|
||
// sous-rubriques : pas de choix de langue
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
return false;
|
||
}
|
||
|
||
return autoriser('modifier', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de changer le lien de traduction
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_changertraduction_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('modifier', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de changer la date d'un contenu
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_dater_dist($faire, $type, $id, $qui, $opt) {
|
||
$table = table_objet($type);
|
||
$trouver_table = charger_fonction('trouver_table', 'base');
|
||
$desc = $trouver_table($table);
|
||
if (!$desc) {
|
||
return false;
|
||
}
|
||
|
||
if (!isset($opt['statut'])) {
|
||
if (isset($desc['field']['statut'])) {
|
||
$statut = sql_getfetsel('statut', $desc['table'], id_table_objet($type) . '=' . intval($id));
|
||
} else {
|
||
$statut = 'publie';
|
||
} // pas de statut => publie
|
||
} else {
|
||
$statut = $opt['statut'];
|
||
}
|
||
|
||
// Liste des statuts publiés pour cet objet
|
||
if (isset($desc['statut'][0]['publie'])) {
|
||
$statuts_publies = explode(',', $desc['statut'][0]['publie']);
|
||
}
|
||
// Sinon en dur le statut "publie"
|
||
else {
|
||
$statuts_publies = array('publie');
|
||
}
|
||
|
||
if (
|
||
in_array($statut, $statuts_publies)
|
||
// Ou cas particulier géré en dur ici pour les articles
|
||
or ($statut == 'prop' and $type == 'article' and $GLOBALS['meta']['post_dates'] == 'non')
|
||
) {
|
||
return autoriser('modifier', $type, $id);
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'instituer un contenu
|
||
*
|
||
* C'est à dire de changer son statut ou son parent.
|
||
* Par défaut, il faut l'autorisation de modifier le contenu
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_instituer_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('modifier', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de publier dans une rubrique $id
|
||
*
|
||
* Il faut être administrateur ou administrateur restreint de la rubrique
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
($qui['statut'] == '0minirezo')
|
||
and (
|
||
!$qui['restreint'] or !$id
|
||
or in_array($id, $qui['restreint'])
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de créer une rubrique
|
||
*
|
||
* Il faut être administrateur pour pouvoir publier à la racine
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_creer_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
((!$id and autoriser('defaut', null, null, $qui, $opt))
|
||
or $id and autoriser('creerrubriquedans', 'rubrique', $id, $qui, $opt)
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de créer une sous rubrique dans une rubrique $id
|
||
*
|
||
* Il faut être administrateur et pouvoir publier dans la rubrique
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_creerrubriquedans_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
($id or ($qui['statut'] == '0minirezo' and !$qui['restreint']))
|
||
and autoriser('voir', 'rubrique', $id)
|
||
and autoriser('publierdans', 'rubrique', $id);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de créer un article dans une rubrique $id
|
||
*
|
||
* Il faut pouvoir voir la rubrique et pouvoir créer un article…
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
$id
|
||
and autoriser('voir', 'rubrique', $id)
|
||
and autoriser('creer', 'article');
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation de modifier une rubrique $id
|
||
*
|
||
* Il faut pouvoir publier dans cette rubrique
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
autoriser('publierdans', 'rubrique', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de supprimer une rubrique $id
|
||
*
|
||
* Il faut quelle soit vide (pas d'enfant) et qu'on ait le droit de la modifier
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
||
if (!$id = intval($id)) {
|
||
return false;
|
||
}
|
||
|
||
if (sql_countsel('spip_rubriques', 'id_parent=' . intval($id))) {
|
||
return false;
|
||
}
|
||
|
||
if (sql_countsel('spip_articles', 'id_rubrique=' . intval($id) . " AND (statut<>'poubelle')")) {
|
||
return false;
|
||
}
|
||
|
||
$compte = pipeline(
|
||
'objet_compte_enfants',
|
||
array('args' => array('objet' => 'rubrique', 'id_objet' => $id), 'data' => array())
|
||
);
|
||
foreach ($compte as $objet => $n) {
|
||
if ($n) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return autoriser('modifier', 'rubrique', $id);
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation de modifier un article $id
|
||
*
|
||
* Il faut pouvoir publier dans le parent
|
||
* ou, si on change le statut en proposé ou préparation être auteur de l'article
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||
$r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article=' . sql_quote($id));
|
||
|
||
return
|
||
$r
|
||
and
|
||
(
|
||
autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
|
||
or (
|
||
(!isset($opt['statut']) or $opt['statut'] !== 'publie')
|
||
and in_array($qui['statut'], array('0minirezo', '1comite'))
|
||
and in_array($r['statut'], array('prop', 'prepa', 'poubelle'))
|
||
and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur'])
|
||
)
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de créer un article
|
||
*
|
||
* Il faut qu'une rubrique existe et être au moins rédacteur
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_article_creer_dist($faire, $type, $id, $qui, $opt) {
|
||
return (sql_countsel('spip_rubriques') > 0 and in_array($qui['statut'], array('0minirezo', '1comite')));
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir un article
|
||
*
|
||
* Il faut être admin ou auteur de l'article, sinon il faut que l'article
|
||
* soit publié ou proposé.
|
||
*
|
||
* Peut-être appelée sans $id, mais avec un $opt['statut'] pour tester
|
||
* la liste des status autorisés en fonction de $qui['statut']
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
*/
|
||
function autoriser_article_voir_dist($faire, $type, $id, $qui, $opt) {
|
||
if ($qui['statut'] == '0minirezo') {
|
||
return true;
|
||
}
|
||
// cas des articles : depend du statut de l'article et de l'auteur
|
||
if (isset($opt['statut'])) {
|
||
$statut = $opt['statut'];
|
||
} else {
|
||
if (!$id) {
|
||
return false;
|
||
}
|
||
$statut = sql_getfetsel('statut', 'spip_articles', 'id_article=' . intval($id));
|
||
}
|
||
|
||
return
|
||
// si on est pas auteur de l'article,
|
||
// seuls les propose et publies sont visibles
|
||
in_array($statut, array('prop', 'publie'))
|
||
// sinon si on est auteur, on a le droit de le voir, evidemment !
|
||
or
|
||
($id
|
||
and $qui['id_auteur']
|
||
and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur']));
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation de voir un objet
|
||
*
|
||
* Tout est visible par défaut, sauf les auteurs où il faut au moins être rédacteur.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_voir_dist($faire, $type, $id, $qui, $opt) {
|
||
# securite, mais on aurait pas du arriver ici !
|
||
if (function_exists($f = 'autoriser_' . $type . '_voir')
|
||
or function_exists($f = 'autoriser_' . $type . '_voir_dist')) {
|
||
return $f($faire, $type, $id, $qui, $opt);
|
||
}
|
||
|
||
if ($qui['statut'] == '0minirezo') {
|
||
return true;
|
||
}
|
||
// admins et redacteurs peuvent voir un auteur
|
||
if ($type == 'auteur') {
|
||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||
}
|
||
// sinon par defaut tout est visible
|
||
// sauf cas particuliers traites separemment (ie article)
|
||
return true;
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation de webmestre
|
||
*
|
||
* Est-on webmestre ? Signifie qu'on n'a même pas besoin de passer par ftp
|
||
* pour modifier les fichiers, cf. notamment inc/admin
|
||
*
|
||
* Soit la liste des webmestres est définie via une constante _ID_WEBMESTRES,
|
||
* soit on regarde l'état "webmestre" de l'auteur
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
(defined('_ID_WEBMESTRES') ?
|
||
in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
|
||
: $qui['webmestre'] == 'oui')
|
||
and $qui['statut'] == '0minirezo'
|
||
and !$qui['restreint'];
|
||
}
|
||
|
||
/**
|
||
* Autorisation Configurer le site
|
||
*
|
||
* Il faut être administrateur complet
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurer_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
$qui['statut'] == '0minirezo'
|
||
and !$qui['restreint'];
|
||
}
|
||
|
||
/**
|
||
* Autorisation de sauvegarder la base de données
|
||
*
|
||
* Il faut être administrateur (y compris restreint)
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_sauvegarder_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
$qui['statut'] == '0minirezo';
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'effacer la base de données
|
||
*
|
||
* Il faut être webmestre
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_detruire_dist($faire, $type, $id, $qui, $opt) {
|
||
return
|
||
autoriser('webmestre', null, null, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de prévisualiser un auteur
|
||
*
|
||
* Il faut être administrateur ou que l'auteur à prévisualiser
|
||
* ait au moins publié un article
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_auteur_previsualiser_dist($faire, $type, $id, $qui, $opt) {
|
||
// les admins peuvent "previsualiser" une page auteur
|
||
if ($qui['statut'] == '0minirezo'
|
||
and !$qui['restreint']
|
||
) {
|
||
return true;
|
||
}
|
||
// "Voir en ligne" si l'auteur a un article publie
|
||
$n = sql_fetsel(
|
||
'A.id_article',
|
||
'spip_auteurs_liens AS L LEFT JOIN spip_articles AS A ON (L.objet=\'article\' AND L.id_objet=A.id_article)',
|
||
"A.statut='publie' AND L.id_auteur=" . sql_quote($id)
|
||
);
|
||
|
||
return $n ? true : false;
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation de créer un auteur
|
||
*
|
||
* Il faut être administrateur (restreint compris).
|
||
*
|
||
* @note
|
||
* Seuls les administrateurs complets ont accès à tous les
|
||
* champs du formulaire d'édition d'un auteur. À la création
|
||
* d'un auteur, son statut est 'poubelle'. C'est l'autorisation
|
||
* de modifier qui permet de changer les informations sensibles
|
||
* (statut, login, pass, etc.) à l'institution.
|
||
*
|
||
* @see auteur_inserer()
|
||
* @see auteur_instituer()
|
||
* @see autoriser_auteur_modifier_dist()
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_auteur_creer_dist($faire, $type, $id, $qui, $opt) {
|
||
return ($qui['statut'] == '0minirezo');
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation de modifier un auteur
|
||
*
|
||
* Attention tout depend de ce qu'on veut modifier. Il faut être au moins
|
||
* rédacteur, mais on ne peut pas promouvoir (changer le statut) un auteur
|
||
* avec des droits supérieurs au sien.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||
|
||
// Ni admin ni redacteur => non
|
||
if (!in_array($qui['statut'], array('0minirezo', '1comite'))) {
|
||
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 ($qui['statut'] == '1comite') {
|
||
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;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation d'associer un auteur sur un objet
|
||
*
|
||
* Il faut pouvoir modifier l'objet en question
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_associerauteurs_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('modifier', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation d'upload FTP
|
||
*
|
||
* Il faut être administrateur.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_chargerftp_dist($faire, $type, $id, $qui, $opt) {
|
||
return $qui['statut'] == '0minirezo';
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'activer le mode debug
|
||
*
|
||
* Il faut être administrateur.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_debug_dist($faire, $type, $id, $qui, $opt) {
|
||
return $qui['statut'] == '0minirezo';
|
||
}
|
||
|
||
/**
|
||
* Liste les rubriques d'un auteur
|
||
*
|
||
* Renvoie la liste des rubriques liées à cet auteur, independamment de son
|
||
* statut (pour les admins restreints, il faut donc aussi vérifier statut)
|
||
*
|
||
* Mémorise le resultat dans un tableau statique indéxé par les id_auteur.
|
||
* On peut reinitialiser un élément en passant un 2e argument non vide
|
||
*
|
||
* @param int $id_auteur Identifiant de l'auteur
|
||
* @param bool $raz Recalculer le résultat connu pour cet auteur
|
||
* @return array Liste des rubriques
|
||
**/
|
||
function liste_rubriques_auteur($id_auteur, $raz = false) {
|
||
static $restreint = array();
|
||
|
||
if (!$id_auteur = intval($id_auteur)) {
|
||
return array();
|
||
}
|
||
if ($raz) {
|
||
unset($restreint[$id_auteur]);
|
||
} elseif (isset($restreint[$id_auteur])) {
|
||
return $restreint[$id_auteur];
|
||
}
|
||
|
||
$rubriques = array();
|
||
if ((!isset($GLOBALS['meta']['version_installee'])
|
||
or $GLOBALS['meta']['version_installee'] > 16428)
|
||
and $r = sql_allfetsel(
|
||
'id_objet',
|
||
'spip_auteurs_liens',
|
||
'id_auteur=' . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0"
|
||
)
|
||
and count($r)
|
||
) {
|
||
$r = array_map('reset', $r);
|
||
|
||
// recuperer toute la branche, au format chaine enumeration
|
||
include_spip('inc/rubriques');
|
||
$r = calcul_branche_in($r);
|
||
$r = explode(',', $r);
|
||
|
||
// passer les rubriques en index, elimine les doublons
|
||
$r = array_flip($r);
|
||
// recuperer les index seuls
|
||
$r = array_keys($r);
|
||
// combiner pour avoir un tableau id_rubrique=>id_rubrique
|
||
// est-ce vraiment utile ? (on preserve la forme donnee par le code precedent)
|
||
$rubriques = array_combine($r, $r);
|
||
}
|
||
|
||
// Affecter l'auteur session le cas echeant
|
||
if (isset($GLOBALS['visiteur_session']['id_auteur'])
|
||
and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
|
||
) {
|
||
$GLOBALS['visiteur_session']['restreint'] = $rubriques;
|
||
}
|
||
|
||
|
||
return $restreint[$id_auteur] = $rubriques;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de modifier l'URL d'un objet
|
||
*
|
||
* Il faut pouvoir modifier l'objet.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_modifierurl_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('modifier', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de prévisualiser une rubrique
|
||
*
|
||
* Il faut pouvoir prévisualiser.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_previsualiser_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('previsualiser');
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'iconifier une rubrique (mettre un logo)
|
||
*
|
||
* Il faut pouvoir publier dans la rubrique.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubrique_iconifier_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('publierdans', 'rubrique', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'iconifier un auteur (mettre un logo)
|
||
*
|
||
* Il faut un administrateur ou que l'auteur soit celui qui demande l'autorisation
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_auteur_iconifier_dist($faire, $type, $id, $qui, $opt) {
|
||
return (($id == $qui['id_auteur']) or
|
||
(($qui['statut'] == '0minirezo') and !$qui['restreint']));
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'iconifier un objet (mettre un logo)
|
||
*
|
||
* Il faut pouvoir modifier l'objet
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_iconifier_dist($faire, $type, $id, $qui, $opt) {
|
||
// par defaut, on a le droit d'iconifier si on a le droit de modifier
|
||
return autoriser('modifier', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation OK
|
||
*
|
||
* Autorise toujours !
|
||
* Fonction sans surprise pour permettre les tests.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true
|
||
**/
|
||
function autoriser_ok_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation NIET
|
||
*
|
||
* Refuse toujours !
|
||
* Fonction sans surprise pour permettre les tests.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool false
|
||
**/
|
||
function autoriser_niet_dist($faire, $type, $id, $qui, $opt) {
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de réparer la base de données
|
||
*
|
||
* Il faut pouvoir la détruire (et ne pas être en cours de réinstallation)
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool false
|
||
**/
|
||
function autoriser_base_reparer_dist($faire, $type, $id, $qui, $opt) {
|
||
if (!autoriser('detruire') or _request('reinstall')) {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir l'onglet infosperso
|
||
*
|
||
* Toujours OK
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_infosperso_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le formulaire configurer_langage
|
||
*
|
||
* Toujours OK
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_langage_configurer_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir l'onglet configurerlangage
|
||
*
|
||
* Calquée sur l'autorisation de voir le formulaire configurer_langage
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurerlangage_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_langage', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le formulaire configurer_preferences
|
||
*
|
||
* Toujours OK
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_preferences_configurer_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir l'onglet configurerpreferences
|
||
*
|
||
* Calquée sur l'autorisation de voir le formulaire configurer_preferences
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurerpreferences_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_preferences', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'afficher le menu développement
|
||
*
|
||
* Dépend de la préférences utilisateur
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_menudeveloppement_menugrandeentree_dist($faire, $type, $id, $qui, $opt) {
|
||
return (isset($GLOBALS['visiteur_session']['prefs']['activer_menudev'])
|
||
and $GLOBALS['visiteur_session']['prefs']['activer_menudev'] == 'oui');
|
||
}
|
||
|
||
/**
|
||
* Autorisation d'afficher une grande entrée de menu
|
||
*
|
||
* Par defaut les grandes entrees (accueil, édition, publication, etc.)
|
||
* sont visibles de tous
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_menugrandeentree_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu auteurs
|
||
*
|
||
* Toujours OK
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_auteurs_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu articles
|
||
*
|
||
* Toujours OK
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_articles_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu rubriques
|
||
*
|
||
* Toujours OK
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_rubriques_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu articlecreer
|
||
*
|
||
* Il faut au moins une rubrique présente.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_articlecreer_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return verifier_table_non_vide();
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu auteurcreer
|
||
*
|
||
* Il faut pouvoir créer un auteur !
|
||
*
|
||
* @see autoriser_auteur_creer_dist()
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_auteurcreer_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('creer', 'auteur', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu "afficher les visiteurs"
|
||
*
|
||
* Être admin complet et il faut qu'il en existe ou que ce soit activé en config
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_visiteurs_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
include_spip('base/abstract_sql');
|
||
return
|
||
$qui['statut'] == '0minirezo' and !$qui['restreint']
|
||
and (
|
||
$GLOBALS['meta']["accepter_visiteurs"] != 'non'
|
||
or sql_countsel('spip_auteurs', 'statut in ("6forum", "nouveau")') > 0
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu suiviedito
|
||
*
|
||
* Il faut être administrateur (y compris restreint).
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_suiviedito_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return $qui['statut'] == '0minirezo';
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu synchro
|
||
*
|
||
* Il faut être administrateur (y compris restreint).
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_synchro_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return $qui['statut'] == '0minirezo';
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu configurer_interactions
|
||
*
|
||
* Il faut avoir accès à la page configurer_interactions
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurerinteractions_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_interactions', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu configurer_langue
|
||
*
|
||
* Il faut avoir accès à la page configurer_langue
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurerlangue_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_langue', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu configurer_multilinguisme
|
||
*
|
||
* Il faut avoir accès à la page configurer_multilinguisme
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurermultilinguisme_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_multilinguisme', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu configurer_contenu
|
||
*
|
||
* Il faut avoir accès à la page configurer_contenu
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configurercontenu_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_contenu', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu configurer_avancees
|
||
*
|
||
* Il faut avoir accès à la page configurer_avancees
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_configureravancees_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_avancees', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu admin_plugin
|
||
*
|
||
* Il faut avoir accès à la page admin_plugin
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_adminplugin_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('configurer', '_plugins', $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de voir le menu admin_tech
|
||
*
|
||
* Il faut avoir accès à la page admin_tech
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_admintech_menu_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('detruire', $type, $id, $qui, $opt);
|
||
}
|
||
|
||
/**
|
||
* Autorisation de purger la queue de travaux
|
||
*
|
||
* Il faut être webmestre.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_queue_purger_dist($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('webmestre');
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation l'échafaudage de squelettes en Z
|
||
*
|
||
* Il faut être dans l'espace privé (et authentifié),
|
||
* sinon il faut être webmestre (pas de fuite d'informations publiées)
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_echafauder_dist($faire, $type, $id, $qui, $opt) {
|
||
if (test_espace_prive()) {
|
||
return intval($qui['id_auteur']) ? true : false;
|
||
} else {
|
||
return autoriser('webmestre', '', $id, $qui, $opt);
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Retourne les identifiants d'auteurs liés à un objet
|
||
*
|
||
* @param string $objet
|
||
* @param int $id_objet
|
||
* @param string|array $cond
|
||
* Condition(s) supplémentaire(s) pour le where de la requête
|
||
* @return int[]
|
||
* Identifiants d'auteurs
|
||
*/
|
||
function auteurs_objet($objet, $id_objet, $cond = '') {
|
||
$objet = objet_type($objet);
|
||
$where = array(
|
||
'objet=' . sql_quote($objet),
|
||
'id_objet=' . intval($id_objet)
|
||
);
|
||
if (!empty($cond)) {
|
||
if (is_array($cond)) {
|
||
$where = array_merge($where, $cond);
|
||
} else {
|
||
$where[] = $cond;
|
||
}
|
||
}
|
||
$auteurs = sql_allfetsel(
|
||
'id_auteur',
|
||
'spip_auteurs_liens',
|
||
$where
|
||
);
|
||
if (is_array($auteurs)) {
|
||
return array_map('reset', $auteurs);
|
||
}
|
||
return array();
|
||
}
|
||
|
||
/**
|
||
* Lister les auteurs d'un article
|
||
*
|
||
* @deprecated utiliser auteurs_objets()
|
||
* @param int $id_article Identifiant de l'article
|
||
* @param string $cond Condition en plus dans le where de la requête
|
||
* @return array|bool
|
||
* - array : liste des id_auteur trouvés
|
||
* - false : serveur SQL indisponible
|
||
*/
|
||
function auteurs_article($id_article, $cond = '') {
|
||
return sql_allfetsel(
|
||
'id_auteur',
|
||
'spip_auteurs_liens',
|
||
"objet='article' AND id_objet=" . intval($id_article) . ($cond ? " AND $cond" : '')
|
||
);
|
||
}
|
||
|
||
|
||
/**
|
||
* Tester si on est admin restreint sur une rubrique donnée
|
||
*
|
||
* Fonction générique utilisee dans des autorisations ou assimilée
|
||
*
|
||
* @param int $id_rubrique Identifiant de la rubrique
|
||
* @return bool true si administrateur de cette rubrique, false sinon.
|
||
*/
|
||
function acces_restreint_rubrique($id_rubrique) {
|
||
|
||
return (isset($GLOBALS['connect_id_rubrique'][$id_rubrique]));
|
||
}
|
||
|
||
|
||
/**
|
||
* Verifier qu'il existe au moins un parent
|
||
*
|
||
* Fonction utilisee dans des autorisations des boutons / menus du prive des objets enfants (articles, breves, sites)
|
||
*
|
||
* @param string $table la table a vérifier
|
||
* @return bool true si un parent existe
|
||
*/
|
||
function verifier_table_non_vide($table = 'spip_rubriques') {
|
||
static $done = array();
|
||
if (!isset($done[$table])) {
|
||
$done[$table] = sql_countsel($table) > 0;
|
||
}
|
||
|
||
return $done[$table];
|
||
}
|
||
|
||
/**
|
||
* Détermine la possibilité de s'inscire sur le site
|
||
*
|
||
* Pour un statut et un éventuel id_rubrique donné, indique,
|
||
* à l'aide de la liste globale des statuts (tableau mode => nom du mode)
|
||
* si le visiteur peut s'inscrire sur le site.
|
||
*
|
||
* Utile pour le formulaire d'inscription.
|
||
*
|
||
* Par défaut, seuls `6forum` et `1comite` sont possibles, les autres sont
|
||
* en `false`. Pour un nouveau mode il suffit de définir l'autorisation
|
||
* spécifique.
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $quoi Statut demandé
|
||
* @param int $id Identifiant éventuel, par exemple de rubrique
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
*/
|
||
function autoriser_inscrireauteur_dist($faire, $quoi, $id, $qui, $opt) {
|
||
|
||
$s = array_search($quoi, $GLOBALS['liste_des_statuts']);
|
||
switch ($s) {
|
||
case 'info_redacteurs':
|
||
return ($GLOBALS['meta']['accepter_inscriptions'] == 'oui');
|
||
case 'info_visiteurs':
|
||
return ($GLOBALS['meta']['accepter_visiteurs'] == 'oui' or $GLOBALS['meta']['forums_publics'] == 'abo');
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
|
||
/**
|
||
* Autorisation à voir le phpinfo
|
||
*
|
||
* Il faut être webmestre
|
||
*
|
||
* @param string $faire Action demandée
|
||
* @param string $type Type d'objet sur lequel appliquer l'action
|
||
* @param int $id Identifiant de l'objet
|
||
* @param array $qui Description de l'auteur demandant l'autorisation
|
||
* @param array $opt Options de cette autorisation
|
||
* @return bool true s'il a le droit, false sinon
|
||
**/
|
||
function autoriser_phpinfos($faire, $type, $id, $qui, $opt) {
|
||
return autoriser('webmestre');
|
||
}
|