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]; }
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]; }