source: spip-zone/_plugins_/masquer/masquer_pipelines.php @ 52434

Last change on this file since 52434 was 35809, checked in by patfr@…, 11 years ago

Possibilité de définir le mot-clé "masquer" grâce à un define. Exemple :

@define('_MOT_MASQUER', 'totalement privé');

File size: 3.1 KB
Line 
1<?php
2@define('_MOT_MASQUER', 'masquer');
3
4function 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 */
35function 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 */
46function 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 */
56function 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 */
75function 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 */
92function 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?>
Note: See TracBrowser for help on using the repository browser.