function autoriser_document_voir($faire, $type, $id, $qui, $opt) {
	include_spip('public/acces_restreint');
	static $documents_statut = array();
	static $where = array();
	$publique = isset($opt['publique'])?$opt['publique']:!test_espace_prive();
	$id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
	if (!isset($documents_statut[$id_auteur][$publique][$id])){
		if (!$id)
			$documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
		else {
			if (!isset($where[$publique])){
				$where[$publique] = accesrestreint_documents_accessibles_where('id_document', $publique?"true":"false");
				// inclure avant le eval, pour que les fonctions soient bien definies
				include_spip('inc/acces_restreint');
				$where[$publique] = eval("return ".$where[$publique].";");
			}
			$documents_statut[$id_auteur][$publique][$id] = sql_getfetsel('id_document','spip_documents',array('id_document='.intval($id),$where[$publique]));
			if ($documents_statut[$id_auteur][$publique][$id])
				$documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
		}
	}
	return $documents_statut[$id_auteur][$publique][$id];
}
示例#2
0
function autoriser_voir_dist($faire, $type, $id, $qui, $opt) {
	if ($type == 'document')
		return autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
	if ($qui['statut'] == '0minirezo') return true;
	if ($type == 'auteur') return false;
	if ($type == 'groupemots') {
		$acces = sql_fetsel("comite,forum", "spip_groupes_mots", "id_groupe=".intval($id));
		if ($qui['statut']=='1comite' AND ($acces['comite'] == 'oui' OR $acces['forum'] == 'oui'))
			return true;
		if ($qui['statut']=='6forum' AND $acces['forum'] == 'oui')
			return true;
		return false;
	}
	if ($type != 'article') return true;
	if (!$id) return false;

	// un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit
	$r = sql_getfetsel("statut", "spip_articles", "id_article=".sql_quote($id));
	include_spip('inc/auth'); // pour auteurs_article si espace public
	return
		in_array($r, array('prop', 'publie'))
		OR auteurs_article($id, "id_auteur=".$qui['id_auteur']);
}
 function autoriser_document_voir($faire, $type, $id, $qui, $opt)
 {
     include_spip('public/accesrestreint');
     static $documents_statut = array();
     static $where = array();
     $publique = isset($opt['publique']) ? $opt['publique'] : !test_espace_prive();
     $id_auteur = isset($qui['id_auteur']) ? $qui['id_auteur'] : $GLOBALS['visiteur_session']['id_auteur'];
     if (!isset($documents_statut[$id_auteur][$publique][$id])) {
         // il faut hacker la meta "creer_htaccess" le temps du calcul de l'autorisation car le core
         $clean_meta = false;
         if (isset($GLOBALS['meta']["accesrestreint_proteger_documents"]) and $GLOBALS['meta']["accesrestreint_proteger_documents"] == 'oui') {
             if (!isset($GLOBALS['meta']["creer_htaccess"]) or $GLOBALS['meta']["creer_htaccess"] != 'oui') {
                 $GLOBALS['meta']["creer_htaccess"] = 'oui';
                 $clean_meta = true;
             }
         }
         if (!$id) {
             $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
         } else {
             if (!isset($where[$publique])) {
                 $where[$publique] = accesrestreint_documents_accessibles_where('id_document', $publique ? "true" : "false");
                 // inclure avant le eval, pour que les fonctions soient bien definies
                 include_spip('inc/accesrestreint');
                 // eviter une notice sur $connect inexistant dans eval() qui suit
                 $connect = '';
                 $where[$publique] = eval("return " . $where[$publique] . ";");
             }
             $documents_statut[$id_auteur][$publique][$id] = sql_getfetsel('id_document', 'spip_documents', array('id_document=' . intval($id), $where[$publique]));
             if ($documents_statut[$id_auteur][$publique][$id]) {
                 $documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
             }
         }
         if ($clean_meta) {
             unset($GLOBALS['meta']["creer_htaccess"]);
         }
     }
     return $documents_statut[$id_auteur][$publique][$id];
 }