source: spip-zone/_squelettes_/gribouille_2/trunk/gribouille_fonctions.php

Last change on this file was 111980, checked in by nicod@…, 5 weeks ago

Surcharger les boucles ARTICLES et RUBRIQUES pour exclure le contenu du Wiki sur les pages publiques du site

File size: 4.1 KB
Line 
1<?php
2/**
3 * Plugin / Squelettes Gribouille
4 * © Fil
5 * Distribue sous licence GNU/GPL
6 */
7
8if (!defined("_ECRIRE_INC_VERSION")) {
9        return;
10}
11
12/**
13 * Retourne le diff d'un objet
14 * (uniquement pour les articles en 2.0.X)
15 * Ex: [<small> (#ID_ARTICLE|gribouille_calcul_diff{article,#ID_VERSION,diff}|supprimer_tags|couper{50})</small>]
16 *
17 * @param int    $id_objet
18 * @param string $objet
19 * @param int    $id_version
20 * @param string $format [optional]
21 *
22 * @return array
23 */
24function gribouille_calcul_diff($id_objet, $objet, $id_version, $format = 'complet') {
25        include_spip('inc/suivi_versions');
26       
27        $textes = revision_comparee($id_objet, $objet, $id_version, $format);
28        $ret = array();
29        foreach ($textes as $champ => $texte) {
30                $ret[$champ] = propre_diff($texte);
31        }
32
33        return $ret;
34}
35
36/**
37 * Retourne l'id_secteur du Wiki
38 *
39 * @return array|mixed
40 */
41function gribouille_secteurs_wiki() {
42        include_spip('inc/filtres');
43        $f = chercher_filtre('info_plugin');
44        if($f('autorite','est_actif')) {
45                return lire_config('autorite/espace_wiki');
46        } else {
47                return array(lire_config('gribouille/secteur_wiki'));
48        }
49}
50
51
52/**
53 * Teste si on doit exclure le secteur Wiki
54 * true quand on vient du wiki
55 * true dans l'espace prive
56 * true dans les crayons
57 * false dans les autres pages (publiques hors wiki)
58 *
59 * @return array|mixed|null
60 */
61function boucle_exclure_secteur() {
62        if (!test_espace_prive() && !_request('action')) {
63                return gribouille_secteurs_wiki();
64        }
65        return null;
66}
67
68/**
69 * Surcharge de la boucle ARTICLES permettant d'exclure les articles du Wiki
70 * @param $id_boucle
71 * @param $boucles
72 *
73 * @return string
74 */
75function boucle_ARTICLES($id_boucle, &$boucles) {
76        $boucle = &$boucles[$id_boucle];
77        $id_table = $boucle->id_table;
78        $secteurs_wiki = join(',',boucle_exclure_secteur());
79
80        if (!$boucle->modificateur['wiki'] && $secteurs_wiki) {
81                $boucle->where[] = array(
82                        "'NOT IN'",
83                        "'$id_table.id_secteur'",
84                        "'($secteurs_wiki)'",
85                );
86        }
87
88        return boucle_DEFAUT_dist($id_boucle, $boucles);
89}
90
91/**
92 * Surcharge de la boucle RUBRIQUES permettant d'exclure les rubriques du Wiki
93 * @param $id_boucle
94 * @param $boucles
95 *
96 * @return string
97 */
98function boucle_RUBRIQUES($id_boucle, &$boucles) {
99        $boucle = &$boucles[$id_boucle];
100        $id_table = $boucle->id_table;
101        $secteurs_wiki = join(',',boucle_exclure_secteur());
102
103        if (!$boucle->modificateur['wiki'] && $secteurs_wiki) {
104                $boucle->where[] = array(
105                        "'NOT IN'",
106                        "'$id_table.id_secteur'",
107                        "'($secteurs_wiki)'",
108                );
109        }
110
111        return boucle_DEFAUT_dist($id_boucle, $boucles);
112}
113
114/**
115 * Critère qui restreint les boucles articles et rubriques du wiki
116 *
117 * @param $idb
118 * @param $boucles
119 * @param $crit
120 */
121function critere_wiki($idb, &$boucles, $crit) {
122        $boucle = &$boucles[$idb];
123        $id_table = $boucle->id_table;
124        $id_secteurs_wiki = join(',',gribouille_secteurs_wiki());
125        if($id_secteurs_wiki) {
126                $boucle->where[] = array(
127                        "'IN'",
128                        "'$id_table.id_secteur'",
129                        "'($id_secteurs_wiki)'"
130                );
131        }
132        $boucle->modificateur['wiki'] = true;
133}
134
135/**
136 * Critère qui restreint les versions aux articles du wiki
137 *
138 * @param $idb
139 * @param $boucles
140 * @param $crit
141 */
142function critere_versions_wiki($idb, &$boucles, $crit) {
143        $boucle = &$boucles[$idb];
144        $id_table = $boucle->id_table;
145        $id_secteurs_wiki = join(',',gribouille_secteurs_wiki());
146       
147        $boucle->select[]= 'articles.*';
148        $boucle->from['articles'] = "spip_articles";
149        $boucle->from_type['articles'] = "LEFT";
150        $boucle->join["articles"]= array("'$id_table'","'id_article'","'id_objet'","'$id_table.objet=\"article\"'");
151       
152        $boucle->where[] = array("'IN'", "'articles.id_secteur'", "'($id_secteurs_wiki)'");
153        $boucle->where[] = array("'='", "'articles.statut'", "'\"publie\"'");
154        $boucle->modificateur['wiki'] = true;
155}
156
157/**
158 * Masque les deux derniers octets d'une adresse IP
159 *
160 * @param $texte
161 *
162 * @return string
163 */
164function masquer_ip($texte) {
165        if (preg_match('#^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\z#', $texte, $matches)) {
166                return $matches[1] . '.' . $matches[2] . '.xx.xx';
167        } else {
168                return $texte;
169        }
170}
Note: See TracBrowser for help on using the repository browser.