X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fautoriser.php;h=25aca2aac26603f4e7e643096d2566e8146bb23a;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=fbccc13ff9b37fe3b6ce3f4eea6c0dec785669af;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git diff --git a/www/ecrire/inc/autoriser.php b/www/ecrire/inc/autoriser.php index fbccc13f..25aca2aa 100644 --- a/www/ecrire/inc/autoriser.php +++ b/www/ecrire/inc/autoriser.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,22 +13,19 @@ /** * Gestion de l'API autoriser et fonctions d'autorisations de SPIP * - * @package SPIP\Autorisations -**/ -if (!defined('_ECRIRE_INC_VERSION')) return; + * @package SPIP\Core\Autorisations + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/abstract_sql'); -/** - * Tracer les autorisations dans tmp/spip.log pour débug ? - */ -defined('_DEBUG_AUTORISER') || define('_DEBUG_AUTORISER', false); - // Constantes surchargeables, cf. plugin autorite /** * Gérer les admins restreints ? - * + * * @todo une option à activer */ defined('_ADMINS_RESTREINTS') || define('_ADMINS_RESTREINTS', true); @@ -47,47 +44,73 @@ if ($f = find_in_path('mes_fonctions.php')) { 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 - * - * @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) { + /** + * 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'); } + if (!isset($pipe)) { + $pipe = 1; + pipeline('autoriser'); + } $args = func_get_args(); + return call_user_func_array('autoriser_dist', $args); } } @@ -95,11 +118,11 @@ if (!function_exists('autoriser')) { /** * Autoriser une action - * + * * Voir autoriser() pour une description complète - * + * * @see autoriser() - * + * * @param string $faire * une action ('modifier', 'publier'...) * @param string $type @@ -115,126 +138,157 @@ if (!function_exists('autoriser')) { * @return bool * true si la personne peut effectuer l'action */ -function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) { +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('statut' => '', 'id_auteur' =>0, 'webmestre' => 'non'); - elseif (is_numeric($qui)) { - $qui = sql_fetsel("*", "spip_auteurs", "id_auteur=".$qui); + 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)) { + if (_ADMINS_RESTREINTS and is_array($qui)) { $qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : array(); } - if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id (" . (isset($qui['nom']) ? $qui['nom'] : '') . ") ?"); + 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)); + $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')) + 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', + ? 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', + : 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); + $a = $f($faire, $type, $id, $qui, $opt); break; } } - if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id," . (isset($qui['nom']) ? $qui['nom'] : '') . "): ".($a?'OK':'niet')); + 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(); +$GLOBALS['autoriser_exception'] = array(); /** * Accorder une autorisation exceptionnel pour le hit en cours, ou la revoquer * - * http://doc.spip.org/@autoriser_exception + * 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 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){ +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) + 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) { + } + 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 + * @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']; + 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é ? - * + * 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 + * @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 in_array($qui['statut'], array('0minirezo', '1comite')); + return isset($qui['statut']) and in_array($qui['statut'], array('0minirezo', '1comite')); } /** @@ -242,14 +296,14 @@ function autoriser_ecrire_dist($faire, $type, $id, $qui, $opt) { * * 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 + * @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')); } @@ -257,39 +311,107 @@ function autoriser_creer_dist($faire, $type, $id, $qui, $opt) { /** * 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 + * @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) { - // si auteur pas autorise, NIET - if (strpos($GLOBALS['meta']['preview'], ",". $qui['statut'] .",")===false) - return false; + + // 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) + 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 + 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']); + 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)){ - if (!sql_countsel("spip_auteurs_liens","id_auteur=".intval($qui['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 + 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; } @@ -297,45 +419,102 @@ function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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) { - return autoriser('modifier',$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 + * @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) { - if (!isset($opt['statut'])){ + if (!isset($opt['statut'])) { $table = table_objet($type); - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); - if (!$desc) + if (!$desc) { return false; - 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 + 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']; + } if ($statut == 'publie' - OR ($statut == 'prop' AND $type=='article' AND $GLOBALS['meta']["post_dates"] == "non")) + or ($statut == 'prop' and $type == 'article' and $GLOBALS['meta']['post_dates'] == 'non')) { return autoriser('modifier', $type, $id); + } + return false; } @@ -346,53 +525,53 @@ function autoriser_dater_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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); + 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 + * @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']) + 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 + * @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) + return + ((!$id and autoriser('defaut', null, null, $qui, $opt)) + or $id and autoriser('creerrubriquedans', 'rubrique', $id, $qui, $opt) ); } @@ -400,38 +579,38 @@ function autoriser_rubrique_creer_dist($faire, $type, $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 + * @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); + ($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 - * + * 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 + * @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'); + and autoriser('voir', 'rubrique', $id) + and autoriser('creer', 'article'); } @@ -439,14 +618,14 @@ function autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt * 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 + * @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); @@ -456,30 +635,38 @@ function autoriser_rubrique_modifier_dist($faire, $type, $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 + * @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)) + if (!$id = intval($id)) { return false; + } - if (sql_countsel('spip_rubriques', "id_parent=".intval($id))) + if (sql_countsel('spip_rubriques', 'id_parent=' . intval($id))) { return false; + } - if (sql_countsel('spip_articles', "id_rubrique=".intval($id)." AND (statut<>'poubelle')")) + 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) + $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); + return autoriser('modifier', 'rubrique', $id); } @@ -488,48 +675,45 @@ function autoriser_rubrique_supprimer_dist($faire, $type, $id, $qui, $opt) { * * 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 + * @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)); - - if (!function_exists('auteurs_article')) - include_spip('inc/auth'); // pour auteurs_article si espace public + $r = sql_fetsel('id_rubrique,statut', 'spip_articles', 'id_article=' . sql_quote($id)); return $r - AND + 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_article($id, "id_auteur=".$qui['id_auteur']) + 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 + * @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'))); + return (sql_countsel('spip_rubriques') > 0 and in_array($qui['statut'], array('0minirezo', '1comite'))); } /** @@ -537,25 +721,29 @@ function autoriser_article_creer_dist($faire, $type, $id, $qui, $opt) { * * 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 + * @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; +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'])) + if (isset($opt['statut'])) { $statut = $opt['statut']; - else { - if (!$id) return false; - $statut = sql_getfetsel("statut", "spip_articles", "id_article=".intval($id)); + } else { + if (!$id) { + return false; + } + $statut = sql_getfetsel('statut', 'spip_articles', 'id_article=' . intval($id)); } return @@ -563,10 +751,10 @@ function autoriser_article_voir_dist($faire, $type, $id, $qui, $opt){ // 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 (function_exists('auteurs_article') OR include_spip('inc/auth')) - AND auteurs_article($id, "id_auteur=".$qui['id_auteur'])); + or + ($id + and $qui['id_auteur'] + and auteurs_objet('article', $id, 'id_auteur=' . $qui['id_auteur'])); } @@ -574,24 +762,28 @@ function autoriser_article_voir_dist($faire, $type, $id, $qui, $opt){ * 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 + * @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')){ + 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; + if ($qui['statut'] == '0minirezo') { + return true; + } // admins et redacteurs peuvent voir un auteur - if ($type == '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; @@ -603,103 +795,109 @@ function autoriser_voir_dist($faire, $type, $id, $qui, $opt) { * * 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 + * @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')? + (defined('_ID_WEBMESTRES') ? in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES)) - :$qui['webmestre']=='oui') - AND $qui['statut'] == '0minirezo' - AND !$qui['restreint'] - ; + : $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 + * @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'] - ; + 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 + * @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' - ; + $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 + * @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évisialiser un auteur + * 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 + * @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; + 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)); + $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 * @@ -711,18 +909,18 @@ function autoriser_auteur_previsualiser_dist($faire, $type, $id, $qui, $opt) { * 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() - * + * @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 + * @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'); } @@ -734,73 +932,88 @@ function autoriser_auteur_creer_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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'))) + 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 ($opt['webmestre']) + if (!empty($opt['webmestre'])) { return false; - elseif ($opt['statut'] OR $opt['restreintes'] OR $opt['email']) + } elseif ( + !empty($opt['statut']) + or !empty($opt['restreintes']) + or !empty($opt['email']) + ) { return false; - elseif ($id == $qui['id_auteur']) + } elseif ($id == $qui['id_auteur']) { return true; - else + } 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 ($opt['webmestre']) + if (isset($opt['webmestre']) and $opt['webmestre']) { return false; - elseif ($opt['statut'] == '0minirezo' OR $opt['restreintes']) + } elseif ((isset($opt['statut']) and ($opt['statut'] == '0minirezo')) + or (isset($opt['restreintes']) and $opt['restreintes']) + ) { return false; - else { + } else { if ($id == $qui['id_auteur']) { - if ($opt['statut']) + if (isset($opt['statut']) and $opt['statut']) { return false; - else + } 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') + } + } 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; - else - return false; + } } - // id = 0 => creation - else - return true; } } - // Un admin complet fait ce qu'elle veut + // Un admin complet fait ce qu'il veut // sauf se degrader - if ($id == $qui['id_auteur'] && $opt['statut']) + if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) { return false; - // et toucher au statut webmestre si il ne l'est pas lui meme - // ou si les webmestres sont fixes par constante (securite) - elseif (isset($opt['webmestre']) AND $opt['webmestre'] AND (defined('_ID_WEBMESTRES') OR !autoriser('webmestre'))) + } 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')) + } // 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 + } else { return true; + } } @@ -808,15 +1021,15 @@ function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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){ + **/ +function autoriser_associerauteurs_dist($faire, $type, $id, $qui, $opt) { return autoriser('modifier', $type, $id, $qui, $opt); } @@ -825,14 +1038,14 @@ function autoriser_associerauteurs_dist($faire, $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 + * @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'; } @@ -841,14 +1054,14 @@ function autoriser_chargerftp_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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'; } @@ -861,29 +1074,39 @@ function autoriser_debug_dist($faire, $type, $id, $qui, $opt) { * * 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 + * + * @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) { + **/ +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]; + 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); + 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); + $r = explode(',', $r); // passer les rubriques en index, elimine les doublons $r = array_flip($r); @@ -891,13 +1114,15 @@ function liste_rubriques_auteur($id_auteur, $raz=false) { $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); + $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) + and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur + ) { $GLOBALS['visiteur_session']['restreint'] = $rubriques; + } return $restreint[$id_auteur] = $rubriques; @@ -907,14 +1132,14 @@ function liste_rubriques_auteur($id_auteur, $raz=false) { * 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 + * @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); } @@ -923,15 +1148,15 @@ function autoriser_modifierurl_dist($faire, $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 + * @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){ + **/ +function autoriser_rubrique_previsualiser_dist($faire, $type, $id, $qui, $opt) { return autoriser('previsualiser'); } @@ -939,15 +1164,15 @@ function autoriser_rubrique_previsualiser_dist($faire,$type,$id,$qui,$opt){ * 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 + * @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){ + **/ +function autoriser_rubrique_iconifier_dist($faire, $type, $id, $qui, $opt) { return autoriser('publierdans', 'rubrique', $id, $qui, $opt); } @@ -955,32 +1180,32 @@ function autoriser_rubrique_iconifier_dist($faire,$type,$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 + * @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'])); + **/ +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 + * @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){ + **/ +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); } @@ -991,46 +1216,51 @@ function autoriser_iconifier_dist($faire,$type,$id,$qui,$opt){ * * 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 + * @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; } + **/ +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 + * @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; } + **/ +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 + * @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')) + if (!autoriser('detruire') or _request('reinstall')) { return false; + } return true; } @@ -1039,15 +1269,15 @@ function autoriser_base_reparer_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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) { + **/ +function autoriser_infosperso_dist($faire, $type, $id, $qui, $opt) { return true; } @@ -1055,15 +1285,15 @@ function autoriser_infosperso_dist($faire,$type,$id,$qui,$opt) { * 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 + * @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) { + **/ +function autoriser_langage_configurer_dist($faire, $type, $id, $qui, $opt) { return true; } @@ -1071,15 +1301,15 @@ function autoriser_langage_configurer_dist($faire,$type,$id,$qui,$opt) { * 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 + * @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) { + **/ +function autoriser_configurerlangage_dist($faire, $type, $id, $qui, $opt) { return autoriser('configurer', '_langage', $id, $qui, $opt); } @@ -1087,15 +1317,15 @@ function autoriser_configurerlangage_dist($faire,$type,$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 + * @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) { + **/ +function autoriser_preferences_configurer_dist($faire, $type, $id, $qui, $opt) { return true; } @@ -1103,90 +1333,131 @@ function autoriser_preferences_configurer_dist($faire,$type,$id,$qui,$opt) { * 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 + * @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) { + **/ +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 + * @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;} + **/ +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 + * @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;} + **/ +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 + * @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;} + **/ +function autoriser_rubriques_menu_dist($faire, $type, $id, $qui, $opt) { + return true; +} /** - * Autorisation de voir le menu articlecreer + * 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 + * @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){ + **/ +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 + * @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); } @@ -1195,47 +1466,159 @@ function autoriser_auteurcreer_menu_dist($faire, $type, $id, $qui, $opt) { * 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 + * @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'; + **/ +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 + * @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'; + **/ +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 + * @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){ + **/ +function autoriser_queue_purger_dist($faire, $type, $id, $qui, $opt) { return autoriser('webmestre'); } @@ -1245,98 +1628,153 @@ function autoriser_queue_purger_dist($faire, $type, $id, $qui, $opt){ * * 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 + * @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); + **/ +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 - * - * Fonction générique utilisée par plusieurs autorisations * + * @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 + * @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=$id_article". ($cond ? " AND $cond" : '')); +function auteurs_article($id_article, $cond = '') { + return sql_allfetsel( + 'id_auteur', + 'spip_auteurs_liens', + "objet='article' AND id_objet=$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 + * @param int $id_rubrique Identifiant de la rubrique * @return bool true si administrateur de cette rubrique, false sinon. */ function acces_restreint_rubrique($id_rubrique) { - global $connect_id_rubrique; - return (isset($connect_id_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 verifier + * @param string $table la table a vérifier * @return bool true si un parent existe */ -function verifier_table_non_vide($table='spip_rubriques') { +function verifier_table_non_vide($table = 'spip_rubriques') { static $done = array(); - if (!isset($done[$table])) - $done[$table] = sql_countsel($table)>0; + if (!isset($done[$table])) { + $done[$table] = sql_countsel($table) > 0; + } + return $done[$table]; } /** - * Une autorisation determiner la possibilite de s'inscire pour un statut et un id_rubrique, - * a l'aide de la liste globale des statuts (tableau mode => nom du mode) + * 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 defaut, seuls 6forum et 1comite possibles, les autres sont en false - * pour un nouveau mode il suffit de definir l'autorisation specifique * - * @param $faire - * @param $quoi - * statut auteur demande - * @param $id - * id_rubrique eventuel (pas utilise ici, utilise dans des usages persos) - * @param $qui - * @param $opt - * @return bool + * 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){ +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'); - + 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'); +}