source: spip-zone/_plugins_/rubriques_virtuelles/tags/v0.1.2/rubriques_virtuelles_pipelines.php @ 123873

Last change on this file since 123873 was 100515, checked in by kent1@…, 5 years ago

s'insérer dans le pipeline calculer_rubriques pour ne pas dépublier une rubrique ayant une redirection

Version 0.1.0

File size: 4.0 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7/**
8 * Insertion dans le pipeline affiche_gauche (SPIP)
9 *
10 * Insertion du bloc de redirection sur les rubriques
11 *
12 * @param array $flux
13 * @return array
14 */
15function rubriques_virtuelles_affiche_gauche($flux) {
16        if (in_array($flux['args']['exec'], array('rubrique'))
17                and $id = $flux['args']['id_rubrique']) {
18                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/rubriques_virtuelles', array('id_rubrique'=>$id));
19        }
20        return $flux;
21}
22
23/**
24 * Insertion dans le pipeline affiche_milieu (SPIP)
25 *
26 * Insertion du bloc indiquant la redirection eu centre de la rubrique
27 *
28 * @param array $flux
29 * @return array
30 */
31function rubriques_virtuelles_affiche_milieu($flux) {
32        if (in_array($flux['args']['exec'], array('rubrique'))
33                and $id = $flux['args']['id_rubrique']) {
34                $texte = recuperer_fond(
35                        'prive/squelettes/inclure/rubriques_virtuelles_centre',
36                        array('id_rubrique' => $id),
37                        array('ajax' => true)
38                );
39                if ($p = strpos($flux['data'], '<div id="wys')) {
40                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
41                } else {
42                        $flux['data'] .= $texte;
43                }
44        }
45        return $flux;
46}
47
48/**
49 * Insertion dans le pipeline styliser (SPIP)
50 *
51 * si le champ virtuel est non vide c'est une redirection.
52 * avec un eventuel raccourci Spip
53 * si le raccourci a un titre il sera pris comme corps du 302
54 *
55 * @param string $fond
56 * @param array $contexte
57 * @param string $connect
58 * @return array|bool
59 */
60function rubriques_virtuelles_styliser($flux) {
61        // uniquement si un squelette a ete trouve
62        if (($flux['args']['fond'] == 'rubrique') && $id_rubrique = $flux['args']['id_rubrique']) {
63                $m = sql_getfetsel('virtuel', 'spip_rubriques', array('id_rubrique='.intval($id_rubrique)));
64                if (strlen($m)) {
65                        include_spip('inc/texte');
66                        // les navigateurs pataugent si l'URL est vide
67                        if ($url = virtuel_redirige($m, true)) {
68                                // passer en url absolue car cette redirection pourra
69                                // etre utilisee dans un contexte d'url qui change
70                                // y compris url arbo
71                                $status = 302;
72                                if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
73                                        $status=_STATUS_REDIRECTION_VIRTUEL;
74                                }
75                                if (!preg_match(',^\w+:,', $url)) {
76                                        include_spip('inc/filtres_mini');
77                                        $url = url_absolue($url);
78                                }
79                                $url = str_replace('&amp;', '&', $url);
80                                include_spip('inc/headers');
81                                redirige_par_entete(texte_script($url), '', $status);
82                                return;
83                        }
84                }
85        }
86
87        return $flux;
88}
89
90/**
91 * Insertion dans le pipeline objet_compte_enfants (SPIP)
92 *
93 * Une rubrique est considérée comme vide lorsqu'elle n'a pas d'objets liés (articles, rubriques, documents).
94 *
95 * Ici on impose que le champ "virtuel" doit être vide pour que la rubrique soit considérée comme vide.
96 *
97 * @param unknown $flux
98 * @return number
99 */
100function rubriques_virtuelles_objet_compte_enfants($flux) {
101        if ($flux['args']['objet'] == 'rubrique') {
102                $id_rubrique = $flux['args']['id_objet'];
103                $virtuel = sql_getfetsel('virtuel', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
104                if (strlen(trim($virtuel)) > 0) {
105                        $flux['data']['redirection'] = 1;
106                }
107        }
108        return $flux;
109}
110
111/**
112 * Insertion dans le pipeline calculer_rubriques (SPIP)
113 * (cf calculer_rubriques_publiees() dans inc/rubriques)
114 *
115 * Évite de dépublier une rubrique avec une redirection
116 *
117 * @param null $flux
118 * @return null
119 */
120function rubriques_virtuelles_calculer_rubriques($flux) {
121        $rubriques_virtuelles_non_publiees = sql_allfetsel(
122                'id_rubrique, statut, id_parent',
123                'spip_rubriques',
124                'statut_tmp != "publie" AND virtuel != ""'
125        );
126        foreach ($rubriques_virtuelles_non_publiees as $rub) {
127                sql_updateq('spip_rubriques', array('statut_tmp'=> 'publie'), 'id_rubrique='.intval($rub['id_rubrique']));
128        }
129        return $flux;
130}
131
132function autoriser_rubriques_virtuelles() {
133}
134
135if (!function_exists('autoriser_rubrique_supprimer')) {
136        function autoriser_rubrique_supprimer($faire, $type, $id, $qui, $opt) {
137                $virtuel = sql_getfetsel('virtuel', 'spip_rubriques', 'id_rubrique='.intval($id));
138                if (strlen($virtuel) > 0) {
139                        return false;
140                }
141                return autoriser_rubrique_supprimer_dist($faire, $type, $id, $qui, $opt);
142        }
143}
Note: See TracBrowser for help on using the repository browser.