[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / couteau_suisse_options.php
1 <?php
2 // Ce fichier est charge a chaque hit //
3 if (!defined('_ECRIRE_INC_VERSION')) return;
4
5 // Pour forcer les logs du plugin, outil actif ou non :
6 #define('_LOG_CS_FORCE', 'oui');
7
8 // Declaration des pipelines qui permettent d'interpreter la description d'un outil issue d'une chaine de langue
9 // init_description_outil : pipeline d'initialisation, texte brut sorti du fichier de langue
10 // les variables de l'outil ne sont pas encore interpretees
11 #$GLOBALS['spip_pipeline']['init_description_outil']='';
12 // pre_description_outil : 1er pipeline de pre_affichage, indispensable d'y mettre par exemple certaines constantes
13 if (!isset($GLOBALS['spip_pipeline']['pre_description_outil']))
14 $GLOBALS['spip_pipeline']['pre_description_outil']='';
15 // post_description_outil : 2e pipeline de pre_affichage, ici le texte est quasi definitif
16 #$GLOBALS['spip_pipeline']['post_description_outil']='';
17 // a l'issue du telechargement d'un fichier distant
18 $GLOBALS['spip_pipeline']['fichier_distant']='';
19
20 // Declaration d'un pipeline servant a inserer un bouton sous la baniere du Couteau Suisse
21 if (!isset($GLOBALS['spip_pipeline']['porte_plume_cs_pre_charger']))
22 $GLOBALS['spip_pipeline']['porte_plume_cs_pre_charger']='';
23
24 // pour les serveurs qui aiment les virgules...
25 $GLOBALS['spip_version_code'] = str_replace(',','.',$GLOBALS['spip_version_code']);
26 // constantes de compatibilite
27 // (pour info : SPIP 2.0 => 12691, SPIP 2.1 => 15133, SPIP 2.2 => ??, , SPIP 3.0 => 17743)
28 if ($GLOBALS['spip_version_code']>=17743)
29 { @define('_SPIP30000', 1); @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
30 elseif (!strncmp($GLOBALS['spip_version_affichee'],'2.2',3))
31 { @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
32 elseif ($GLOBALS['spip_version_code']>=15133)
33 { @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
34 elseif (version_compare($GLOBALS['spip_version_code'],'1.9300','>='))
35 { @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
36 elseif (version_compare($GLOBALS['spip_version_code'],'1.9200','>='))
37 @define('_SPIP19200', 1);
38 else @define('_SPIP19100', 1);
39
40 // chemin du fichier de fonctions
41 define('_COUT_FONCTIONS_PHP', find_in_path('couteau_suisse_fonctions.php'));
42 // globales de controles de passes
43 $GLOBALS['cs_options'] = $GLOBALS['cs_fonctions'] = $GLOBALS['cs_fonctions_essai'] = $GLOBALS['cs_init'] = $GLOBALS['cs_utils'] = $GLOBALS['cs_verif'] = 0;
44 // parametres d'url concernant le plugin ?
45 $GLOBALS['cs_params'] = isset($_GET['cs'])?explode(',', urldecode($_GET['cs'])):array();
46 // fichiers/dossiers temporaires pour le Couteau Suisse
47 define('_DIR_CS_TMP', sous_repertoire(_DIR_TMP, "couteau-suisse"));
48
49 // pour voir les erreurs ?
50 if (in_array('report', $GLOBALS['cs_params']))
51 { define('_CS_REPORT', 1); error_reporting(E_ALL ^ E_NOTICE); }
52 elseif (in_array('reportall', $GLOBALS['cs_params']) && $auteur_session['statut']=='0minirezo')
53 { define('_CS_REPORTALL', 1); @define('_LOG_CS', 1); error_reporting(E_ALL); }
54
55 // liste des outils et des variables
56 global $metas_vars, $metas_outils;
57 if (!isset($GLOBALS['meta']['tweaks_actifs'])) {
58 cs_log(" -- lecture metas");
59 include_spip('inc/meta');
60 lire_metas();
61 }
62 $metas_outils = isset($GLOBALS['meta']['tweaks_actifs'])?unserialize($GLOBALS['meta']['tweaks_actifs']):array();
63 $metas_vars = isset($GLOBALS['meta']['tweaks_variables'])?unserialize($GLOBALS['meta']['tweaks_variables']):array();
64
65 // on active tout de suite les logs, si l'outil est actif.
66 if (($metas_outils['cs_comportement']['actif'] && $metas_vars['log_couteau_suisse'])
67 || defined('_LOG_CS_FORCE') || in_array('log', $GLOBALS['cs_params'])) @define('_LOG_CS', 1);
68 if(defined('_LOG_CS')) {
69 cs_log(str_repeat('-', 80), '', sprintf('COUTEAU-SUISSE. [#%04X]. ', rand()));
70 cs_log('INIT : couteau_suisse_options, '.$_SERVER['REQUEST_URI']);
71 }
72
73 // on passe son chemin si un reset general est demande
74 $zap = _request('cmd')=='resetall';
75
76 // cas ou les options seraient appelees en dehors de tmp/charger_plugins_options.php
77 if (!defined('_DIR_PLUGIN_COUTEAU_SUISSE')) {
78 spip_log('## ERREUR : constante "_DIR_PLUGIN_COUTEAU_SUISSE" non definie !');
79 spip_log(' URI : '.$_SERVER['REQUEST_URI'].'. POST : '.var_export($POST, true));
80 $zap = true;
81 }
82
83 // lancer maintenant les options du Couteau Suisse
84 if($zap)
85 cs_log(' FIN : couteau_suisse_options sans initialisation du plugin');
86 else {
87 // $cs_metas_pipelines ne sert qu'a l'execution et ne comporte que :
88 // - le code pour <head></head>
89 // - le code pour les pipelines utilises
90 global $cs_metas_pipelines;
91 $cs_metas_pipelines = array();
92
93 // alias pour passer en mode impression
94 if ( in_array('print', $GLOBALS['cs_params']) ||
95 (isset($_GET['page']) && in_array($_GET['page'], array('print','imprimer','imprimir_articulo','imprimir_breve','article_pdf')))
96 ) define('_CS_PRINT', 1);
97
98 // recherche des fichiers a inclure : si les fichiers sont absent, on recompilera le plugin
99 // fichiers testes : tmp/couteau-suisse/mes_options.php et tmp/couteau-suisse/mes_spip_options.php
100 $cs_exists = file_exists($f_mo = _DIR_CS_TMP.'mes_options.php');
101 $f_mso = _DIR_CS_TMP.'mes_spip_options.php';
102 if(!$GLOBALS['cs_spip_options']) $cs_exists &= file_exists($f_mso);
103 if(!$cs_exists) cs_log(" -- '$f_mo' ou '$f_mso' introuvable !");
104
105 // lancer l'initialisation du plugin. on force la compilation si cs=calcul
106 include_once(_DIR_PLUGIN_COUTEAU_SUISSE.'cout_lancement.php');
107 cs_initialisation(!$cs_exists || in_array('calcul', $GLOBALS['cs_params']));
108 if(defined('_LOG_CS')) cs_log("PUIS : couteau_suisse_options, initialisation terminee");
109
110 // inclusion des options hautes de SPIP, si ce n'est pas deja fait par config/mes_options.php
111 if (!$GLOBALS['cs_spip_options']) {
112 if(file_exists($f_mso)) {
113 if(defined('_LOG_CS')) cs_log(" -- inclusion de '$f_mso'");
114 include_once($f_mso);
115 } else
116 cs_log(" -- fichier '$f_mso' toujours introuvable !!");
117 } else
118 cs_log(" -- fichier '$f_mso' deja inclu par config/mes_options.php");
119
120 // inclusion des options pre-compilees du Couteau Suisse, si ce n'est pas deja fait...
121 if (!$GLOBALS['cs_options']) {
122 if(file_exists($f_mo)) {
123 if(defined('_LOG_CS')) cs_log(" -- inclusion de '$f_mo'");
124 include_once($f_mo);
125 // verification cardinale des metas : reinitialisation si une erreur est detectee
126 if (count($metas_outils)<>$GLOBALS['cs_verif']) {
127 cs_log("ERREUR : metas incorrects - verif = $GLOBALS[cs_verif]");
128 cs_initialisation(true);
129 if (!$GLOBALS['cs_verif']) {
130 if(file_exists($f_mso)) include_once($f_mso);
131 if(file_exists($f_mo)) include_once($f_mo);
132 }
133 }
134 } else
135 cs_log(" -- fichier '$f_mo' toujours introuvable !!");
136 } else cs_log(" -- pas d'inclusion de '$f_mo' ; on est deja passe par ici !?");
137
138 // si une recompilation a eu lieu...
139 if ($GLOBALS['cs_utils']) {
140 // lancer la procedure d'installation pour chaque outil
141 if(defined('_LOG_CS')) cs_log(' -- cs_installe_outils...');
142 cs_installe_outils();
143 if(in_array('calcul', $GLOBALS['cs_params'])) {
144 include_spip('inc/headers');
145 redirige_par_entete(parametre_url($GLOBALS['REQUEST_URI'],'cs',str_replace('calcul','ok',join(',',$GLOBALS['cs_params'])),'&'));
146 }
147 }
148
149 // a-t-on voulu inclure couteau_suisse_fonctions.php ?
150 if ($GLOBALS['cs_fonctions_essai']) {
151 if(defined('_LOG_CS')) cs_log(" -- inclusion de : "._COUT_FONCTIONS_PHP);
152 @include(_COUT_FONCTIONS_PHP);
153 }
154
155 if(defined('_LOG_CS')) cs_log(" FIN : couteau_suisse_options, cs_spip_options = $GLOBALS[cs_spip_options], cs_options = $GLOBALS[cs_options], cs_fonctions_essai = $GLOBALS[cs_fonctions_essai]");
156 }
157
158 // Droits pour configurer le Couteau Suisse (fonction surchargeable sans le _dist)
159 // Droits par defaut equivalents a 'configurer' les 'plugins', donc tous les administrateurs non restreints
160 function autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt) {
161 return autoriser('configurer', 'plugins', $id, $qui, $opt);
162 }
163
164 // Droits pour afficher le bouton du Couteau Suisse dans le bandeau de SPIP
165 function autoriser_csconfig_bouton_dist($faire, $type, $id, $qui, $opt) {
166 return autoriser('configurer', 'cs', $id, $qui, $opt); // SPIP < 3.0
167 }
168 function autoriser_csconfig_menu_dist($faire, $type, $id, $qui, $opt) {
169 return autoriser('configurer', 'cs', $id, $qui, $opt); // SPIP >= 3.0
170 }
171
172 // Droits pour voir/manipuler un outil du Couteau Suisse
173 // $opt doit representer ici l'outil concerne : $outil
174 // Si $opt['autoriser'] (code PHP) n'est pas renseigne, ces droits natifs sont toujours accordes
175 function autoriser_outil_configurer_dist($faire, $type, $id, $qui, $opt) {
176 if(!is_array($opt)) return autoriser('configurer', 'cs', $id, $qui, $opt);
177 // test sur la version de SPIP
178 $test = !cs_version_erreur($opt)
179 // autorisation d'un outil en particulier
180 && autoriser('configurer', 'outil_'.$opt['id'], $id, $qui, $opt)
181 // autorisation de la categorie de l'outil
182 && autoriser('configurer', 'categorie_'.$opt['categorie'], $id, $qui, $opt);
183 if($test && isset($opt['autoriser']))
184 eval('$test &= '.$opt['autoriser'].';');
185 return $test;
186 }
187
188 // Droits pour modifier une variable du Couteau Suisse
189 // $opt doit contenir le nom de la variable et le tableau de l'outil appelant
190 function autoriser_variable_configurer_dist($faire, $type, $id, $qui, $opt) {
191 return autoriser('configurer', 'cs', $id, $qui, $opt)
192 && autoriser('configurer', 'outil_'.$opt['outil']['id'], $id, $qui, $opt['outil'])
193 && autoriser('configurer', 'variable_'.$opt['nom'], $id, $qui, $opt['outil']);
194 }
195
196 if(!defined('_SPIP20100')) {
197 // Bug SPIP 2.0.x
198 function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
199 return autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt); }
200 function autoriser_outil_configurer($faire, $type, $id, $qui, $opt) {
201 return autoriser_outil_configurer_dist($faire, $type, $id, $qui, $opt); }
202 function autoriser_variable_configurer($faire, $type, $id, $qui, $opt) {
203 return autoriser_variable_configurer_dist($faire, $type, $id, $qui, $opt); }
204 }
205
206 // TODO : revoir eventuellement tout ca avec la syntaxe de <necessite>
207 function cs_version_erreur(&$outil) {
208 return (isset($outil['version-min']) && version_compare($GLOBALS['spip_version_code'], $outil['version-min'], '<'))
209 || (isset($outil['version-max']) && version_compare($GLOBALS['spip_version_code'], $outil['version-max'], '>'));
210 }
211
212 // Logs de tmp/spip.log
213 function cs_log($variable, $prefixe='', $stat='') {
214 static $rand;
215 if($stat) $rand = $stat;
216 if (!is_string($variable)) $variable = var_export($variable, true);
217 if(!defined('_LOG_CS') /*|| !defined('_CS_REPORTALL')*/ || !strlen($variable)) return;
218 spip_log($variable = $rand.$prefixe.$variable);
219 if (defined('_CS_REPORTALL')) echo '<br />',htmlentities($variable);
220 }
221
222 // Message de sortie si la zone est non autorisee
223 function cs_minipres($exit=-1) {
224 if($exit===-1) {
225 include_spip('inc/autoriser');
226 $exit = !autoriser('configurer', 'cs');
227 }
228 if($exit) {
229 include_spip('inc/minipres');
230 echo minipres();
231 exit;
232 }
233 }
234
235 // Dates
236 function cs_date() {
237 return date(_T('couteau:date_court', array('jour'=>'d', 'mois'=>'m', 'annee'=>'y')));
238 }
239 function cs_date_long($numdate) {
240 $date_array = recup_date($numdate);
241 if (!$date_array) return '?';
242 list($annee, $mois, $jour, $heures, $minutes, $sec) = $date_array;
243 if(!defined('_SPIP19300')) list($heures, $minutes) =array(heures($numdate), minutes($numdate));
244 return _T('couteau:stats_date', array('jour'=>$jour, 'mois'=>$mois, 'annee'=>substr($annee,2), 'h'=>$heures, 'm'=>$minutes, 's'=>$sec));
245 }
246 function cs_date_court($numdate) {
247 $date_array = recup_date($numdate);
248 if (!$date_array) return '?';
249 list($annee, $mois, $jour) = $date_array;
250 return _T('couteau:date_court', array('jour'=>$jour, 'mois'=>$mois, 'annee'=>substr($annee,2)));
251 }
252
253 // Fichier d'options
254 function cs_spip_file_options($code) {
255 // Config generale
256 $glo = _DIR_RACINE._NOM_PERMANENTS_INACCESSIBLES._NOM_CONFIG.'.php';
257 // Attention a la mutualisation
258 if(defined('_DIR_SITE')) {
259 // Config locale uniquement
260 $nfo = $fo = _DIR_SITE._NOM_PERMANENTS_INACCESSIBLES._NOM_CONFIG.'.php';
261 } else {
262 // Fichier de config, s'il est present
263 $fo = (defined('_FILE_OPTIONS') && strlen(_FILE_OPTIONS))?_FILE_OPTIONS:false;
264 // Nom du fichier a creer en cas d'absence
265 $nfo = $glo;
266 }
267 switch($code) {
268 case 1: return $fo;
269 case 2: return $nfo;
270 case 3: return $fo?$fo:$nfo;
271 case 4: return $glo;
272 }
273 }
274
275 // balises de tracage, directement compatibles regexpr
276 // le separateur _CS_HTMLX est supprime en fin de calcul
277 @define('_CS_HTMLA', '<span class="csfoo htmla"></span>');
278 @define('_CS_HTMLB', '<span class="csfoo htmlb"></span>');
279 @define('_CS_HTMLX', '<span class="csfoo \w+"></span>');
280
281 // nettoyage des separateurs
282 function cs_nettoie(&$flux) {
283 if(strpos($flux, '"csfoo ')===false) return $flux;
284 return preg_replace(',<pp>\s*</p>,', '', preg_replace(','._CS_HTMLX.',', '', $flux));
285 }
286
287 ?>