[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / cout_pipelines.php
1 <?php
2
3 if(!defined("_ECRIRE_INC_VERSION")) return;
4
5 // attention, ici il se peut que le plugin ne soit pas initialise (cas des .js/.css par exemple)
6 if(defined('_LOG_CS')) cs_log("inclusion de cout_pipelines.php");
7
8 // fonction d'erreur indispensable a tous les pipelines
9 function cs_deferr($f) {
10 spip_log(_L("Pipeline CS : fonction '$f' non definie !"));
11 }
12
13 /*********
14 * PRIVE *
15 *********/
16
17 // ajout d'un onglet sur la page de configuration de SPIP
18 function couteau_suisse_ajouter_onglets($flux){
19 include_spip('inc/autoriser');
20 $arg = $flux['args']=='configuration' || $flux['args']=='plugins';
21 // si on est admin...
22 if($arg && autoriser('configurer', 'cs'))
23 $flux['data']['couteau_suisse']= new Bouton(find_in_path('img/couteau-24.gif'), 'couteau:titre', generer_url_ecrire('admin_couteau_suisse'));
24 return $flux;
25 }
26
27 function eval_metas_pipelines(&$flux, $pipe){
28 global $cs_metas_pipelines;
29 if(isset($cs_metas_pipelines[$pipe])) eval($cs_metas_pipelines[$pipe]);
30 return $flux;
31 }
32 // ajout d'une icone sur la page de configuration des plugins
33 // ce code ne sert a rien puisque le pipeline 'affiche_gauche' n'est pas pris en compte dans 'admin_plugin'...
34 function couteau_suisse_affiche_gauche($flux){
35 /*
36 if(_request('exec') == 'admin_plugin')
37 $flux['data'] .=
38 icone_horizontale(_T('couteau:titre'), generer_url_ecrire('admin_couteau_suisse'), find_in_path('img/couteau-24.gif'), '', false);
39 */
40 return eval_metas_pipelines($flux, 'affiche_gauche');
41 }
42 function couteau_suisse_affiche_droite($flux){
43 return eval_metas_pipelines($flux, 'affiche_droite');
44 }
45 function couteau_suisse_affiche_milieu($flux){
46 return eval_metas_pipelines($flux, 'affiche_milieu');
47 }
48 function couteau_suisse_boite_infos($flux){
49 return eval_metas_pipelines($flux, 'boite_infos');
50 }
51 function couteau_suisse_pre_boucle($flux){
52 return eval_metas_pipelines($flux, 'pre_boucle');
53 }
54
55 function couteau_suisse_header_prive($flux_){
56 global $cs_metas_pipelines;
57 $flux = '';
58 if(isset($cs_metas_pipelines['header_prive'])) eval($cs_metas_pipelines['header_prive']);
59 cs_compile_header($flux,'css', '_prive', false); cs_compile_header($flux, 'js', '_prive');
60 return $flux_ . $flux;
61 }
62
63
64 /**********
65 * PUBLIC *
66 **********/
67
68 function couteau_suisse_insert_head_css($flux_ = '', $prive = false){
69 static $done = false;
70 if($done) return $flux_;
71 $done = true;
72 global $cs_metas_pipelines;
73 $flux = '';
74 if(isset($cs_metas_pipelines['insert_head_css'])) eval($cs_metas_pipelines['insert_head_css']);
75 cs_compile_header($flux, 'css');
76 return $flux_ . $flux;
77 }
78
79 function couteau_suisse_insert_head($flux_){
80 global $cs_metas_pipelines;
81 $flux = '';
82 if(isset($cs_metas_pipelines['insert_head'])) eval($cs_metas_pipelines['insert_head']);
83 cs_compile_header($flux, 'js');
84 return $flux_
85 . couteau_suisse_insert_head_css() // en cas d'absence de balise #INSERT_HEAD_CSS
86 . $flux;
87 }
88
89 function couteau_suisse_affichage_final($flux){
90 eval_metas_pipelines($flux, 'affichage_final');
91 return cs_nettoie($flux);
92 }
93
94 /********
95 * TYPO *
96 ********/
97
98 function couteau_suisse_nettoyer_raccourcis_typo($flux){
99 return eval_metas_pipelines($flux, 'nettoyer_raccourcis_typo');
100 }
101 function couteau_suisse_pre_propre($flux){
102 return eval_metas_pipelines($flux, 'pre_propre');
103 }
104 function couteau_suisse_pre_typo($flux){
105 return eval_metas_pipelines($flux, 'pre_typo');
106 }
107 function couteau_suisse_post_propre($flux){
108 eval_metas_pipelines($flux, 'post_propre');
109 // tracage des echappements SPIP (<html/><code/><cadre/> etc.) pour les traitements (s'il y en a) venant apres propre()
110 // Note : SPIP echappe egalement les modeles
111 if($GLOBALS['cs_post_propre']) {
112 if(strpos($flux, '<span class="base64"')!==false)
113 $flux = preg_replace(',<span class="base64"[^>]+></span>,', _CS_HTMLA.'$0'._CS_HTMLB, $flux);
114 if(strpos($flux, '<div class="base64"')!==false)
115 $flux = preg_replace(',<div class="base64"[^>]+></div>,', _CS_HTMLA.'$0'._CS_HTMLB, $flux);
116 }
117 return $flux;
118 }
119
120 function couteau_suisse_post_typo($flux){
121 return eval_metas_pipelines($flux, 'post_typo');
122 }
123
124 /********
125 * BASE *
126 *******/
127
128 function couteau_suisse_pre_edition($flux){
129 return eval_metas_pipelines($flux, 'pre_edition');
130 }
131 function couteau_suisse_post_edition($flux){
132 return eval_metas_pipelines($flux, 'post_edition');
133 }
134
135 /**********
136 * DIVERS *
137 *********/
138
139 // pipeline SPIP<2.1
140 function couteau_suisse_creer_chaine_url($flux){
141 return eval_metas_pipelines($flux, 'creer_chaine_url');
142 }
143 // pipelines SPIP>=2.1
144 function couteau_suisse_arbo_creer_chaine_url($flux){
145 return eval_metas_pipelines($flux, 'arbo_creer_chaine_url');
146 }
147 function couteau_suisse_propres_creer_chaine_url($flux){
148 return eval_metas_pipelines($flux, 'propres_creer_chaine_url');
149 }
150
151 // eux fonctions obsoletes, conservees pour SPIP<3.0 :
152 // le contenu du sous-menu est gere par les lames elles-memes
153 function couteau_suisse_bt_toolbox($params) {
154 global $cs_metas_pipelines;
155 if(!isset($cs_metas_pipelines['bt_toolbox'])) return $params;
156 $flux = '';
157 eval($cs_metas_pipelines['bt_toolbox']);
158 $tableau_formulaire = '
159 <table class="spip_barre" style="width: auto; padding: 1px!important; border-top: 0px;" summary="">'
160 . str_replace(array('@@champ@@','@@span@@'), array($params['champ'], 'span style="vertical-align:75%;"'), $flux) . '
161 </table>';
162 $params['flux'] .= produceWharf('couteau_suisse', '', $tableau_formulaire);
163 return $params;
164 }
165 // bouton principal du Couteau Suisse
166 function couteau_suisse_bt_gadgets($params) {
167 global $cs_metas_pipelines;
168 if(!isset($cs_metas_pipelines['bt_toolbox'])) return $params;
169 $params['flux'] .= bouton_barre_racc("swap_couche('".$GLOBALS['numero_block']['couteau_suisse']."','');", _DIR_PLUGIN_COUTEAU_SUISSE."/img/couteau-24.gif", _T('couteauprive:raccourcis_barre'), $params['help']);
170 return $params;
171 }
172
173 function couteau_suisse_porte_plume_barre_pre_charger($flux){
174 eval_metas_pipelines($flux, 'porte_plume_barre_pre_charger');
175 $barres = pipeline('porte_plume_cs_pre_charger', array());
176 $r = array(
177 "id" => 'couteau_suisse_drop',
178 "name" => _T('couteau:pp_couteau_suisse_drop'),
179 "className" => 'couteau_suisse_drop',
180 "replaceWith" => '',
181 "display" => true,
182 );
183 foreach($barres as $barre=>$menu) {
184 $r["dropMenu"] = $menu;
185 $flux[$barre]->ajouterApres('grpCaracteres', $r);
186 }
187 return $flux;
188 }
189
190 function couteau_suisse_porte_plume_lien_classe_vers_icone($flux){
191 global $cs_metas_pipelines;
192 if (isset($cs_metas_pipelines['porte_plume_lien_classe_vers_icone'])) {
193 $flux['couteau_suisse_drop'] = 'couteau-19.png';
194 // chemin des icones-typo de couleur
195 _chemin(sous_repertoire(_DIR_VAR, 'couteau-suisse'));
196 eval($cs_metas_pipelines['porte_plume_lien_classe_vers_icone']);
197 }
198 return $flux;
199 }
200
201 // pipeline maison : bouton sous un drop Couteau Suisse
202 function couteau_suisse_porte_plume_cs_pre_charger($flux){
203 return eval_metas_pipelines($flux, 'porte_plume_cs_pre_charger');
204 }
205
206
207 // compatibilite avec le plugin Facteur
208 function couteau_suisse_facteur_pre_envoi($flux){
209 return eval_metas_pipelines($flux, 'facteur_pre_envoi');
210 }
211
212 // pipeline maison : pre-affichage de la description d'un outil
213 // flux['outil'] est l'id de l'outil, $flux['actif'] est l'etat de l'outil, flux['texte'] est le texte de description
214 function couteau_suisse_pre_description_outil($flux) {
215 global $cs_metas_pipelines;
216 $id = &$flux['outil']; $texte = &$flux['texte'];
217 if(isset($cs_metas_pipelines['pre_description_outil']))
218 eval($cs_metas_pipelines['pre_description_outil']);
219 return $flux;
220 }
221 // A l'issue du telechargement d'un fichier distant
222 function couteau_suisse_fichier_distant($flux) {
223 global $cs_metas_pipelines;
224 if(isset($cs_metas_pipelines['fichier_distant']))
225 eval($cs_metas_pipelines['fichier_distant']);
226 return $flux;
227 }
228
229 // callback pour la fonction cs_compile_pipe()
230 function cs_compile_header_callback($matches) {
231 if(defined('_LOG_CS')) cs_log(" -- compilation d'un header. Code CSS : ".couper($matches[1], 150));
232 return cs_recuperer_code($matches[1]);
233 }
234
235 // recherche et compilation par SPIP du contenu d'un fichier .html : <cs_html>contenu</cs_html>
236 // $type = 'css' ou 'js'
237 function cs_compile_header(&$flux, $type_, $suffixe='', $rem=true) {
238 //if(defined('_LOG_CS')) cs_log(" -- recherche de compilations necessaires du header.");
239 global $cs_metas_pipelines;
240 if(isset($cs_metas_pipelines[$type = 'header_'.$type_.$suffixe])) {
241 $header = &$cs_metas_pipelines[$type];
242 if(strpos($header, '<cs_html>')!==false) {
243 $header = preg_replace_callback(',<cs_html>(.*)</cs_html>,Ums', 'cs_compile_header_callback', $header);
244 // sauvegarde en metas
245 ecrire_meta('tweaks_pipelines', serialize($cs_metas_pipelines));
246 ecrire_metas();
247 ecrire_fichier(_DIR_CS_TMP.$type.'.html', "<!-- Fichier de controle $type_ pour le plugin 'Couteau Suisse' -->\n\n$header");
248 }
249 $flux .= $header;
250 }
251 if($rem)
252 $flux = strlen(trim($flux))?"\n<!-- Debut CS -->\n$flux\n<!-- Fin CS -->\n\n":"\n<!-- CS vide -->\n\n";
253 }
254
255 // construction d'un hit
256 // (recherche et compilation par SPIP du contenu d'un fichier .html : <cs_html>contenu</cs_html>)
257 // $type = 'css' ou 'js'
258 function cs_header_hit(&$flux, $type, $suffixe='') {
259 $f = "header$suffixe.$type";
260 $nom = sous_repertoire(_DIR_VAR,'couteau-suisse') . $f;
261 $tmp = _DIR_CS_TMP . $f;
262 if(!file_exists($tmp) || !file_exists($nom) || $GLOBALS['var_mode']=='recalcul') {
263 if (lire_fichier(_DIR_CS_TMP."header.$type.html", $t) && strlen($t)) {
264 if(strpos($t, '<cs_html>')!==false)
265 $t = preg_replace_callback(',<cs_html>(.*)</cs_html>,Ums', 'cs_compile_header_callback', $t);
266 ecrire_fichier($nom, $t, true);
267 ecrire_fichier($tmp, $t, true);
268 } else {
269 if(defined('_LOG_CS')) cs_log(" -- fichier $fo illisible. hit non construit");
270 return;
271 }
272 }
273 switch($type) {
274 case 'js': $flux .= '<script src="'.$nom.'" type="text/javascript"></script>'; break;
275 case 'css': include_spip('inc/filtres');
276 $flux .= '<link rel="stylesheet" href="'.direction_css($nom).'" type="text/css" media="all" />'; break;
277 }
278 }
279
280 /**
281 * recupere le resultat du calcul d'une compilation de code de squelette (marcimat)
282 * $coucou = $this->recuperer_code('[(#AUTORISER{ok}|oui)coucou]');
283 */
284 function cs_recuperer_code(&$code) {//, $contexte=array(), $options = array(), $connect=''){
285 $fond = _DIR_CS_TMP . md5($code);
286 $base = $fond . '.html';
287 if(!file_exists($base) OR $GLOBALS['var_mode']=='recalcul')
288 ecrire_fichier($base, $code);
289 include_spip('public/assembler');
290 $fond = str_replace('../', '', $fond);
291 // return recuperer_fond($fond, array('fond'=>$fond));
292 $f = inclure_page($fond, array('fond'=>$fond));
293 return $f['texte'];
294 }
295
296
297 /*
298 if(defined('_LOG_CS')) cs_log("INIT : cout_pipelines, lgr=" . strlen($cs_metas_pipelines['pipelines']));
299 if(!$GLOBALS['cs_pipelines']) include_once(_DIR_CS_TMP.'pipelines.php');
300 if(defined('_LOG_CS')) cs_log(' -- sortie de cout_pipelines... cs_pipelines = ' . intval($GLOBALS['cs_pipelines']));
301 */
302 ?>