1 | <?php |
---|
2 | @define('_MOT_MASQUER', 'masquer'); |
---|
3 | |
---|
4 | function masquer_pre_boucle($boucle) { |
---|
5 | static $id_mot; |
---|
6 | static $liste_rubriques; |
---|
7 | static $liste_articles; |
---|
8 | |
---|
9 | // On ne masque que sur l'espace public |
---|
10 | if (test_espace_prive() || isset($boucle->modificateur['tout_voir'])) { |
---|
11 | return $boucle; |
---|
12 | } |
---|
13 | |
---|
14 | // Cas de la boucle RUBRIQUES |
---|
15 | if ($boucle->type_requete == 'rubriques') { |
---|
16 | $rub = $boucle->id_table . '.id_rubrique'; |
---|
17 | $boucle->where[] = masquer_rubriques_where($rub); |
---|
18 | } |
---|
19 | |
---|
20 | // Cas de la boucle ARTICLES |
---|
21 | if ($boucle->type_requete == 'articles') { |
---|
22 | $art = $boucle->id_table . '.id_article'; |
---|
23 | $boucle->where[] = masquer_articles_accessibles_where($art); |
---|
24 | } |
---|
25 | |
---|
26 | return $boucle; |
---|
27 | } |
---|
28 | |
---|
29 | /** |
---|
30 | * Renvoyer le code de la condition where pour la liste des rubriques masquées |
---|
31 | * |
---|
32 | * @param string $primary |
---|
33 | * @return string |
---|
34 | */ |
---|
35 | function masquer_rubriques_where($primary, $_publique=''){ |
---|
36 | # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale |
---|
37 | return "array('NOT IN','$primary','('.sql_get_select('zzzr.id_rubrique','spip_mots_rubriques as zzzr, spip_mots as zzzm',\"zzzr.id_mot=zzzm.id_mot AND zzzm.titre=".sql_quote(_MOT_MASQUER)."\",'','','','',\$connect).')')"; |
---|
38 | } |
---|
39 | |
---|
40 | /** |
---|
41 | * Renvoyer le code de la condition where pour la liste des rubriques accessibles |
---|
42 | * |
---|
43 | * @param string $primary |
---|
44 | * @return string |
---|
45 | */ |
---|
46 | function masquer_rubriques_accessibles_where($primary,$not='NOT', $_publique=''){ |
---|
47 | return "sql_in('$primary','".implode(',', masquer_liste_rubriques($_publique))."', '$not')"; |
---|
48 | } |
---|
49 | |
---|
50 | /** |
---|
51 | * liste des rubriques masquer, directement ou par heritage. |
---|
52 | * |
---|
53 | * @param int/string $id_zone |
---|
54 | * @return array |
---|
55 | */ |
---|
56 | function masquer_liste_rubriques($publique=true){ |
---|
57 | // cache static |
---|
58 | static $liste_rubriques = array(); |
---|
59 | include_spip('inc/rubriques'); |
---|
60 | $liste_rubriques = masquer_liste_rub_direct(); |
---|
61 | if (!count($liste_rubriques)) |
---|
62 | return $liste_rubriques; |
---|
63 | $liste_rubriques = calcul_branche_in(join(',',$liste_rubriques)); |
---|
64 | if (!strlen($liste_rubriques)) |
---|
65 | return array(); |
---|
66 | $liste_rubriques = explode(',',$liste_rubriques); |
---|
67 | return $liste_rubriques; |
---|
68 | } |
---|
69 | |
---|
70 | /** |
---|
71 | * liste des rubriques masquer directement. |
---|
72 | * |
---|
73 | * @return array |
---|
74 | */ |
---|
75 | function masquer_liste_rub_direct(){ |
---|
76 | $liste_rubriques=array(); |
---|
77 | // liste des rubriques directement masquer |
---|
78 | $where = array(); |
---|
79 | include_spip('base/abstract_sql'); |
---|
80 | $liste_rubriques = sql_allfetsel('id_rubrique','spip_mots_rubriques AS mr INNER JOIN spip_mots AS m ON mr.id_mot=m.id_mot','m.titre='.sql_quote(_MOT_MASQUER)); |
---|
81 | $liste_rubriques = array_map('reset',$liste_rubriques); |
---|
82 | $liste_rubriques = array_unique($liste_rubriques); |
---|
83 | return $liste_rubriques; |
---|
84 | } |
---|
85 | |
---|
86 | /** |
---|
87 | * Renvoyer la condition where pour la liste des articles masquer |
---|
88 | * |
---|
89 | * @param string $primary |
---|
90 | * @return string |
---|
91 | */ |
---|
92 | function masquer_articles_accessibles_where($primary, $_publique=''){ |
---|
93 | # hack : on utilise zzz pour eviter que l'optimiseur ne confonde avec un morceau de la requete principale |
---|
94 | return "array('NOT IN','$primary','('.sql_get_select('zzza.id_article','spip_articles as zzza',".masquer_rubriques_accessibles_where('zzza.id_rubrique','',$_publique).",'','','','',\$connect).')')"; |
---|
95 | } |
---|
96 | |
---|
97 | ?> |
---|