"; } function cs_preg_quote(&$item) { $item = preg_quote($item, ','); } // lit ecrit les metas et initialise $cs_metas_pipelines // cette fonction est appellee par couteau_suisse_options a chaque hit de la page function cs_initialisation($forcer=false, $init_includes=true) { global $cs_metas_pipelines, $metas_outils; static $deja_passe_ici = 0; if($log=defined('_LOG_CS')) { $rand = sprintf('[#%04x] ', rand()); if(!$deja_passe_ici) { $mysql = function_exists('mysql_get_client_info')?' - MYSQL v'.mysql_get_client_info():''; cs_log("#### 1er PASSAGE $rand################################# - \$forcer = ".intval($forcer) . "\n{$rand}PHP v".phpversion()."$mysql - base SPIP v$GLOBALS[spip_version_base] - code SPIP v$GLOBALS[spip_version_code]"); } } $deja_passe_ici++; if($log) cs_log("{$rand}cs_initialisation($forcer) : Passage #$deja_passe_ici"); // si les metas ne sont pas lus, on les lit if (isset($GLOBALS['meta']['tweaks_pipelines'])) { $cs_metas_pipelines = unserialize($GLOBALS['meta']['tweaks_pipelines']); if($log) cs_log("$rand -- cs_metas_pipelines = ".(is_array($cs_metas_pipelines)?join(', ',array_keys($cs_metas_pipelines)):'')); // liste des actifs & definition des constantes attestant qu'un outil est bien actif : define('_CS_monoutil', 'oui'); $liste = array(); foreach($metas_outils as $nom=>$o) if(isset($o['actif']) && $o['actif']) { $liste[]=$nom; @define('_CS_'.$nom, 'oui'); } $liste2 = join(', ', $liste); if($log) cs_log("$rand -- ".count($liste).' outil(s) actif(s)'.(strlen($liste2)?" = ".$liste2:'')); // Vanter notre art de la compilation... // La globale $spip_header_silencieux permet de rendre le header absent pour raisons de securite if (!headers_sent() && (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux'])) @header('X-Outils-CS: '.$liste2); if($log) cs_log($rand.($forcer?"\$forcer = true":"cs_initialisation($forcer) : Sortie car les metas sont presents")); // Les pipelines sont en meta, tout va bien on peut partir d'ici. if (!$forcer) return; } // ici on commence l'initialisation de tous les outils $GLOBALS['cs_init'] = 1; global $outils, $metas_vars, $metas_outils; include_spip('inc/meta'); include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); // verifier que tous les outils actives sont bien presents foreach($metas_outils as $nom=>$o) if(isset($o['actif']) && $o['actif'] && !isset($outils[$nom])) unset($metas_outils[$nom]); ecrire_meta('tweaks_actifs', serialize($metas_outils)); ecrire_metas(); // stocker les types de variables declarees global $cs_variables; $metas_vars['_chaines'] = $cs_variables['_chaines']; $metas_vars['_nombres'] = $cs_variables['_nombres']; // au cas ou un outil manipule des variables $description_outil = charger_fonction('description_outil', 'inc'); // completer les variables manquantes et incorporer l'activite lue dans les metas if($log) cs_log("$rand -- foreach(\$outils) : cs_initialisation_d_un_outil()"); // initialiser chaque outil include_spip('inc/cs_outils'); foreach($outils as $outil) cs_initialisation_d_un_outil($id = $outil['id'], $description_outil, false); // installer $cs_metas_pipelines $cs_metas_pipelines = array(); if($log) cs_log("$rand -- cs_initialise_includes()... couteau_suisse_fonctions.php sera peut-etre inclus."); // creer les includes (config/mes_options, mes_options et mes_fonctions) et le fichier de controle pipelines.php if($init_includes) cs_initialise_includes(count($metas_outils)); // verifier le fichier d'options _FILE_OPTIONS (ecrire/mes_options.php ou config/mes_options.php) // De'sactive' par de'faut. Activer l'outil "Comportements du Couteau Suisse" pour ge'rer cette option. cs_verif_FILE_OPTIONS($metas_outils['cs_comportement']['actif'] && $metas_vars['spip_options_on'], true); // sauver la configuration cs_sauve_configuration(); // en metas : outils actifs if($log) cs_log("$rand -- ecriture metas"); ecrire_meta('tweaks_actifs', serialize($metas_outils)); // en metas : variables d'outils ecrire_meta('tweaks_variables', serialize($metas_vars)); // en metas : code inline pour les pipelines, mes_options et mes_fonctions; ecrire_meta('tweaks_pipelines', serialize($cs_metas_pipelines)); ecrire_metas(); $GLOBALS['cs_init'] = 0; if($log) cs_log("{$rand}cs_initialisation($forcer) : Sortie"); } /* function qui determine si $texte est de type Block (true) ou Inline (false) _BALISES_BLOCS est defini dans texte.php : define('_BALISES_BLOCS', 'div|pre|ul|ol|li|blockquote|h[1-6r]|' .'t(able|[rdh]|body|foot|extarea)|' .'form|object|center|marquee|address|' .'d[ltd]|script|noscript|map|button|fieldset'); */ function cs_block($texte) { return preg_match(',(\n\n|\r\n\r\n|\r\r),', $texte) || preg_match(',[:space:]],iS', $texte); } // fonction callback pour cs_echappe_balises function cs_echappe_html_callback($matches) { return _CS_HTMLA.cs_code_echappement($matches[1], 'CS'); } // evite les transformations typo dans les balises $balises // par exemple pour , , , ,