source: spip-zone/_plugins_/couteau_suisse/couteau_suisse_options.php @ 65347

Last change on this file since 65347 was 65347, checked in by patfr@…, 7 years ago

MAJ auto : mode réparation compatible SPIP3
Une demande de mise à jour d'un plugin n'ayant pas de nouvelle version disponible (nouvelle release ou non) provoque le remplacement de ses fichiers.
+ Rajeunissement des librairies de SPIP2 ('icon' devenue 'logo', et mode return dans redirection brutale apres decompression d'archive)

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