[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / exec / admin_couteau_suisse.php
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 if(!defined("_ECRIRE_INC_VERSION")) return;
9
10 include_spip('inc/autoriser');
11 include_spip('inc/texte');
12 include_spip('inc/layer');
13 include_spip('inc/presentation');
14 include_spip('couteau_suisse_administrations');
15
16 // mise a jour des donnees si envoi via formulaire
17 function enregistre_modif_outils(&$cmd, &$outil){
18 cs_log("INIT : enregistre_modif_outils()");
19 global $outils, $metas_outils;
20 // recuperer les outils dans $_POST ou $_GET
21 $toggle = array();
22 if(strlen($outil)) $toggle[] = $outil;
23 elseif(isset($_POST['cs_selection'])) $toggle = explode(',', $_POST['cs_selection']);
24 else return;
25 $outil = ($cmd!='hide' && count($toggle)==1)?$toggle[0]:'';
26 $i = $cmd=='hide'?'cache':'actif';
27 ${$i} = isset($GLOBALS['meta']["tweaks_{$i}s"])?unserialize($GLOBALS['meta']["tweaks_{$i}s"]):array();
28 foreach($toggle as $o) if(autoriser('configurer', 'outil', 0, NULL, $outils[$o])) {
29 if(isset(${$i}[$o][$i]))
30 unset(${$i}[$o][$i]);
31 else ${$i}[$o][$i] = 1;
32 }
33 if(defined('_SPIP19300')) $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur'];
34 else global $connect_id_auteur;
35 spip_log("Changement de statut ($i) des outils par l'auteur id=$connect_id_auteur : ".implode(', ',array_keys(${$i})));
36 ecrire_meta("tweaks_{$i}s", serialize(${$i}));
37 if($cmd=='switch') $metas_outils = ${$i};
38
39 include_spip('inc/plugin');
40 defined('_SPIP20100')?actualise_plugins_actifs():verif_plugin();
41
42 cs_log(" FIN : enregistre_modif_outils()");
43 }
44
45 function exec_admin_couteau_suisse() {
46 cs_log("INIT : exec_admin_couteau_suisse()");
47 global $spip_lang_right;
48 global $outils, $afficher_outil, $metas_vars, $metas_outils;
49
50 // cette valeur par defaut n'est pas definie sous SPIP 1.92
51 // constante abandonnee sous SPIP 3.0
52 if(!defined('_SPIP30000')) @define('_ID_WEBMESTRES', 1);
53 cs_minipres();
54 $cmd = _request('cmd');
55 $exec = _request('exec');
56 $outil = _request('outil');
57
58 include_spip('inc/cs_outils');
59 cs_init_plugins();
60
61 // id de l'auteur en session
62 if(defined('_SPIP19300')) $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur'];
63 else global $connect_id_auteur;
64
65 // reset general
66 if($cmd=='resetall'){
67 spip_log("Reset General du Couteau Suisse par l'auteur id=$connect_id_auteur");
68 foreach(array_keys($GLOBALS['meta']) as $meta) {
69 if(strpos($meta, 'tweaks_') === 0) effacer_meta($meta);
70 if(strpos($meta, 'cs_') === 0) effacer_meta($meta);
71 }
72 $metas_vars = $metas_outils = array();
73 // ici, pas d'initialisation...
74 include_spip('cout_lancement');
75 cout_exec_redirige('cmd=resetjs');
76 }
77 // installation personnalisee
78 if(strlen($pack = _request('pack')) && isset($GLOBALS['cs_installer'][$pack]['outils'])) {
79 if($cmd=='install'){
80 spip_log("Installation personnalisee de '$pack' par l'auteur id=$connect_id_auteur");
81 // installer le pack et rediriger
82 cout_install_pack($pack, true);
83 } elseif($cmd=='delete'){
84 spip_log("Suppression de '$pack' par l'auteur id=$connect_id_auteur");
85 $p = preg_quote($pack,'/');
86 $r = "[$]GLOBALS\['cs_installer'\]\['$p'\] *=";
87 cs_ecrire_config(
88 array("/$r/", "/# [^\\n\\r]+[\\n\\r]+if\(0\) {$r}.*?# $p #[\\n\\r]+/s"),
89 array('if(0) \0', ''));
90 // simplement prendre en compte la supression
91 cout_exec_redirige('cmd=pack', false);
92 }
93 }
94 // reset des variables d'un outil
95 if($cmd=='reset' && strlen($outil)){
96 spip_log("Reset des variables de '$_GET[outil]' par l'auteur id=$connect_id_auteur");
97 global $outils;
98 include_spip('cout_utils');
99 include_spip('config_outils');
100 if(autoriser('configurer', 'outil', 0, NULL, $outils[$outil])) {
101 include_spip('inc/cs_outils');
102 cs_initialisation_d_un_outil($outil, charger_fonction('description_outil', 'inc'), true);
103 foreach ($outils[$outil]['variables'] as $a)
104 if(autoriser('configurer', 'variable', 0, NULL, array('nom'=>$a, 'outil'=>$outils[$outil])))
105 unset($metas_vars[$a]);
106 else spip_log("Reset interdit de la variable %$a% !!");
107 ecrire_meta('tweaks_variables', serialize($metas_vars));
108 }
109 // tout recompiler
110 cout_exec_redirige("cmd=descrip&outil={$_GET[outil]}#cs_infos");
111 }
112 // reset de l'affichage
113 if($cmd=='showall'){
114 spip_log("Reset de tous les affichages du Couteau Suisse par l'auteur id=$connect_id_auteur");
115 effacer_meta('tweaks_caches');
116 cout_exec_redirige();
117 }
118
119 // afficher la description d'un outil ?
120 $afficher_outil = ($cmd=='descrip' OR $cmd=='switch')?$outil:'';
121
122 // initialisation generale forcee : recuperation de $outils;
123 cs_initialisation(true, $cmd!='noinclude');
124 cs_installe_outils();
125
126 // mise a jour des donnees si envoi via formulaire
127 // sinon fait une passe de verif sur les outils
128 if($cmd=='switch' OR $cmd=='hide'){
129 enregistre_modif_outils($cmd, $outil);
130 cout_exec_redirige(strlen($outil)?"cmd=descrip&outil=$outil#cs_infos":'');
131 }
132 // else
133 // verif_outils();
134
135 $t = charger_fonction('commencer_page', 'inc');
136 echo $t(couteauprive_T('titre'), 'configuration', 'couteau_suisse');
137
138 // versions du Couteau Suisse et de la barre typo
139 include_spip('inc/plugin');
140 if(isset($GLOBALS['meta']['plugin'])) {
141 $t = unserialize($GLOBALS['meta']['plugin']);
142 $dir = $t['COUTEAU_SUISSE']['dir'];
143 $dir_type = $t['COUTEAU_SUISSE']['dir_type'];
144 // obsolete pour SPIP>=3.0 :
145 $bt_dir = $t['BARRETYPOENRICHIE']['dir'];
146 $bt_version = $t['BARRETYPOENRICHIE']['version'];
147 }
148 if(!strlen($dir)) $dir = 'couteau_suisse';
149 if(!strlen($bt_dir)) $bt_dir = 'barre_typo_v2';
150 $get_infos = defined('_SPIP20100')?charger_fonction('get_infos','plugins'):'plugin_get_infos';
151 $t = isset($dir_type)?$get_infos($dir, false, constant($dir_type)):$get_infos($dir);
152 $cs_version_base = $t['version_base']; $cs_version = $t['version'];
153 if(!function_exists('installe_un_plugin')) {
154 // ici SPIP >= 3.0
155 // TODO: redondances probables a revoir
156 // mises a jour eventuelles de la base
157 $installer_plugins = charger_fonction('installer', 'plugins');
158 /*$infos = */$installer_plugins('couteau_suisse', 'install');
159 parse_str(parametres_css_prive(), $paramcss);
160 } else {
161 // compatibilite SPIP < 3.0
162 // mises a jour eventuelles de la base
163 $paramcss = array();
164 installe_un_plugin($dir, $t, $dir_type);
165 }
166 if(!strlen($bt_version)) { $bt_version = $get_infos($bt_dir); $bt_version = $bt_version['version']; }
167
168 // precaution (inutile ?) sur mes_fonctions.php
169 include_spip('public/parametrer');
170
171 $cs_revision = ((lire_fichier(_DIR_PLUGIN_COUTEAU_SUISSE.'svn.revision',$t)) && (preg_match(',<revision>(\d+)</revision>,',$t, $r)))
172 ?'<br/>'.couteauprive_T('version_revision', array('revision'=>$r[1])):"";
173 include_spip('public/assembler');
174 echo recuperer_fond('exec/admin_couteau_suisse_head', array_merge(
175 $paramcss,
176 array(
177 'force' => in_array(_request('var_mode'), array('calcul', 'recalcul'))?'oui':null,
178 'cs_version' => $cs_version,
179 'exec' => _request('exec'),
180 )));
181 if(!defined('_SPIP30000')) echo "<br /><br /><br />";
182 gros_titre(couteauprive_T('titre'), '', false);
183
184 // Onglet pour SPIP<3.0
185 if(!defined('_SPIP30000')) echo barre_onglets("configuration", 'couteau_suisse');
186
187 echo quelques_verifications($bt_version);
188
189 // chargement des outils
190 include_spip('inc/cs_outils');
191 list($outils_affiches_actifs, $liste_outils) = liste_outils();
192
193 // cadre de gauche
194 echo debut_gauche('', true);
195 $t = '';
196 if(isset($GLOBALS['cs_installer'])) foreach(array_keys($GLOBALS['cs_installer']) as $pack)
197 $t .= "\n_ " . couteauprive_T('pack_du', array('pack'=>"{[{$pack}|".couteauprive_T('pack_installe').'->' . generer_url_ecrire($exec,'cmd=install&pack='.urlencode($pack)) . ']}'));
198 $t = couteauprive_T('help2', array(
199 'version' => $cs_version.$cs_revision.'<br/>'.
200 (defined('_CS_PAS_DE_DISTANT')?'('.couteauprive_T('version_distante_off').')':'<span class="cs_version">'.couteauprive_T('version_distante').'</span>')
201 ))
202 . chargement_automatique()
203 . '<br/>&bull;&nbsp;['.couteauprive_T('pack_titre') . '|' . couteauprive_T('pack_alt') . '->' . generer_url_ecrire($exec,'cmd=pack#cs_infos') . "]\n\n"
204 . couteauprive_T('help3', array(
205 'reset' => generer_url_ecrire($exec,'cmd=resetall'),
206 'hide' => generer_url_ecrire($exec,'cmd=showall'),
207 'contribs' => "\n_ &bull; " . cs_liste_contribs(25, "\n_ &bull; "),
208 'install' => $t
209 ));
210 if(function_exists('redirige_action_post')) $t = redirige_action_post('charger_plugin', '', 'admin_couteau_suisse', '', $t); // SPIP >= 2.0
211 $t = '<div class="cs_aide">'.couteauprive_T('help')."\n\n$t</div>";
212 echo debut_boite_info(true), propre($t), fin_boite_info(true);
213 // if(strlen($t = cs_aide_raccourcis()))
214 // echo debut_boite_info(true), $t, fin_boite_info(true);
215 $t = cs_aide_pipelines($outils_affiches_actifs);
216 if(strlen($t))
217 echo debut_boite_info(true), $t, fin_boite_info(true);
218 echo pipeline('affiche_gauche',array('args'=>array('exec'=>$exec),'data'=>''));
219
220 // cadre de droite
221 echo creer_colonne_droite('', true);
222 echo pipeline('affiche_droite',array('args'=>array('exec'=>$exec),'data'=>'')),
223 debut_droite('', true),
224 debut_cadre_trait_couleur(find_in_path('img/couteau-24.gif'),true,'','&nbsp;'.couteauprive_T('outils_liste')),
225 '<div class="titrem cs_intros">', couper($t = couteauprive_T('outil_intro'), 50),
226 '</div><div id="cs_infos_1" class="sous_liste cs_intros_inner">', $t, '</div>';
227 if(strlen($t = cs_aide_raccourcis()))
228 echo '<div class="titrem cs_intros">', couper($t, 50),
229 '</div><div id="cs_infos_2" class="sous_liste cs_intros_inner">', $t, '</div>';
230 echo "\n<table border='0' cellspacing='0' cellpadding='5' style='width:100%;'><tr><td class='sansserif'>";
231
232 $_GET['source'] = $exec;
233 echo '<div class="conteneur">', $liste_outils,
234 '</div><br class="conteneur" /><div class="cs_patience"><br />'.http_img_pack('searching.gif','*','').' ...</div>';
235 flush();
236 echo '<div class="conteneur"><div id="cs_infos" class="cs_infos">',
237 ($cmd=='pack' || ($cmd=='descrip' && $outil=='pack'))
238 ?cs_description_pack():description_outil2($afficher_outil),
239 '</div><script type="text/javascript"><!--
240 var cs_descripted = "', $afficher_outil, '";
241 document.write("<style type=\'text/css\'>#csjs{display:none;}<\/style>");
242 //--></script><div id="csjs" style="color:red;"><br/>', couteauprive_T('erreur:js'),'</div>
243 <noscript><style type="text/css">#csjs{display:none;}</style><div style="color:red;"><br/>', couteauprive_T('erreur:nojs'),
244 $_GET['modif']=='oui'?'<br/>'.couteauprive_T('vars_modifiees').'.':'','</div></noscript>',
245 '</div></td></tr></table>',
246 '<style type="text/css">.cs_patience{display:none;}</style>',
247 fin_cadre_trait_couleur(true),
248
249 pipeline('affiche_milieu',array('args'=>array('exec'=>$exec),'data'=>'')),
250 fin_gauche(), fin_page();
251 cs_log(" FIN : exec_admin_couteau_suisse()");
252 }
253
254 // messages d'avertissments eventuels
255 function quelques_verifications($bt_version) {
256 // test sur jQuery
257 $res = "<script type=\"text/javascript\"><!--
258 if(!window.jQuery) document.write('".str_replace('/','\/',addslashes(propre('<p>'.couteauprive_T('erreur:jquery').'</p>')))."');
259 //--></script>";
260 // verification d'une base venant de SPIP 1.8
261 $tmp = spip_query('DESCRIBE spip_meta valeur');
262 $tmp = function_exists('spip_fetch_array')?spip_fetch_array($tmp):sql_fetch($tmp);
263 if(strlen($tmp['Type']) && $tmp['Type']!='text')
264 $res .= "<p style=\"color:red;\">Attention : votre base semble ancienne et le Couteau Suisse ne va pas bien fonctionner.</p><p>La table 'spip_meta' a pour type de valeur '$tmp[Type]' au lieu de 'text'.</p>";
265 if(!defined('_SPIP30000')) {
266 // verification de la barre typo V2 (SPIP<3.0)
267 $mini = '2.5.3';
268 if(strlen($bt_version) and (version_compare($bt_version,$mini,'<')))
269 $res .= "<p>".couteauprive_T('erreur:bt', array('version'=>$bt_version, 'mini'=>$mini))."</p>";
270 }
271 return "<div style='font-size:85%'>$res</div>";
272 }
273
274 // clic pour la mise a jour du Couteau Suisse
275 function chargement_automatique() {
276 // si le plugin est installe par procedure automatique, on permet la mise a jour directe (SPIP >= 2.0)
277 $arg_chargeur = $GLOBALS['spip_version_base']>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2
278 $res = preg_match(',plugins/auto/couteau_suisse/$,',_DIR_PLUGIN_COUTEAU_SUISSE)?
279 "<input type='hidden' name='$arg_chargeur' value='http://files.spip.org/spip-zone/couteau_suisse.zip' />"
280 . "<br/><div class='cs_sobre'><input type='submit' value='&bull; " . attribut_html(couteauprive_T('version_update')) . "' class='cs_sobre' title='"
281 . attribut_html(couteauprive_T('version_update_title')) . "' /></div>"
282 :"";
283 // un lien si le plugin plugin "Telechargeur" est present (SPIP < 2.0)
284 if(!strlen($res) && defined('_DIR_PLUGIN_CHARGEUR'))
285 $res = "<br/>&bull; <a title='" . attribut_html(couteauprive_T('version_update_chargeur_title'))
286 . "' href='../spip.php?action=charger&plugin=couteau_suisse&url_retour=".urlencode(generer_url_ecrire('admin_couteau_suisse'))."'>".couteauprive_T('version_update_chargeur').'</a>';
287 return $res;
288 }
289
290 // callback pour les contribs
291 function cs_couper_25($matches) { return couper(couteauprive_T($matches[1]), 25); }
292
293 ?>