condition NOT IN * Cette fonction renvoie la liste des rubriques interdites * au visiteur courant * d'ou le recours a $GLOBALS['accesrestreint_zones_autorisees'] * * @param bool $publique Selectionner les rubriques interdites dans l'espace public (true) ou prive (false) * @param int $id_auteur Identifiant de l'auteur * @param bool $quelquesoit_visibilite Si true, on ne s'occupe pas de savoir si une zone est restreinte sur le prive ou sur le public. * @return array */ function accesrestreint_liste_rubriques_exclues($publique=true, $id_auteur=NULL, $quelquesoit_visibilite = false) { // cache static static $liste_rub_exclues = array(); static $liste_rub_inclues = array(); if ($quelquesoit_visibilite) { $publique = 'tout'; } if (is_null($id_auteur) AND isset($GLOBALS['visiteur_session']['id_auteur'])) $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; if (!isset($liste_rub_exclues[$id_auteur][$publique]) || !is_array($liste_rub_exclues[$id_auteur][$publique])) { $where = array(); // Ne selectionner que les zones pertinentes if (!$quelquesoit_visibilite) { if ($publique) $where[] = "publique='oui'"; else $where[] = "privee='oui'"; } // Si le visiteur est autorise sur certaines zones publiques, // on selectionne les rubriques correspondant aux autres zones, // sinon on selectionne toutes celles correspondant a une zone. include_spip('base/abstract_sql'); if ($GLOBALS['accesrestreint_zones_autorisees'] AND $id_auteur==$GLOBALS['visiteur_session']['id_auteur']) $where[] = sql_in('zr.id_zone',$GLOBALS['accesrestreint_zones_autorisees'],'NOT'); elseif ($id_auteur) $where[] = sql_in('zr.id_zone',accesrestreint_liste_zones_autorisees('',$id_auteur),'NOT'); // liste les rubriques (+branches) des zones dont ne fait pas parti l'auteur $liste_rub_exclues[$id_auteur][$publique] = accesrestreint_liste_contenu_zone_rub($where); #$liste_rub_exclues[$publique] = array_unique($liste_rub_exclues[$publique]); } $final_liste_rub_exclues = $liste_rub_exclues[$id_auteur][$publique]; if (defined("AR_TYPE_RESTRICTION") AND AR_TYPE_RESTRICTION == "faible") { // AR_TYPE_RESTRICTION definit le type de restriction pour traiter les elements communs a plusieurs zone // Une restriction exclusive (ou forte) donne l'acces aux rubriques restreintes par // plusieurs zone aux seuls membres de toutes les zones concernees. // Une restriction faible donne acces a une rubrique, meme restreinte par // plusieurs zones, aux membres de chaque zone concernee. // valeurs : 'faible', 'forte, ou 'exclusive' // Autrement dit, si une rubrique 2 est enfant d'une rubrique 1, // et qu'il existe une zone 1 (rubrique 1) et une zone 2 (rubrique 2) : // - un auteur present dans la zone 1 (uniquement) ne pourra pas voir la rubrique 2 // lorsque la restriction est "forte". Il le pourra avec une restriction "faible" // // - A l'inverse, un auteur present uniquement dans la zone 2 ne pourra pas voir // la rubrique 1 meme si la restriction est "faible" car la parentee n'est pas concernee. // il faut (si souhaite) dans ce cas definir en plus AR_TYPE_RESTRICTION_PARENTEE a "faible" // pour l'autoriser. if (!isset($liste_rub_inclues[$id_auteur][$publique]) OR !is_array($liste_rub_inclues[$id_auteur][$publique])) { $where = array(); // Ne selectionner que les zones pertinentes if (!$quelquesoit_visibilite) { if ($publique) $where[] = "publique='oui'"; else $where[] = "privee='oui'"; } // Calcul des rubriques dans des zones autorisees include_spip('base/abstract_sql'); if ($GLOBALS['accesrestreint_zones_autorisees'] AND $id_auteur==$GLOBALS['visiteur_session']['id_auteur']) $where[] = sql_in('zr.id_zone',$GLOBALS['accesrestreint_zones_autorisees']); elseif ($id_auteur) $where[] = sql_in('zr.id_zone',accesrestreint_liste_zones_autorisees('',$id_auteur)); // liste les rubriques (+branches) des zones de l'auteur $liste_rub_inclues[$id_auteur][$publique] = accesrestreint_liste_contenu_zone_rub($where); // pour autoriser la vue des rubriques parentes // memes si elles sont restreintes par une autre zone if (defined("AR_TYPE_RESTRICTION_PARENTEE") AND AR_TYPE_RESTRICTION_PARENTEE == "faible") { $liste_rub_inclues[$id_auteur][$publique] = array_merge($liste_rub_inclues[$id_auteur][$publique], accesrestreint_liste_parentee_zone_rub($where)); } } // Ne pas exclure les elements qui sont autorises $final_liste_rub_exclues = array_diff($final_liste_rub_exclues, array_intersect($final_liste_rub_exclues,$liste_rub_inclues[$id_auteur][$publique])); } return $final_liste_rub_exclues; } ?>