示例#1
0
function accesrestreint_pre_boucle(&$boucle){
	if (!isset($boucle->modificateur['tout_voir'])){
		$securise = false;
		switch ($boucle->type_requete){
			case 'hierarchie':
			case 'rubriques':
			case 'articles':
			case 'breves':
			case 'syndication':
				$t = $boucle->id_table . '.id_rubrique';
				$boucle->select = array_merge($boucle->select, array($t)); // pour postgres
				$boucle->where[] = accesrestreint_rubriques_accessibles_where($t);
				$securise = true;
				break;
			case 'forums':
				$t = $boucle->id_table . '.id_rubrique';
				$boucle->select = array_merge($boucle->select, array($t)); // pour postgres
				$where = accesrestreint_rubriques_accessibles_where($t);
		
				$t = $boucle->id_table . '.id_article';
				$boucle->select = array_merge($boucle->select, array($t)); // pour postgres
				$where = "array('OR',$where,".accesrestreint_articles_accessibles_where($t).")";
		
				$t = $boucle->id_table . '.id_breve';
				$boucle->select = array_merge($boucle->select, array($t)); // pour postgres
				$boucle->where[] = "array('OR',$where,".accesrestreint_breves_accessibles_where($t).")";
				$securise = true;
				break;
			case 'evenements':
			case 'signatures':
				$t = $boucle->id_table . '.id_article';
				$boucle->select = array_merge($boucle->select, array($t));
				$boucle->where[] = accesrestreint_articles_accessibles_where($t);
				$securise = true;
				break;
			case 'syndic_articles':
				$t = $boucle->id_table . '.' . $boucle->primary;
				$boucle->select = array_merge($boucle->select, array($t));
				$boucle->where[] = accesrestreint_syndic_articles_accessibles_where($t);
				$securise = true;
				break;
			case 'documents':
				$t = $boucle->id_table . '.' . $boucle->primary;
				$boucle->select = array_merge($boucle->select, array($t));
				$boucle->where[] = accesrestreint_documents_accessibles_where($t);
				$securise = true;
				break;
		}
		if ($securise){
			$boucle->hash .= "if (!defined('_DIR_PLUGIN_ACCESRESTREINT')){
			\$link_empty = generer_url_ecrire('admin_vider'); \$link_plugin = generer_url_ecrire('admin_plugin');
			\$message_fr = 'La restriction d\'acc&egrave;s a ete desactiv&eacute;e. <a href=\"'.\$link_plugin.'\">Corriger le probl&egrave;me</a> ou <a href=\"'.\$link_empty.'\">vider le cache</a> pour supprimer les restrictions.';
			\$message_en = 'Acces Restriction is now unusable. <a href=\"'.\$link_plugin.'\">Correct this trouble</a> or <a href=\"'.generer_url_ecrire('admin_vider').'\">empty the cache</a> to finish restriction removal.';
			die(\$message_fr.'<br />'.\$message_en);
			}";
		}
	}
	return $boucle;
}
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_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];
 }