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); } // 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'] = liste_rubriques_auteur($qui['id_auteur']); if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id ($qui[nom]) ?"); // Aliases pour les types pas generiques (a etendre et ameliorer) if ($type == 'groupes_mot') $type = 'groupemots'; #if ($type == 'syndic_article') $type = 'syndicarticle'; // 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')) 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; } } if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id,$qui[nom]): ".($a?'OK':'niet')); return $a; }
/** * Autoriser une action * * Voir autoriser() pour une description complète * * @see autoriser() * * @param string $faire * une action ('modifier', 'publier'...) * @param string $type * type d'objet ou nom de table ('article') * @param int $id * id de l'objet sur lequel on veut agir * @param null|int|array $qui * si null on prend alors visiteur_session * un id_auteur (on regarde dans la base) * un tableau auteur complet, y compris [restreint] * @param null|array $opt * options sous forme de tableau associatif * @return bool * true si la personne peut effectuer l'action */ function autoriser_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL) { // Qui ? visiteur_session ? // si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge if ($qui === NULL or $qui === '') { $qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array('statut' => '', 'id_auteur' => 0, 'webmestre' => 'non'); } 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')) { 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; }