[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / inc / pipelines.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Fonctions déclarées dans des pipelines (espace public)
15 *
16 * @package SPIP\Pipelines
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) return;
19 if (test_espace_prive())
20 include_spip('inc/pipelines_ecrire');
21
22
23
24 /**
25 * Inserer jQuery et ses plugins
26 *
27 * La fonction ajoute les balises scripts dans le texte qui appelent
28 * les scripts jQuery ainsi que certains de ses plugins. La liste
29 * des js chargée peut être complété par le pipeline 'jquery_plugins'
30 *
31 * Cette fonction est appelée par le pipeline insert_head
32 *
33 * @internal
34 * Ne pas vérifier ici qu'on ne doublonne pas #INSERT_HEAD
35 * car cela empêche un double appel (multi calcul en cache cool,
36 * ou erreur de l'espace privé)
37 *
38 * @see f_jQuery_prive()
39 * @link http://doc.spip.org/@f_jQuery
40 *
41 * @param string $texte Contenu qui sera inséré dans le head HTML
42 * @return string Contenu qui sera inséré dans le head HTML
43 **/
44 function f_jQuery ($texte) {
45 $x = '';
46 $jquery_plugins = pipeline('jquery_plugins',
47 array(
48 'javascript/jquery.js',
49 'javascript/jquery.form.js',
50 'javascript/jquery.autosave.js',
51 'javascript/jquery.placeholder-label.js',
52 'javascript/ajaxCallback.js',
53 'javascript/jquery.cookie.js'
54 ));
55 foreach (array_unique($jquery_plugins) as $script)
56 if ($script = find_in_path($script))
57 $x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
58
59 $texte = $x.$texte;
60 return $texte;
61 }
62
63
64 /**
65 * Traiter var_recherche ou le referrer pour surligner les mots
66 *
67 * Surligne les mots de la recherche (si var_recherche est présent)
68 * ou des réferers (si la constante _SURLIGNE_RECHERCHE_REFERERS est
69 * définie à true) dans un texte HTML
70 *
71 * Cette fonction est appelée par le pipeline affichage_final
72 *
73 * @param string $texte Contenu de la page envoyée au navigateur
74 * @return string Contenu de la page envoyée au navigateur
75 **/
76 function f_surligne ($texte) {
77 if (!$GLOBALS['html']) return $texte;
78 $rech = _request('var_recherche');
79 if (!$rech
80 AND (!defined('_SURLIGNE_RECHERCHE_REFERERS')
81 OR !_SURLIGNE_RECHERCHE_REFERERS
82 OR !isset($_SERVER['HTTP_REFERER'])))
83 return $texte;
84 include_spip('inc/surligne');
85 if (isset($_SERVER['HTTP_REFERER'])) {
86 $_SERVER['HTTP_REFERER'] = preg_replace(',[^\w\,/#&;-]+,', ' ', $_SERVER['HTTP_REFERER']);
87 }
88 if ($rech){
89 $rech = preg_replace(',[^\w\,/#&;-]+,', ' ', $rech);
90 }
91
92 return surligner_mots($texte, $rech);
93 }
94
95 /**
96 * Indente un code HTML
97 *
98 * Indente et valide un code HTML si la globale 'xhtml' est
99 * définie à true.
100 *
101 * Cette fonction est appelée par le pipeline affichage_final
102 *
103 * @param string $texte Contenu de la page envoyée au navigateur
104 * @return string Contenu de la page envoyée au navigateur
105 **/
106 function f_tidy ($texte) {
107 /**
108 * Indentation à faire ?
109 *
110 * - true : actif.
111 * - false par défaut.
112 */
113 global $xhtml;
114
115 if ($xhtml # tidy demande
116 AND $GLOBALS['html'] # verifie que la page avait l'entete text/html
117 AND strlen($texte)
118 AND !headers_sent()) {
119 # Compatibilite ascendante
120 if (!is_string($xhtml)) $xhtml ='tidy';
121
122 if (!$f = charger_fonction($xhtml, 'inc', true)) {
123 spip_log("tidy absent, l'indenteur SPIP le remplace");
124 $f = charger_fonction('sax', 'xml');
125 }
126 return $f($texte);
127 }
128
129 return $texte;
130 }
131
132
133 /**
134 * Offre #INSERT_HEAD sur tous les squelettes (bourrin)
135 *
136 * À activer dans mes_options via :
137 * $GLOBALS['spip_pipeline']['affichage_final'] .= '|f_insert_head';
138 *
139 * Ajoute le contenu du pipeline insert head dans la page HTML
140 * si cela n'a pas été fait.
141 *
142 * @param string $texte Contenu de la page envoyée au navigateur
143 * @return string Contenu de la page envoyée au navigateur
144 **/
145 function f_insert_head($texte) {
146 if (!$GLOBALS['html']) return $texte;
147 include_spip('public/admin'); // pour strripos
148
149 ($pos = stripos($texte, '</head>'))
150 || ($pos = stripos($texte, '<body>'))
151 || ($pos = 0);
152
153 if (false === strpos(substr($texte, 0,$pos), '<!-- insert_head -->')) {
154 $insert = "\n".pipeline('insert_head','<!-- f_insert_head -->')."\n";
155 $texte = substr_replace($texte, $insert, $pos, 0);
156 }
157
158 return $texte;
159 }
160
161
162 /**
163 * Insérer au besoin les boutons admins
164 *
165 * Cette fonction est appelée par le pipeline affichage_final
166 *
167 * @param string $texte Contenu de la page envoyée au navigateur
168 * @return string Contenu de la page envoyée au navigateur
169 **/
170 function f_admin ($texte) {
171 if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW AND $GLOBALS['html']) {
172 include_spip('inc/filtres'); // pour http_img_pack
173 $x = "<div class='spip-previsu' "
174 . http_style_background('preview-32.png')
175 . ">"
176 . _T('previsualisation')
177 . "</div>";
178 if (!$pos = stripos($texte, '</body>'))
179 $pos = strlen($texte);
180 $texte = substr_replace($texte, $x, $pos, 0);
181 }
182
183 if (isset($GLOBALS['affiche_boutons_admin']) AND $GLOBALS['affiche_boutons_admin']) {
184 include_spip('public/admin');
185 $texte = affiche_boutons_admin($texte);
186 }
187 if (_request('var_mode')=='noajax'){
188 $texte = preg_replace(',(class=[\'"][^\'"]*)ajax([^\'"]*[\'"]),Uims',"\\1\\2",$texte);
189 }
190 return $texte;
191 }
192
193 /**
194 * Actions sur chaque inclusion
195 *
196 * Appelle f_afficher_blocs_ecrire() sur les inclusions dans l'espace privé.
197 * Ne change rien dans l'espace public.
198 *
199 * Cette fonction est appelée par le pipeline recuperer_fond
200 *
201 * @see f_afficher_blocs_ecrire()
202 *
203 * @param array $flux Description et contenu de l'inclusion
204 * @return array $flux Description et contenu de l'inclusion
205 **/
206 function f_recuperer_fond($flux) {
207 if (!test_espace_prive()) return $flux;
208 return f_afficher_blocs_ecrire($flux);
209 }
210
211 /**
212 * Gérer le lancement du cron si des tâches sont en attente
213 *
214 * Cette fonction est appelée par le pipeline affichage_final
215 *
216 * @param string $texte Contenu de la page envoyée au navigateur
217 * @return string Contenu de la page envoyée au navigateur
218 */
219 function f_queue(&$texte){
220
221 // eviter une inclusion si rien a faire
222 if (_request('action')=='cron'
223 OR queue_sleep_time_to_next_job()>0
224 OR defined('_DEBUG_BLOCK_QUEUE')){
225 return $texte;
226 }
227
228 include_spip('inc/queue');
229 $code = queue_affichage_cron();
230
231 // si rien a afficher
232 // ou si on est pas dans une page html, on ne sait rien faire de mieux
233 if (!$code OR !$GLOBALS['html'])
234 return $texte;
235
236 // inserer avant le </body> fermant si on peut, a la fin de la page sinon
237 if (($p=strpos($texte,'</body>'))!==FALSE)
238 $texte = substr($texte,0,$p).$code.substr($texte,$p);
239 else
240 $texte .= $code;
241
242 return $texte;
243 }
244
245 ?>