function exec_description_outil_dist() { cs_log("INIT : exec_description_outil_dist() - Preparation du retour par Ajax (donnees transmises par GET)"); $script = _request('script'); $outil = _request('outil'); cs_log(" -- outil = $outil - script = $script"); cs_minipres(!preg_match('/^\w+$/', $script)); // ici on commence l'initialisation de tous les outils global $outils, $metas_vars, $metas_outils; include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); cs_log(" -- exec_description_outil_dist() - Appel de config_outils.php : nb_outils = ".count($outils)); // installer les outils cs_installe_outils(); cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil, $script) :"); include_spip('inc/cs_outils'); $description_outil = charger_fonction('description_outil', 'inc'); $descrip = cs_initialisation_d_un_outil($outil, $description_outil, true); cs_init_plugins(); cs_log(" FIN : exec_description_outil_dist() - Appel maintenant de ajax_retour() pour afficher la ligne de configuration de l'outil"); include_spip('inc/texte'); include_spip('cout_fonctions'); // fonctions pour les pipelines ajax_retour(propre($descrip)); }
function boites_privees_URL_objet_exec() { cs_log("INIT : exec_action_rapide_dist() - Preparation du retour par Ajax (donnees transmises par GET)"); $script = _request('script'); cs_log(" -- fonction = $fct - script = $script - arg = $arg"); cs_minipres(!preg_match('/^\w+$/', $script)); $res = function_exists($fct = 'action_rapide_'._request('fct'))?$fct():''; cs_log(" FIN : exec_description_outil_dist() - Appel maintenant de ajax_retour() pour afficher le formulaire de la boite privee"); ajax_retour($res); }
function description_outil2($outil_id) { if(!strlen($outil_id)) return _T('couteauprive:outils_cliquez'); global $outils, $metas_vars, $metas_outils; include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); cs_log(" -- description_outil2($outil_id) - Appel de config_outils.php : nb_outils = ".count($outils)); cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil_id) :"); $description_outil = charger_fonction('description_outil', 'inc'); $descrip = cs_initialisation_d_un_outil($outil_id, $description_outil, true); include_spip('inc/presentation'); include_spip('inc/texte'); include_spip('public/parametrer'); // fonctions pour les pipelines $s = '<div class="cs-cadre">'; $outil = $outils[$outil_id]; unset($outils); $actif = $outil['actif']; $puce = $actif?'puce-verte.gif':'puce-rouge.gif'; $titre_etat = _T('couteauprive:outil_'.($actif?'actif':'inactif')); $nb_var = intval($outil['nb_variables']); // cette valeur par defaut n'est pas definie sous SPIP 1.92 @define('_ID_WEBMESTRES', 1); if(!strlen($outil['id']) || !autoriser('configurer', 'outil', 0, NULL, $outil)) return $s . _T('info_acces_interdit') . '</div>'; $s .= "<h3 class='titrem'><img src='"._DIR_IMG_PACK."$puce' width='9' height='9' alt=\"$titre_etat\" title=\"$titre_etat\" /> " . $outil['nom'] . '</h3>'; $s .= '<div class="cs_menu_outil">'; if($nb_var) $s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=reset&outil='.$outil_id).'" title="' . _T('couteauprive:par_defaut') . '">' . _T('couteauprive:par_defaut') . '</a> | '; if(!$actif) $s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=hide&outil='.$outil_id).'" title="' . _T('couteauprive:outil_cacher') . '">' . _T('couteauprive:outil_cacher') . '</a> | '; $act = $actif?'des':''; $s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=switch&outil='.$outil_id).'" title="'._T("couteauprive:outil_{$act}activer_le").'">'._T("couteauprive:outil_{$act}activer")."</a></div>"; if(strlen($temp = cs_action_fichiers_distants($outil) . cs_action_rapide($outil_id, $actif))) $s .= "<div class='cs_action_rapide' id='cs_action_rapide'>$temp</div>"; $s .= propre($descrip); $serial = serialize(array_keys($outil)); $p = ''; if($b=cs_balises_traitees($outil_id, '*, #')) $p .= '<p>' . _T('couteauprive:detail_balise_etoilee', array('bal' => $b.'*')) . '</p>'; if($actif && isset($outil['code:spip_options']) && strlen($outil['code:spip_options']) && ($outil_id<>'cs_comportement')) $p .= '<p>' . _T('couteauprive:detail_spip_options'.(defined('_CS_SPIP_OPTIONS_OK')?'_ok':''), array('lien'=>description_outil_liens_callback(array(1=>'cs_comportement')))) . '</p>'; if(isset($outil['jquery']) && $outil['jquery']=='oui') $p .= '<p>' . _T('couteauprive:detail_jquery2') . '</p>'; if(isset($outil['auteur']) && strlen($outil['auteur'])) $p .= '<p>' . _T('auteur') .' '. ($outil['auteur']) . '</p>'; if(isset($outil['contrib']) && strlen($outil['contrib'])) $p .= '<p>' . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.$outil['contrib'].']')) . '</p>'; return $s . propre($p) . detail_outil($outil_id) . '</div>'; }
function exec_charger_description_outil_dist() { cs_log("INIT : exec_charger_description_outil_dist() - Preparation du retour par Ajax sur div#cs_infos"); cs_minipres(); if ($outil_id=_request('outil')) { include_spip('inc/headers'); http_no_cache(); include_spip('inc/cs_outils'); echo '<div id="cs_infos" class="cs_infos">'.description_outil2($outil_id).'</div>'; } cs_log(" FIN : exec_charger_description_outil_dist()"); }
function exec_action_rapide_dist() { global $type_urls; cs_log("INIT : exec_action_rapide_dist() - Preparation par Ajax (donnees transmises par GET)"); // droits du Couteau Suisse cs_minipres(); list($outil, $arg) = explode('|',_request('arg'),2); $script = _request('script'); cs_log(" -- script = $script - outil = $outil - arg = $arg"); // verification du format de l'argument cs_minipres(!isset($arg)); if(!strlen($arg)) $arg = 'retour_nul'; cs_minipres(!preg_match('/^\w+$/', $script)); switch ($arg) { // retour normal des actions rapides du couteau suisse : affichage du bloc au sein de la description d'un outil case 'description_outil': cs_log(" -- Preparation de l'affichage de la description de l'outil"); include_spip('inc/cs_outils'); $res = cs_action_rapide($outil); cs_log(" FIN : exec_action_rapide_dist() - Appel maintenant de ajax_retour() pour afficher le formulaire de '$outil'"); ajax_retour($res); break; // mettre a jour les fichiers distants d'un outil... case 'fichiers_distants': global $outils; include_spip('cout_utils'); include_spip('config_outils'); if(autoriser('configurer', 'outil', 0, NULL, $outil)) { include_spip('inc/cs_outils'); cs_initialisation_d_un_outil($outil, charger_fonction('description_outil', 'inc'), false); // mise a jour forcee $res = cs_action_fichiers_distants($outils[$outil], true); } cs_log(" FIN : exec_action_rapide_dist() - Appel maintenant de ajax_retour() pour afficher le formulaire de '$outil'"); ajax_retour($res); break; // pour le reste (ex : 'sauve_pack' en mode non ajax), rien a faire. case 'retour_nul': cs_log("FIN : exec_action_rapide_dist() - Retour nul"); break; default: // fonction mon_outil_argument_exec() suite a l'appel de ?exec=action_rapide&arg=mon_outil|argument cs_log("FIN : exec_action_rapide_dist() - Appel de {$outil}_{$arg}_exec()"); include_spip('outils/'.$outil.'_action_rapide'); if(function_exists($fct = $outil.'_'.$arg.'_exec')) $fct(); break; } }
function action_description_outil_post($index) { global $metas_vars; if(defined('_SPIP19300')) $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur']; else global $connect_id_auteur; cs_log("Debut : action_description_outil_post($index) - On modifie la(les) variable(s) dans la base"); // on recupere dans le POST le nom des variables a modifier et le nom de l'outil correspondant $variables = unserialize(urldecode(corriger_caracteres(_request('variables')))); $outil = corriger_caracteres(_request('outil')); //cs_log($variables, '$variables = '); cs_log($metas_vars, 'metas_vars :'); // besoin des outils pour l'autorisation de modifier les variables include_spip('cout_utils'); include_spip('config_outils'); global $outils, $cs_variables; // on traite chaque variable foreach($variables as $var) if(autoriser('configurer', 'variable', 0, NULL, array('nom'=>$var, 'outil'=>$outils[$outil]))) { // on recupere dans le POST la nouvelle valeur de la variable $final = corriger_caracteres(_request($var)); if (in_array($var, $metas_vars['_nombres'])) $final = intval($final); spip_log("Outil du Couteau Suisse ($outil). Demande de modification sur une variable par l'auteur id=$connect_id_auteur : %$var% = $final"); // et on modifie les metas ! if(!isset($cs_variables[$var]['externe'])) $metas_vars[$var] = $final; if(isset($cs_variables[$var]['action'])) { $action = str_replace('%s', $final, $cs_variables[$var]['action']); spip_log("Outil du Couteau Suisse ($outil). Demande d'action sur cette variable : ".$action); eval($action); } } else spip_log("Outil du Couteau Suisse n°$index. Modification interdite de la variable %$var% par l'auteur id=$connect_id_auteur !!"); //cs_log($metas_vars, " -- metas_vars = "); ecrire_meta('tweaks_variables', serialize($metas_vars)); ecrire_metas(); cs_log(" -- donc, reinitialisation forcee !"); // on reinitialise tout, au cas ou ... include_spip('inc/invalideur'); suivre_invalideur("1"); # tout effacer purger_repertoire(_DIR_SKELS); purger_repertoire(_DIR_CACHE); include_spip('cout_utils'); cs_initialisation(true); cs_log(" FIN : action_description_outil_post(Array($index)) - Reinitialisation forcee terminee."); }
function couleurs_installe() { cs_log("couleurs_installe()"); list($couleurs, $html) = couleurs_constantes(); foreach ($couleurs[0] as $c=>$val) $couleurs[2][$val] = isset($html[$couleurs[1][$c]])?'#'.$html[$couleurs[1][$c]]:$couleurs[1][$c]; if (_COULEURS_SET===1) { $perso = preg_replace('^\s*(=|,)\s*^','\1', trim(_COULEURS_PERSO)); $perso = explode(',', $perso); $couleurs_perso = array(); foreach($perso as $p) { list($a, $b) = explode('=', $p, 2); $b = isset($html[$b])?'#'.$html[$b]:$b; if (strlen($a) && strlen($b)) { if(in_array($b, $couleurs[0])) $b = $couleurs[2][$b]; $couleurs_perso[$a] = $b; } elseif (strlen($a)) { $b=in_array($a, $couleurs[0])?$couleurs[2][$a]:$a; $couleurs_perso[$a] = $b; } } $couleurs[2] = $couleurs_perso; $couleurs[0] = join('|', array_keys($couleurs_perso)); $aide = array_keys($couleurs_perso); } else { $aide = array_merge($couleurs[0], $couleurs[1]); $couleurs[0] = join('|', $couleurs[0]); $couleurs[1] = join('|', $couleurs[1]); } if(defined('_DIR_PLUGIN_PORTE_PLUME')) { foreach(array('texte','fond') as $x) { $texte = _T('couteau:pp_couleur_icone_'.$x); foreach ($couleurs[2] as $i=>$c) { // icone de la couleur $i $color = isset($html[$c])?$html[$c]:str_replace('#','',$c); $couleurs[4]['couleur_'.$x.'_'.str_replace(' ','_',$i)] = array($texte, $color); } } } return array('couleurs'=>$couleurs, 'couleurs_racc'=>$aide); }
function exec_test_couteau_suisse() { cs_log("DEDUT : exec_test_couteau_suisse()"); global $connect_statut, $connect_toutes_rubriques; cs_minipres(); // initialisation generale forcee : recuperation de $outils; cs_initialisation(true); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('couteauprive:titre_tests'), "configuration", 'couteau_suisse'); echo '<br /><br /><br />', gros_titre(_T('couteauprive:titre_tests'), '', false), '<div style="width:98%; text-align:left; margin:0 auto">'; // et hop, on lance les tests ! cs_les_tests(); echo '</div>'; echo fin_page(); cs_log(" FIN : exec_test_couteau_suisse()"); }
function couteau_suisse_upgrade($nom_meta_base_version,$version_cible){ //echo "<br>UPGRADE : $nom_meta_base_version,$version_cible,",$GLOBALS['meta'][$nom_meta_base_version]; if(defined('_LOG_CS')) cs_log("couteau_suisse_upgrade($nom_meta_base_version,$version_cible)"); $current_version = 0.0; if( (!isset($GLOBALS['meta'][$nom_meta_base_version])) || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){ if ($current_version==0.0){ include_spip('base/create'); creer_base(); } if (version_compare($current_version,$tmp='1.0','<')){ echo '<h4>',_T('couteau:titre'),' - Upgrade ',$tmp,'</h4>'; cs_suppr_metas_var('set_options'); cs_suppr_metas_var('radio_set_options3'); cs_suppr_metas_var('radio_set_options', 'radio_set_options4'); cs_suppr_metas_var('radio_type_urls', 'radio_type_urls3'); cs_suppr_metas_var('radio_type_urls2', 'radio_type_urls3'); cs_suppr_metas_var('radio_filtrer_javascript', 'radio_filtrer_javascript3'); cs_suppr_metas_var('radio_filtrer_javascript2', 'radio_filtrer_javascript3'); cs_suppr_metas_var('radio_suivi_forums', 'radio_suivi_forums3'); cs_suppr_metas_var('desactive_cache'); cs_suppr_metas_var('radio_desactive_cache', 'radio_desactive_cache3'); cs_suppr_metas_var('target_blank'); cs_suppr_metas_var('url_glossaire_externe', 'url_glossaire_externe2'); cs_suppr_metas_var(''); effacer_meta('cs_decoupe'); if(defined('_SPIP19300')) { if(@$metas_vars['radio_desactive_cache3']==1) $metas_vars['radio_desactive_cache4']=-1; cs_suppr_metas_var('radio_desactive_cache3'); } foreach(array('cs_decoration', 'cs_decoration_racc', 'cs_smileys', 'cs_smileys_racc', 'cs_chatons', 'cs_chatons_racc', 'cs_jcorner', 'cs_couleurs', 'cs_couleurs_racc', 'cs_filets_sep', 'cs_filets_sep_racc', 'cs_insertions') as $meta) effacer_meta($meta); ecrire_meta($nom_meta_base_version,$current_version=$tmp); } ecrire_metas(); } }
function action_action_rapide_dist() { $arg = _request('arg'); cs_log("INIT : action_action_rapide_dist() - Une action rapide '$arg' a ete demandee !"); $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $redirect = _request('redirect'); if(!defined('_SPIP19300')) $redirect = urldecode($redirect); $outil = ( preg_match(',&arg=([\w_]+)\|[\w_]+,', $redirect, $regs) || preg_match(',&outil=([\w_]+),', $redirect, $regs) || preg_match(',&cmd=([\w_]+),', $redirect, $regs) )?$regs[1]:false; // au cas ou, pour redirige_par_entete() include_spip('inc/headers'); spip_log("action 'action_rapide' du Couteau suisse : $outil|$arg"); //cs_log($_POST, 'action POST='); cs_log($_GET, 'action GET='); switch($arg) { case 'fichiers_distants': // mettre a jour les fichiers distants d'un outil... // rien a faire :-) break; default: if($outil) { // fonction mon_outil_argument_action() suite a l'appel de ?action=action_rapide&arg=mon_outil|argument $fct = $outil.'_'.$arg.'_action'; cs_log("FIN : action_action_rapide_dist() - Appel de $fct()"); include_spip('outils/'.$outil.'_action_rapide'); if(function_exists($fct)) $fct(); else cs_log(" -- Erreur : fonction $fct() introuvable !"); } else cs_log(" -- Erreur : outil non renseigne !"); break; } }
function insertions_installe() { if(!defined('_insertions_LISTE')) return NULL; cs_log("insertions_installe()"); // on decode la liste entree dans la config $liste = preg_split("/[\r\n]+/", trim(_insertions_LISTE)); $str = $preg = array(array(), array()); foreach ($liste as $l) { list($a, $b) = explode("=", $l, 2); $a = trim($a); $b = trim($b); if (!strlen($a) || preg_match('/^(#|\/\/)/', $a)) { // remarques ou vide } elseif (preg_match('/^\((.+)\)$/', $a, $reg)) { // les mots seuls $preg[0][] = '/\b'.$reg[1].'\b/'; $preg[1][] = $b; } elseif (preg_match('/^(\/.+\/[imsxuADSUX]*)$/', $a)) { // expressions regulieres $preg[0][] = $a; $preg[1][] = $b; } elseif (strlen($a)) { // simples remplacements $str[0][] = $a; $str[1][] = $b; } } return array('insertions' => array($str, $preg)); }
function jcorner_installe() { cs_log("jcorner_installe()"); if(!defined('_jcorner_CLASSES')) return NULL; // on decode les balises entrees dans la config $classes = preg_split("/[\r\n]+/", trim(_jcorner_CLASSES)); $code = array(); foreach ($classes as $class) { list($class,) = explode('//', $class); if (preg_match('/^\s*([\'"]?)(.*?)\\1\s*=(.*)$/', $class, $regs)) { // forme avec commande jQuery $a = trim($regs[2]); $b = trim($regs[3]); $b = preg_match('/^(=*)\s*\.*(.*)$/', $b, $regs2)?trim($regs2[2]):''; $not = !strlen($regs2[1])?'.not(".jc_done").addClass("jc_done")':''; if(strlen($a) && strlen($b)) $code[] = "jQuery(\"$a\", this)$not.$b;"; } elseif (preg_match('/^\s*([\'"]?)(.+)\\1\s*$/', $class, $regs)) { // forme simple avec coins arrondis $a = trim($regs[2]); if (strlen($a)) $code[] = "jQuery(\"$a\", this).not('.jc_done').addClass('jc_done').corner();"; } } // en retour : le code jQuery return array('jcorner' => join("\n\t", $code)); }
function cs_ecrire_config($regexpr, $replace, $ajout_sinon='') { $fo = cs_spip_file_options(1); $t=''; if ($fo && strlen($regexpr) && strlen($replace)) { if (lire_fichier($fo, $t) && strlen($t)) { $t = preg_replace($regexpr, $replace, $t, 1); if(ecrire_fichier($fo, $t)) return; else if(defined('_LOG_CS')) cs_log("ERREUR : l'ecriture du fichier $fo a echoue !"); } else if(defined('_LOG_CS')) cs_log(" -- fichier $fo illisible. Inclusion non permise"); if(strlen($t)) return; } // creation if(!strlen($ajout_sinon)) return; $fo = cs_spip_file_options(2); $ok = ecrire_fichier($fo, '<?'."php\n".$ajout_sinon."\n?".'>'); if(defined('_LOG_CS')) cs_log(" -- fichier $fo absent ".($ok?'mais cree avec l\'inclusion':' et impossible a creer')); }
function smileys_installe() { $path = find_in_path('img/smileys'); cs_log("smileys_installe() : $path"); $path2 = url_absolue($path); // l'ordre des smileys ici est important : // - les doubles, puis les simples, puis les courts // - le raccourci insere par la balise #SMILEYS est la premiere occurence de chaque fichier $smileys = array( // attention ' est different de ’ (’) (SPIP utilise/ecrit ce dernier) ":’-))"=> 'pleure_de_rire.png', ":’-)"=> 'pleure_de_rire.png', ":’-D" => 'pleure_de_rire.png', ":’-(" => 'triste.png', // les doubles : ':-))' => 'mort_de_rire.png', ':))' => 'mort_de_rire.png', ":'-))"=> 'pleure_de_rire.png', ':-((' => 'en_colere.png', // les simples : ';-)' => 'clin_d-oeil.png', ':-)' => 'sourire.png', ':-D' => 'mort_de_rire.png', ":'-)"=> 'pleure_de_rire.png', ":'-D" => 'pleure_de_rire.png', ':-(' => 'pas_content.png', ":'-(" => 'triste.png', ':->' => 'diable.png', '|-)' => 'rouge.png', ':o)' => 'rigolo.png', 'B-)' => 'lunettes.png', ':-P' => 'tire_la_langue.png', ':-p' => 'tire_la_langue.png', ':-|' => 'bof.png', ':-/' => 'mouais.png', ':-O' => 'surpris.png', ':-o' => 'surpris.png', // les courts : tester a l'usage... // attention : ils ne sont reconnus que s'il y a un espace avant ! ':)' => 'sourire.png', ':(' => 'pas_content.png', ';)' => 'clin_d-oeil.png', ':|' => 'bof.png', '|)' => 'rouge.png', ':/' => 'mouais.png', ); $aide = array(); foreach ($smileys as $smy=>$val) { $espace = strlen($smy)==2?' ':''; $smileys2[0][] = $espace.$smy; list(,,,$size) = @getimagesize("$path/$val"); // cs_code_echappement evite que le remplacement se fasse a l'interieur des attributs de la balise <img> $smileys2[1][] = cs_code_echappement($espace."<img alt=\"$smy\" title=\"$smy\" class=\"no_image_filtrer format_png\" src=\"$path2/$val\" $size/>", 'SMILE'); $smileys2[2][] = $val; // aide : liste des smileys disponibles $aide[] = $smy; } if(defined('_DIR_PLUGIN_PORTE_PLUME')) { $sm = smileys_uniques($smileys2); $max = count($sm[2]); for ($i=0; $i<$max; $i++) $smileys2[4]['smiley_'.str_replace('.png','',$sm[2][$i])] = $sm[2][$i]; } return array('smileys'=>$smileys2, 'smileys_racc'=>$aide); }
function cs_log_sql($file, $sql, $action = 0) { global $cs_logs, $account; $cs_logs['queries']++; $new = $cs_logs['queries'] . ') ' . $sql . "\n"; $cs_logs['sql'][$file] = isset($cs_logs['sql'][$file]) ? $cs_logs['sql'][$file] . $new : $new; if (!empty($action) and !empty($cs_logs['save_actions'])) { $log = 'USERS_ID ' . $account['users_id'] . "\n" . $sql . "\n"; cs_log('actions', $log); } }
// lancer la procedure d'installation pour chaque outil if(defined('_LOG_CS')) cs_log(' -- cs_installe_outils...'); cs_installe_outils(); if(in_array('calcul', $GLOBALS['cs_params'])) { include_spip('inc/headers'); redirige_par_entete(parametre_url($GLOBALS['REQUEST_URI'],'cs',str_replace('calcul','ok',join(',',$GLOBALS['cs_params'])),'&')); } } // a-t-on voulu inclure cout_fonctions.php ? if ($GLOBALS['cs_fonctions_essai']) { if(defined('_LOG_CS')) cs_log(" -- inclusion de : "._COUT_FONCTIONS_PHP); @include(_COUT_FONCTIONS_PHP); } if(defined('_LOG_CS')) cs_log(" FIN : cout_options, cs_spip_options = $GLOBALS[cs_spip_options], cs_options = $GLOBALS[cs_options], cs_fonctions_essai = $GLOBALS[cs_fonctions_essai]"); } // Droits pour configurer le Couteau Suisse (fonction surchargeable sans le _dist) // Droits par defaut equivalents a 'configurer' les 'plugins', donc tous les administrateurs non restreints function autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt) { return autoriser('configurer', 'plugins', $id, $qui, $opt); } // Droits pour voir/manipuler un outil du Couteau Suisse // $opt doit representer ici l'outil concerne : $outil // Si $opt['autoriser'] (code PHP) n'est pas renseigne, ces droits natifs sont toujours accordes function autoriser_outil_configurer_dist($faire, $type, $id, $qui, $opt) { if(!is_array($opt)) return autoriser('configurer', 'cs', $id, $qui, $opt); // test sur la version de SPIP $test = !cs_version_erreur($opt)
function cs_installe_outils() { global $metas_outils; $datas = array(); foreach($metas_outils as $nom=>$o) if(isset($o['actif']) && $o['actif']) { include_spip('outils/'.$nom); if(function_exists($f = $nom.'_installe')) { if(($tmp=$f())!==NULL) foreach($tmp as $i=>$v) $datas[$i] = "function cs_data_$i() { return " . var_export($v, true) . ";\n}"; if(defined('_LOG_CS')) cs_log(" -- $f() : OK !"); } } $datas = array('code_outils' => $datas); ecrire_fichier_en_tmp($datas, 'outils'); ecrire_metas(); }
function exec_admin_couteau_suisse() { cs_log("INIT : exec_admin_couteau_suisse()"); global $spip_lang_right; global $outils, $afficher_outil, $metas_vars, $metas_outils; // cette valeur par defaut n'est pas definie sous SPIP 1.92 @define('_ID_WEBMESTRES', 1); cs_minipres(); $cmd = _request('cmd'); $exec = _request('exec'); include_spip('inc/cs_outils'); cs_init_plugins(); // id de l'auteur en session if(defined('_SPIP19300')) $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur']; else global $connect_id_auteur; // reset general if($cmd=='resetall'){ spip_log("Reset General du Couteau Suisse par l'auteur id=$connect_id_auteur"); foreach(array_keys($GLOBALS['meta']) as $meta) { if(strpos($meta, 'tweaks_') === 0) effacer_meta($meta); if(strpos($meta, 'cs_') === 0) effacer_meta($meta); } $metas_vars = $metas_outils = array(); // ici, pas d'initialisation... include_spip('cout_lancement'); cout_exec_redirige('cmd=resetjs'); } // installation personnalisee if(strlen($pack = _request('pack')) && isset($GLOBALS['cs_installer'][$pack]['outils'])) { if($cmd=='install'){ spip_log("Installation personnalisee de '$pack' par l'auteur id=$connect_id_auteur"); // installer le pack et rediriger cout_install_pack($pack, true); } elseif($cmd=='delete'){ spip_log("Suppression de '$pack' par l'auteur id=$connect_id_auteur"); $p = preg_quote($pack,'/'); $r = "[$]GLOBALS\['cs_installer'\]\['$p'\] *="; cs_ecrire_config( array("/$r/", "/# [^\\n\\r]+[\\n\\r]+if\(0\) {$r}.*?# $p #[\\n\\r]+/s"), array('if(0) \0', '')); // simplement prendre en compte la supression cout_exec_redirige('cmd=pack', false); } } // reset des variables d'un outil if($cmd=='reset' && strlen($_GET['outil'])){ spip_log("Reset des variables de '$_GET[outil]' par l'auteur id=$connect_id_auteur"); global $outils; include_spip('cout_utils'); include_spip('config_outils'); if(autoriser('configurer', 'outil', 0, NULL, $outils[$_GET['outil']])) { include_spip('inc/cs_outils'); cs_initialisation_d_un_outil($_GET['outil'], charger_fonction('description_outil', 'inc'), true); foreach ($outils[$_GET['outil']]['variables'] as $a) if(autoriser('configurer', 'variable', 0, NULL, array('nom'=>$a, 'outil'=>$outils[$_GET['outil']]))) unset($metas_vars[$a]); else spip_log("Reset interdit de la variable %$a% !!"); ecrire_meta('tweaks_variables', serialize($metas_vars)); } // tout recompiler cout_exec_redirige("cmd=descrip&outil={$_GET[outil]}#cs_infos"); } // reset de l'affichage if($cmd=='showall'){ spip_log("Reset de tous les affichages du Couteau Suisse par l'auteur id=$connect_id_auteur"); effacer_meta('tweaks_caches'); cout_exec_redirige(); } // afficher la description d'un outil ? $afficher_outil = ($cmd=='descrip' OR $cmd=='switch')?$_GET['outil']:''; // initialisation generale forcee : recuperation de $outils; cs_initialisation(true, $cmd!='noinclude'); cs_installe_outils(); // mise a jour des donnees si envoi via formulaire // sinon fait une passe de verif sur les outils if($cmd=='switch' OR $cmd=='hide'){ enregistre_modif_outils($cmd); cout_exec_redirige(strlen($_GET['outil'])?"cmd=descrip&outil={$_GET[outil]}#cs_infos":''); } // else // verif_outils(); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('couteauprive:titre'), "configuration", 'couteau_suisse'); // pour la version du plugin include_spip('inc/plugin'); if(isset($GLOBALS['meta']['plugin'])) { $t = unserialize($GLOBALS['meta']['plugin']); $dir = $t['COUTEAU_SUISSE']['dir']; $dir_type = $t['COUTEAU_SUISSE']['dir_type']; $bt_dir = $t['BARRETYPOENRICHIE']['dir']; $bt_version = $t['BARRETYPOENRICHIE']['version']; } if(!strlen($dir)) $dir = 'couteau_suisse'; if(!strlen($bt_dir)) $bt_dir = 'barre_typo_v2'; $get_infos = defined('_SPIP20100')?charger_fonction('get_infos','plugins'):'plugin_get_infos'; if (isset($dir_type)) { $t = $get_infos($dir, false, constant($dir_type)); } else { $t = $get_infos($dir); } $cs_version_base = $t['version_base']; $cs_version = $t['version']; // mises a jour eventuelles de la base installe_un_plugin($dir, $t, $dir_type); unset($t); if(!strlen($bt_version)) { $bt_version = $get_infos($bt_dir); $bt_version = $bt_version['version']; } $cs_revision = ((lire_fichier(_DIR_PLUGIN_COUTEAU_SUISSE.'svn.revision',$t)) && (preg_match(',<revision>(\d+)</revision>,',$t,$r))) ?'<br/>'._T('couteauprive:version_revision', array('revision'=>$r[1])):""; include_spip('public/assembler'); echo recuperer_fond('exec/admin_couteau_suisse_head', array( 'force' => in_array(_request('var_mode'), array('calcul', 'recalcul'))?'oui':null, 'cs_version' => $cs_version, 'exec' => _request('exec'), )); echo "<br /><br /><br />"; gros_titre(_T('couteauprive:titre'), '', false); echo barre_onglets("configuration", 'couteau_suisse'); echo '<div style="font-size:85%">'; // verification d'une base venant de SPIP 1.8 $res = spip_query("DESCRIBE spip_meta valeur"); $resultat = function_exists('spip_fetch_array')?spip_fetch_array($res):sql_fetch($res); if($resultat['Type']!='text') echo "<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 '$resultat[Type]' au lieu de 'text'.</p>"; // verification de la barre typo V2 $mini = '2.5.3'; if(strlen($bt_version) and (version_compare($bt_version,$mini,'<'))) echo "<p>"._T('couteauprive:erreur:bt', array('version'=>$bt_version, 'mini'=>$mini))."</p>"; echo "<script type=\"text/javascript\"><!-- if(!window.jQuery) document.write('".str_replace('/','\/',addslashes(propre('<p>'._T('couteauprive:erreur:jquery').'</p>')))."'); //--></script>"; echo '</div>'; // chargement des outils include_spip('inc/cs_outils'); list($outils_affiches_actifs, $liste_outils) = liste_outils(); // cadre de gauche echo debut_gauche('', true); // pour la liste des docs sur spip-contrib $contribs = isset($GLOBALS['meta']['tweaks_contribs'])?unserialize($GLOBALS['meta']['tweaks_contribs']):array(); foreach($contribs as $i=>$v) $contribs[$i] = preg_replace_callback('/@@(.*?)@@/', 'cs_couper_25', $v); sort($contribs); $aide = ''; if(isset($GLOBALS['cs_installer'])) foreach(array_keys($GLOBALS['cs_installer']) as $pack) $aide .= "\n_ " . _T('couteauprive:pack_du', array('pack'=>"{[{$pack}|"._T('couteauprive:pack_installe').'->' . generer_url_ecrire($exec,'cmd=install&pack='.urlencode($pack)) . ']}')); // si le plugin est installe par procedure automatique, on permet la mise a jour directe (SPIP >= 2.0) $arg_chargeur = $GLOBALS['spip_version_base']>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2 $form_update = preg_match(',plugins/auto/couteau_suisse/$,',_DIR_PLUGIN_COUTEAU_SUISSE)? "<input type='hidden' name='$arg_chargeur' value='http://files.spip.org/spip-zone/couteau_suisse.zip' />" . "<br/><div class='cs_sobre'><input type='submit' value='• " . attribut_html(_T('couteauprive:version_update')) . "' class='cs_sobre' title='" . attribut_html(_T('couteauprive:version_update_title')) . "' /></div>" :""; // un lien si le plugin plugin "Telechargeur" est present (SPIP < 2.0) if(!strlen($form_update) && defined('_DIR_PLUGIN_CHARGEUR')) $form_update = "<br/>• <a title='" . attribut_html(_T('couteauprive:version_update_chargeur_title')) . "' href='../spip.php?action=charger&plugin=couteau_suisse&url_retour=".urlencode(generer_url_ecrire('admin_couteau_suisse'))."'>"._T('couteauprive:version_update_chargeur').'</a>'; // compilation du bandeau gauche $aide = _T('couteauprive:help2', array( 'version' => $cs_version.$cs_revision.'<br/>'. (defined('_CS_PAS_DE_DISTANT')?'('._T('couteauprive:version_distante_off').')':'<span class="cs_version">'._T('couteauprive:version_distante').'</span>') )) . $form_update . '<br/>• ['._T('couteauprive:pack_titre') . '|' . _T('couteauprive:pack_alt') . '->' . generer_url_ecrire($exec,'cmd=pack#cs_infos') . "]\n\n" . _T('couteauprive:help3', array( 'reset' => generer_url_ecrire($exec,'cmd=resetall'), 'hide' => generer_url_ecrire($exec,'cmd=showall'), 'contribs' => join('', $contribs), 'install' => $aide )); if(function_exists('redirige_action_post')) $aide = redirige_action_post('charger_plugin', '', 'admin_couteau_suisse', '', $aide); // SPIP >= 2.0 $aide = '<div class="cs_aide">'._T('couteauprive:help')."\n\n$aide</div>"; echo debut_boite_info(true), propre($aide), fin_boite_info(true); $aide = cs_aide_raccourcis(); if(strlen($aide)) echo debut_boite_info(true), $aide, fin_boite_info(true); $aide = cs_aide_pipelines($outils_affiches_actifs); if(strlen($aide)) echo debut_boite_info(true), $aide, fin_boite_info(true); echo pipeline('affiche_gauche',array('args'=>array('exec'=>$exec),'data'=>'')); echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>$exec),'data'=>'')), debut_droite('', true), debut_cadre_trait_couleur(find_in_path('img/couteau-24.gif'),true,'',' '._T('couteauprive:outils_liste')), _T('couteauprive:outil_intro'), "\n<table border='0' cellspacing='0' cellpadding='5' style='width:100%;'><tr><td class='sansserif'>"; $_GET['source'] = $exec; echo '<div class="conteneur">', $liste_outils, '</div><br class="conteneur" /><div class="cs_patience"><br />'.http_img_pack('searching.gif','*','').' ...</div>'; flush(); echo '<div class="conteneur"><div id="cs_infos" class="cs_infos">', $cmd=='pack'?cs_description_pack():description_outil2($afficher_outil), '</div><script type="text/javascript"><!-- var cs_descripted = "', $afficher_outil, '"; document.write("<style type=\'text/css\'>#csjs{display:none;}<\/style>"); //--></script><div id="csjs" style="color:red;"><br/>', _T('couteauprive:erreur:js'),'</div> <noscript><style type="text/css">#csjs{display:none;}</style><div style="color:red;"><br/>', _T('couteauprive:erreur:nojs'), $_GET['modif']=='oui'?'<br/>'._T('couteauprive:vars_modifiees').'.':'','</div></noscript>', '</div></td></tr></table>', '<style type="text/css">.cs_patience{display:none;}</style>', fin_cadre_trait_couleur(true), pipeline('affiche_milieu',array('args'=>array('exec'=>$exec),'data'=>'')), fin_gauche(), fin_page(); cs_log(" FIN : exec_admin_couteau_suisse()"); }
<?php #-----------------------------------------------------# # Plugin : Couteau Suisse - Licence : GPL # # Auteur : Patrice Vanneufville, 2006 # # Contact : patrice¡.!vanneufville¡@!laposte¡.!net # # Infos : http://www.spip-contrib.net/?article2166 # #-----------------------------------------------------# if(!defined("_ECRIRE_INC_VERSION")) return; // Noter : // outils/mon_outil.php : inclus par les pipelines de l'outil // outils/mon_outil_options.php : inclus par cout_options.php // outils/mon_outil_fonctions.php : inclus par cout_fonctions.php cs_log("inclusion de config_outils.php"); //-----------------------------------------------------------------------------// // options // //-----------------------------------------------------------------------------// /* add_outil( array( 'id' => 'revision_nbsp', 'code:options' => '$GLOBALS["activer_revision_nbsp"] = true; $GLOBALS["test_i18n"] = true ;', 'categorie' => 'admin', )); */ add_variables( array( 'nom' => 'alinea', 'check' => 'couteauprive:autobr_oui',
// Attention, ici il se peut que le plugin ne soit pas initialise (cas des .js/.css par exemple) if (!defined("_ECRIRE_INC_VERSION")) return; // pour voir les erreurs ? if (defined('_CS_REPORT')) error_reporting(E_ALL ^ E_NOTICE); elseif (defined('_CS_REPORTALL')) error_reporting(E_ALL); $GLOBALS['cs_fonctions_essai'] = 1; //if(defined('_LOG_CS')) cs_log("INIT : cout_fonctions ($GLOBALS[cs_spip_options]/$GLOBALS[cs_options]/$GLOBALS[cs_fonctions]/$GLOBALS[cs_init])"); // plugin initialise si cout_options est OK (fin de compilation par exemple) if(!$GLOBALS['cs_init']) { if($GLOBALS['cs_options']) { if(!$GLOBALS['cs_fonctions']) { // inclusion des fonctions pre-compilees if(defined('_LOG_CS')) cs_log("INCL : "._DIR_CS_TMP.'mes_fonctions.php'); @include(_DIR_CS_TMP.'mes_fonctions.php'); //if(defined('_LOG_CS')) cs_log("FIN INCL : "._DIR_CS_TMP.'mes_fonctions.php'); } // else cs_log(' FIN : cout_fonctions deja inclus'); } else { $cs_log = function_exists('cs_log') ? 'cs_log' : 'spip_log'; $cs_log('ESSAI : cout_fonctions, mais cout_options n\'est pas inclus'); } } else { $cs_log = function_exists('cs_log') ? 'cs_log' : 'spip_log'; $cs_log('ESSAI : cout_fonctions, mais initialisation en cours'); } // raccourci pour le JavaScript function cs_javascript($chaine) { return unicode_to_javascript(addslashes(html2unicode($chaine))); }
function cs_header_hit(&$flux, $type, $suffixe='') { $f = "header$suffixe.$type"; $nom = sous_repertoire(_DIR_VAR,'couteau-suisse') . $f; $tmp = _DIR_CS_TMP . $f; if(!file_exists($tmp) || !file_exists($nom) || $GLOBALS['var_mode']=='recalcul') { if (lire_fichier(_DIR_CS_TMP."header.$type.html", $t) && strlen($t)) { if(strpos($t, '<cs_html>')!==false) $t = preg_replace_callback(',<cs_html>(.*)</cs_html>,Ums', 'cs_compile_header_callback', $t); ecrire_fichier($nom, $t, true); ecrire_fichier($tmp, $t, true); } else { if(defined('_LOG_CS')) cs_log(" -- fichier $fo illisible. hit non construit"); return; } } switch($type) { case 'js': $flux .= '<script src="'.$nom.'" type="text/javascript"></script>'; break; case 'css': include_spip('inc/filtres'); $flux .= '<link rel="stylesheet" href="'.direction_css($nom).'" type="text/css" media="all" />'; break; } }