'', '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'); }