1 | <?php |
---|
2 | |
---|
3 | if (!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 | */ |
---|
15 | function 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 | */ |
---|
31 | function 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 | */ |
---|
60 | function 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('&', '&', $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 | */ |
---|
100 | function 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 | */ |
---|
120 | function 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 | |
---|
132 | function autoriser_rubriques_virtuelles() { |
---|
133 | } |
---|
134 | |
---|
135 | if (!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 | } |
---|