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ès a ete desactivée. <a href=\"'.\$link_plugin.'\">Corriger le problè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]; }