modificateur['tout_voir'] = true; } } function accesrestreint_pre_boucle(&$boucle){ if (!isset($boucle->modificateur['tout_voir'])){ $securise = false; switch ($boucle->type_requete){ case 'hierarchie': 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 'evenements': case 'petitions': $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 'signatures': // ajouter une jointure sur petitions si besoin $t = array_search("spip_petitions", $boucle->from); if (!$t) $t = trouver_jointure_champ("id_petition", $boucle); $t = $t . '.id_article'; $boucle->select = array_merge($boucle->select, array($t)); $boucle->where[] = accesrestreint_articles_accessibles_where($t); $securise = true; break; default : if (function_exists($accessible_where = "accesrestreint_".$boucle->type_requete."_accessibles_where")){ $t = $boucle->id_table . '.' . $boucle->primary; $boucle->select = array_merge($boucle->select, array($t)); $boucle->where[] = $accessible_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. Corriger le problème ou vider le cache pour supprimer les restrictions.'; \$message_en = 'Acces Restriction is now unusable. Correct this trouble or empty the cache to finish restriction removal.'; die(\$message_fr.'
'.\$message_en); }"; } } return $boucle; } /** * Renvoyer le code de la condition where pour la liste des rubriques accessibles * * @param string $primary * @return string */ function accesrestreint_rubriques_accessibles_where($primary,$not='NOT', $_publique=''){ if (!$_publique) $_publique = "!test_espace_prive()"; return "sql_in('$primary', accesrestreint_liste_rubriques_exclues($_publique), '$not')"; } /** * Renvoyer la condition where pour la liste des articles accessibles * * @param string $primary * @return string */ function accesrestreint_articles_accessibles_where($primary, $_publique=''){ # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale return "array('NOT IN','$primary','('.sql_get_select('zzza.id_article','spip_articles as zzza',".accesrestreint_rubriques_accessibles_where('zzza.id_rubrique','',$_publique).",'','','','',\$connect).')')"; #return array('SUBSELECT','id_article','spip_articles',array(".accesrestreint_rubriques_accessibles_where('id_rubrique').")))"; } /** * Renvoyer la condition where pour la liste des breves accessibles * * @param string $primary * @return string */ function accesrestreint_breves_accessibles_where($primary, $_publique=''){ # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale return "array('NOT IN','$primary','('.sql_get_select('zzzb.id_breve','spip_breves as zzzb',".accesrestreint_rubriques_accessibles_where('zzzb.id_rubrique','',$_publique).",'','','','',\$connect).')')"; #return "array('IN','$primary',array('SUBSELECT','id_breve','spip_breves',array(".accesrestreint_rubriques_accessibles_where('id_rubrique').")))"; } /** * Renvoyer le code de la condition where pour la liste des syndic articles accessibles * * @param string $primary * @return string */ function accesrestreint_syndic_articles_accessibles_where($primary, $_publique=''){ # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale return "array('NOT IN','$primary','('.sql_get_select('zzzs.id_syndic','spip_syndic as zzzs',".accesrestreint_rubriques_accessibles_where('zzzs.id_rubrique','',$_publique).",'','','','',\$connect).')')"; #return "array('IN','$primary',array('SUBSELECT','id_syndic','spip_syndic',array(".accesrestreint_rubriques_accessibles_where('id_rubrique').")))"; } /** * Renvoyer le code de la condition where pour la liste des forums accessibles * on ne rend visible que les forums qui sont lies a un article, une breve ou une rubrique visible * * @param string $primary * @return string */ function accesrestreint_forums_accessibles_where($primary, $_publique=''){ # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale $where = "array('AND','zzzf.objet=\'rubrique\'',".accesrestreint_rubriques_accessibles_where('zzzf.id_objet','NOT',$_publique).")"; $where = "array('OR',$where," ."array('AND','zzzf.objet=\'article\'',".accesrestreint_articles_accessibles_where('zzzf.id_objet',$_publique).")" .")"; $where = "array('OR',$where," ."array('AND','zzzf.objet=\'breve\'',".accesrestreint_breves_accessibles_where('zzzf.id_objet',$_publique).")" .")"; $where = "array('OR',$where,sql_in('zzzf.objet',\"'rubrique','article','breve'\",'NOT',\$connect))"; return "array('IN','$primary','('.sql_get_select('zzzf.id_forum','spip_forum as zzzf',array($where),'','','','',\$connect).')')"; } /** * Renvoyer le code de la condition where pour la liste des documents accessibles * on ne rend visible que les docs qui sont lies a un article, une breve ou une rubrique visible * * @param string $primary * @return string */ function accesrestreint_documents_accessibles_where($primary, $_publique=''){ # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale $where = "array('AND','zzzd.objet=\'rubrique\'',".accesrestreint_rubriques_accessibles_where('zzzd.id_objet','NOT',$_publique).")"; $where = "array('OR',$where,array('AND','zzzd.objet=\'article\'',".accesrestreint_articles_accessibles_where('zzzd.id_objet',$_publique)."))"; $where = "array('OR',$where,array('AND','zzzd.objet=\'breve\'',".accesrestreint_breves_accessibles_where('zzzd.id_objet',$_publique)."))"; $where = "array('OR',$where,array('AND','zzzd.objet=\'forum\'',".accesrestreint_forums_accessibles_where('zzzd.id_objet',$_publique)."))"; $where = "array('OR',$where,sql_in('zzzd.objet',\"'rubrique','article','breve','forum'\",'NOT',\$connect))"; $where = "array('OR', array('IN','$primary','('.sql_get_select('zzzd.id_document','spip_documents_liens as zzzd',array($where),'','','','',\$connect).')'), array('NOT IN','$primary','('.sql_get_select('zzzd.id_document','spip_documents_liens as zzzd','','','','','',\$connect).')') )"; return $where; } /* Champs declares pour la recherche */ function accesrestreint_rechercher_liste_des_champs($tables) { $tables['zone']['titre'] = 8; $tables['zone']['descriptif'] = 3; return $tables; } ?>