squellete2
[aidenligne_francais_universite.git] / plugins / couteau_suisse / cout_lancement.php
CommitLineData
c495c100
P
1<?php
2#-----------------------------------------------------#
3# Plugin : Couteau Suisse - Licence : GPL #
4# Auteur : Patrice Vanneufville, 2006 #
5# Contact : patrice¡.!vanneufville¡@!laposte¡.!net #
6# Infos : http://www.spip-contrib.net/?article2166 #
7#-----------------------------------------------------#
8# Fichier contenant les fonctions utilisees pendant #
9# l'execution du plugin. #
10# Seulement s'il y a lieu, on va inclure ici #
11# cout_utils.php et compiler les outils. #
12#-----------------------------------------------------#
13
14cs_log("inclusion des fonctions de cout_lancement.php pour initialisation");
15
16// compatibilite avec les plugins de version anterieure a 1.7.0.0
17function tweak_choix($s) { if ($p = strpos($s, '(')) return substr($s, 0, $p); return ''; }
18
19// Echapper les elements perilleux en les passant en base64
20// Creer un bloc base64 correspondant a $rempl ; au besoin en marquant
21// une $source differente ; optimisation du code spip !
22// echappe_retour() permet de revenir en arriere
23function cs_code_echappement($rempl, $source='') {
24 // Convertir en base64
25 $base64 = base64_encode($rempl);
26 // guillemets simple dans la balise pour simplifier l'outil 'guillemets'
27 return "<span class='base64$source' title='$base64'></span>";
28}
29
30function cs_preg_quote(&$item) {
31 $item = preg_quote($item, ',');
32}
33
34// lit ecrit les metas et initialise $cs_metas_pipelines
35// cette fonction est appellee par cout_options a chaque hit de la page
36function cs_initialisation($forcer=false) {
37 global $cs_metas_pipelines, $metas_outils;
38 $rand = sprintf('[#%04x] ', rand());
39 static $deja_passe_ici;
40 $mysql=function_exists('mysql_get_client_info')?' - MYSQL v'.mysql_get_client_info():'';
41 if (!intval($deja_passe_ici))
42 cs_log("#### 1er PASSAGE $rand################################# - \$forcer = ".intval($forcer)
43 . "\n{$rand}PHP v".phpversion()."$mysql - base SPIP v$GLOBALS[spip_version] - code SPIP v$GLOBALS[spip_version_code]");
44 $deja_passe_ici++;
45 // si les metas ne sont pas lus, on les lit
46cs_log("{$rand}cs_initialisation($forcer) : Passage #$deja_passe_ici");
47 if (isset($GLOBALS['meta']['tweaks_pipelines'])) {
48 $cs_metas_pipelines = unserialize($GLOBALS['meta']['tweaks_pipelines']);
49
50cs_log("$rand -- cs_metas_pipelines = ".(is_array($cs_metas_pipelines)?join(', ',array_keys($cs_metas_pipelines)):''));
51
52 // liste des actifs & definition des constantes attestant qu'un outil est bien actif : define('_CS_monoutil', 'oui');
53 $liste = array();
54 foreach($metas_outils as $nom=>$o) if($o['actif']) { $liste[]=$nom; @define('_CS_'.$nom, 'oui'); }
55 $liste2 = join(', ', $liste);
56cs_log("$rand -- ".count($liste).' outil(s) actif(s)'.(strlen($liste2)?" = ".$liste2:''));
57 // Vanter notre art de la compilation...
58 // La globale $spip_header_silencieux permet de rendre le header absent pour raisons de securite
59 if (!headers_sent()) if (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux'])
60 @header('X-Outils-CS: '.$liste2);
61cs_log($rand.($forcer?"\$forcer = true":"cs_initialisation($forcer) : Sortie car les metas sont presents"));
62 // Les pipelines sont en meta, tout va bien on peut partir d'ici.
63 if (!$forcer) return;
64 }
65 // ici on commence l'initialisation de tous les outils
66 $GLOBALS['cs_init'] = 1;
67 global $outils, $metas_vars, $metas_outils;
68 include_spip('inc/meta');
69 include_spip('cout_utils');
70 // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici);
71 include_spip('config_outils');
72 // verifier que tous les outils actives sont bien presents
73 foreach($metas_outils as $nom=>$o) if($o['actif']) { if(!isset($outils[$nom])) unset($metas_outils[$nom]); }
74 ecrire_meta('tweaks_actifs', serialize($metas_outils));
75 ecrire_metas();
76 // nettoyage des versions anterieures
77 cs_compatibilite_ascendante();
78 // stocker les types de variables declarees
79 global $cs_variables;
80 $metas_vars['_chaines'] = $cs_variables['_chaines'];
81 $metas_vars['_nombres'] = $cs_variables['_nombres'];
82 // au cas ou un outil manipule des variables
83 $description_outil = charger_fonction('description_outil', 'inc');
84 // completer les variables manquantes et incorporer l'activite lue dans les metas
85cs_log("$rand -- foreach(\$outils) : cs_initialisation_d_un_outil()");
86
87 // initialiser chaque outil et construire la liste des contribs
88 $contribs = array();
89 include_spip('inc/cs_outils');
90 foreach($outils as $outil) {
91 cs_initialisation_d_un_outil($id = $outil['id'], $description_outil, false);
92 if(isset($outil['contrib']) && isset($metas_outils[$id]['actif']))
93 $contribs[] = '<br/> &bull; [@@couteauprive:'.$outil['id'].':nom@@->http://www.spip-contrib.net/?article'.$outil['contrib'].']';
94 }
95 // installer $cs_metas_pipelines
96 $cs_metas_pipelines = array();
97cs_log("$rand -- cs_initialise_includes()... cout_fonctions.php sera probablement inclus.");
98 // creer les includes (mes_options et mes_fonctions) et le fichier de controle pipelines.php
99 cs_initialise_includes(count($metas_outils));
100 // sauver la configuration
101 cs_sauve_configuration();
102 // en metas : outils actifs
103cs_log("$rand -- ecriture metas");
104 ecrire_meta('tweaks_actifs', serialize($metas_outils));
105 // en metas : variables d'outils
106 ecrire_meta('tweaks_variables', serialize($metas_vars));
107 // en metas : code inline pour les pipelines, mes_options et mes_fonctions;
108 ecrire_meta('tweaks_pipelines', serialize($cs_metas_pipelines));
109 // en metas : les liens sur spip-contrib
110 ecrire_meta('tweaks_contribs', serialize($contribs));
111 ecrire_metas();
112 $GLOBALS['cs_init'] = 0;
113cs_log("{$rand}cs_initialisation($forcer) : Sortie");
114}
115
116/*
117function qui determine si $texte est de type Block (true) ou Inline (false)
118_BALISES_BLOCS est defini dans texte.php :
119define('_BALISES_BLOCS',
120 'div|pre|ul|ol|li|blockquote|h[1-6r]|'
121 .'t(able|[rdh]|body|foot|extarea)|'
122 .'form|object|center|marquee|address|'
123 .'d[ltd]|script|noscript|map|button|fieldset');
124*/
125function cs_block($texte) {
126 return preg_match(',(\n\n|\r\n\r\n|\r\r),', $texte)
127 || preg_match(',</?(p|'._BALISES_BLOCS.')[>[:space:]],iS', $texte);
128}
129
130// evite les transformations typo dans les balises $balises
131// par exemple pour <html>, <cadre>, <code>, <frame>, <script>, <acronym> et <cite>, $balises = 'html|code|cadre|frame|script|acronym|cite'
132// $fonction est la fonction prevue pour transformer $texte
133// $texte est le texte d'origine
134// si $balises = '' alors la protection par defaut est : html|code|cadre|frame|script
135function cs_echappe_balises($balises, $fonction, $texte, $arg=NULL){
136 if(!strlen($texte)) return '';
137 if (!function_exists($fonction)) {
138 spip_log("Erreur - cs_echappe_balises() : $fonction() non definie !");
139 return $texte;
140 }
141 if(!strlen($balises)) $balises = 'html|code|cadre|frame|script';
142 $balises = ',<('.$balises.')(\s[^>]*)?>(.*)</\1>,UimsS';
143 include_spip('inc/texte');
144 $texte = echappe_html($texte, 'CS', true, $balises);
145 $texte = echappe_retour($arg==NULL?$fonction($texte):$fonction($texte, $arg), 'CS');
146 return $texte;
147}
148
149// retourne un chemin canonique a partir d'un chemin contenant des ../
150function cs_canonicalize($address) {
151 $address = str_replace('\\', '/', str_replace('//', '/', $address));
152 $address = explode('/', $address);
153 $keys = array_keys($address, '..');
154 foreach($keys as $keypos => $key) array_splice($address, $key - ($keypos * 2 + 1), 2);
155 $address = implode('/', $address);
156 return preg_replace(',([^.])\./,', '\1', $address);
157}
158
159?>