uawdijnntqw1x1x1
IP : 216.73.216.249
Hostname : webm001.cluster110.gra.hosting.ovh.net
Kernel : Linux webm001.cluster110.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
etiennec
/
www
/
oldsite
/
repertoires_photos
/
..
/
tmp
/
couteau-suisse
/
mes_fonctions.php
/
/
<?php // Code d'inclusion pour le plugin 'Couteau Suisse' ++$GLOBALS['cs_fonctions']; // Ce fichier contient des fonctions toujours compilees dans tmp/couteau-suisse/mes_fonctions.php if (!defined("_ECRIRE_INC_VERSION")) return; // compatibilite SPIP < 2.00 if(!defined('_SPIP19300')) { // #VAL{x} renvoie 'x' (permet d'appliquer un filtre a une chaine) // Attention #VAL{1,2} renvoie '1', indiquer #VAL{'1,2'} function balise_VAL($p){ $p->code = interprete_argument_balise(1,$p); if (!strlen($p->code)) $p->code = "''"; $p->interdire_scripts = false; return $p; } if(!function_exists('oui')) { function oui($code) { return $code?' ':''; } } if(!function_exists('non')) { function non($code) { return $code?'':' '; } } } // fonction appelant une liste de fonctions qui permettent de nettoyer un texte original de ses raccourcis indesirables function cs_introduire($texte) { // liste de filtres qui sert a la balise #INTRODUCTION if(!is_array($GLOBALS['cs_introduire'])) return $texte; $liste = array_unique($GLOBALS['cs_introduire']); foreach($liste as $f) if (function_exists($f)) $texte = $f($texte); return $texte; } // Fonction propre() sans paragraphage function cs_propre($texte) { include_spip('inc/texte'); $mem = $GLOBALS['toujours_paragrapher']; $GLOBALS['toujours_paragrapher'] = false; $texte = propre($texte); $GLOBALS['toujours_paragrapher'] = $mem; return $texte; } // Filtre creant un lien <a> sur un texte // Exemple d'utilisation : [(#EMAIL*|cs_lien{#NOM})] function cs_lien($lien, $texte='') { if(!$lien) return $texte; return cs_propre("[{$texte}->{$lien}]"); } // filtre pour ajouter un <span> autour d'un texte function cs_span($texte, $attr='') { return "<span $attr>$texte</span>"; } // Controle (basique!) des 3 balises usuelles p|div|span eventuellement coupees // Attention : simple traitement pour des balises non imbriquees function cs_safebalises($texte) { $texte = trim($texte); // ouvre/supprime la premiere balise trouvee fermee (attention aux modeles SPIP) if(preg_match(',^(.*)</([a-z]+)>,Ums', $texte, $m) && !preg_match(",<$m[2][ >],", $m[1])) $texte = strlen($m[1])?"<$m[2]>$texte":trim(substr($texte, strlen($m[2])+3)); // referme/supprime la derniere balise laissee ouverte (attention aux modeles SPIP) if(preg_match(',^(.*)[ >]([a-z]+)<,Ums', $rev = strrev($texte), $m) && !preg_match(",>$m[2]/<,", $m[1])) $texte = strrev(strlen($m[1])?">$m[2]/<$rev":trim(substr($rev, strlen($m[2])+2))); // balises <p|span|div> a traiter foreach(array('span', 'div', 'p') as $b) { // ouvrante manquante if(($fin = strpos($texte, "</$b>")) !== false) if(!preg_match(",<{$b}[ >],", substr($texte, 0, $fin))) $texte = "<$b>$texte"; // fermante manquante $texte = strrev($texte); if(preg_match(',[ >]'.strrev("<{$b}").',', $texte, $reg)) { $fin = strpos(substr($texte, 0, $deb = strpos($texte, $reg[0])), strrev("</$b>")); if($fin===false || $fin>$deb) $texte = strrev("</$b>").$texte; } $texte = strrev($texte); } return $texte; } // fonction de suppression de notes. Utile pour #CS_SOMMAIRE ou #CS_DECOUPE function cs_supprime_notes($texte) { return preg_replace(', *\[\[(.*?)\]\],msS', '', $texte); } // filtre appliquant les traitements SPIP d'un champ (et eventuellement d'un type d'objet) sur un texte // (voir la fonction champs_traitements($p) dans : public/references.php) // => permet d'utiliser les balises etoilees : #TEXTE*|mon_filtre|cs_traitements{TEXTE,articles} // ce mecanisme est a preferer au traditionnel #TEXTE*|mon_filtre|propre // cs_traitements() consulte simplement la globale $table_des_traitements et applique le traitement adequat // $exclusions est une chaine ou un tableau de filtres a exclure du traitement function cs_traitements($texte, $nom_champ='NULL', $type_objet='NULL', $exclusions=NULL) { global $table_des_traitements; if(!isset($table_des_traitements[$nom_champ])) return $texte; $ps = $table_des_traitements[$nom_champ]; if(is_array($ps)) $ps = $ps[isset($ps[$type_objet]) ? $type_objet : 0]; if(!$ps) return $texte; // retirer les filtres a exclure if($exclusions!==NULL) $ps = str_replace($exclusions, 'cs_noop', $ps); // remplacer le placeholder %s par le texte fourni eval('$texte=' . str_replace('%s', '$texte', $ps) . ';'); return $texte; } function cs_noop($t='',$a=NULL,$b=NULL,$c=NULL) { return $t; } // renvoie un champ d'un objet en base function cs_champ_sql($id, $champ='texte', $objet='article') { // Utiliser la bonne requete en fonction de la version de SPIP if(function_exists('sql_getfetsel')) { // SPIP 2.0 // TODO : fonctions SPIP pour trouver la table et l'id_objet if($r = sql_getfetsel($champ, 'spip_'.$objet.'s', 'id_'.$objet.'='.intval($id))) return $r; } else { if($r = spip_query('SELECT '.$champ.' FROM spip_'.$objet.'s WHERE id_'.$objet.'='.intval($id))) // s'il existe un champ, on le retourne if($row = spip_fetch_array($r)) return $row[$champ]; } // sinon rien ! return ''; } @define('_sommaire_NB_TITRES_MINI', 2); @define('_sommaire_SANS_FOND', '[!fond]'); // aide le Couteau Suisse a calculer la balise #INTRODUCTION $GLOBALS['cs_introduire'][] = 'sommaire_nettoyer_raccourcis'; // renvoie le sommaire d'une page d'article // $page=false reinitialise le compteur interne des ancres function sommaire_d_une_page(&$texte, &$nbh3, $page=0, $num_pages=0) { static $index = 0; if($page===false) $index = 0; static $self = NULL; if(!isset($self)) $self = str_replace('&', '&', nettoyer_uri());//self();//$GLOBALS['REQUEST_URI']; if($page===false) return; // trouver quel <hx> est utilise $root = $niveau = $match = preg_match(',<h(\d),',$GLOBALS['debut_intertitre'],$regs)?$regs[1]:'3'; @define('_sommaire_NB_CARACTERES', 30); @define('_sommaire_PROFONDEUR', 1); if(_sommaire_PROFONDEUR>1) $match = $match .'-' . ($match+_sommaire_PROFONDEUR-1); // traitement des intertitres <hx> preg_match_all(",(<h([$match])[^>]*)>(.*)</h\\2>,Umsi", $texte, $regs); $nbh3 += count($regs[0]); $pos = 0; $sommaire = ''; // calcul de la page $suffixe = $page?_T('couteau:sommaire_page', array('page'=>$page)):''; $fct_lien_retour = function_exists('sommaire_lien_retour')?'sommaire_lien_retour':'sommaire_lien_retour_dist'; $fct_id_ancre = defined('_sommaire_JOLIES_ANCRES')?'sommaire_id_ancre_ex' :(function_exists('sommaire_id_ancre')?'sommaire_id_ancre':'sommaire_id_ancre_dist'); $nb = count($regs[0]); for($i=0;$i<$nb;$i++,$index++){ $w = &$regs[0][$i]; $h = &$regs[1][$i]; $n = &$regs[2][$i]; if (($pos2 = strpos($texte, $w, $pos))!==false) { $t = $regs[3][$i]; // calcul de l'ancre, $t peut etre modifie $ancre = $fct_id_ancre($index, $t, $n); $id = " id=\"$ancre\">"; //$titre = preg_replace(',^<p[^>]*>(.*)</p>$,Umsi', '\\1', trim($t)); // ancre 'retour au sommaire', sauf : // si on imprime, ou si les blocs depliables utilisent h{$n}... $titre = (defined('_CS_PRINT') OR (strpos($w, 'blocs_titre')!==false)) ?$t//$titre :$fct_lien_retour($self, $t);//$titre); $texte = substr($texte, 0, $pos2) . $h . $id . $titre . substr($texte, $pos2 + strlen($h)+1 + strlen($regs[3][$i])); $pos = $pos2 + strlen($id) + strlen($w); $brut = sommaire_nettoyer_titre($t); // pas trop long quand meme... $lien = cs_propre(couper($brut, _sommaire_NB_CARACTERES)); // eviter une ponctuation a la fin, surtout si la page est precisee $lien = preg_replace('/( |\s)*'.($page?'[!?,;.:]+$/':'[,;.:]+$/'), '', $lien); $titre = attribut_html(couper($brut, 100)); // si la decoupe en page est active... $artpage = (function_exists('decoupe_url') && (strlen(_request('artpage')) || $page>1) ) ?decoupe_url($self, $page, $num_pages):$self; $artpage = "\n<li><a $st title=\"$titre\" href=\"{$artpage}#$ancre\">$lien</a>$suffixe"; if($niveau==$n) $sommaire .= ($sommaire?'</li>':'').$artpage; elseif($niveau<$n) $sommaire .= "\n<ul>".$artpage; else $sommaire .= '</li></ul></li>'.$artpage; $niveau = $n; } } return $sommaire?$sommaire.'</li>'.($niveau!=$root?'</ul>':''):''; } function sommaire_nettoyer_titre($t) { // pas de notes $brut = preg_replace(',\[<a href=["\']#nb.*?</a>\],','', echappe_retour($t,'CS')); // pas de glossaire if(function_exists('cs_retire_glossaire')) $brut = cs_retire_glossaire($brut); // texte brut $brut2 = trim(preg_replace(',[\n\r]+,',' ',textebrut($brut))); // cas des intertitres en image_typo if(!strlen($brut2)) $brut2 = trim(extraire_attribut($brut, 'alt')); return $brut2; } /* Fonction surchargeable qui reconstruit les titres de la page en ajoutant une ancre de retour au sommaire. La fonction de surcharge a placer dans config/mes_options.php est : sommaire_lien_retour($self, $titre) Exemple sans lien de retour : function sommaire_lien_retour($self, $titre) { return $titre; } */ function sommaire_lien_retour_dist($self, $titre) { static $haut = NULL; if(!isset($haut)) $haut = '<a title="'._T('couteau:sommaire_titre').'" href="'.$self.'#outil_sommaire" class="sommaire_ancre"> </a>'; return $haut . $titre; } /* Fonction surchargeable qui calcule l'ancre d'un intertitre La fonction de surcharge a placer dans config/mes_options.php est : sommaire_id_ancre($index, &$titre, $hn) $titre peut etre modifie par cette fonction : utile pour traiter le format {{{Mon titre<mon_ancre>}}} */ function sommaire_id_ancre_dist($index, &$titre, $hn) { return 'outil_sommaire_'.$index; } // Surcharge compatible avec les intertitres en image : jolies ancres function sommaire_id_ancre_ex($index, &$titre, $hn) { // traiter le format {{{Mon titre<mon_ancre>}}} (ou alt='Mon titre<mon_ancre>') if(preg_match(',<(\w+)>$,', $titre, $r) || preg_match(',<(\w+)>(?=\'),', $titre, $r)) { $titre = str_replace($r[0], '', $titre); return $r[1]; } // calculer les ancres d'apres le titre $a = strtolower(translitteration(sommaire_nettoyer_titre($titre))); $a = trim(preg_replace(',[^a-z0-9_]+,', '_', $a), '_'); return strlen($a)>2?$a:"sommaire_$index"; } // fonction appellee sur les parties du textes non comprises entre les balises : html|code|cadre|frame|script|acronym|cite function sommaire_d_article_rempl($texte0, $sommaire_seul=false) { // pour sommaire_nettoyer_raccourcis() include_spip('outils/sommaire'); // si le sommaire est malvenu ou s'il n'y a pas de balise <hx>, alors on laisse tomber $inserer_sommaire = defined('_sommaire_AUTOMATIQUE') ?strpos($texte0, _CS_SANS_SOMMAIRE)===false :strpos($texte0, _CS_AVEC_SOMMAIRE)!==false; if (!$inserer_sommaire || strpos($texte0, '<h')===false) return $sommaire_seul?'':sommaire_nettoyer_raccourcis($texte0); // on retire les raccourcis du texte $texte = sommaire_nettoyer_raccourcis($texte0); // on masque les onglets s'il y en a if(defined('_onglets_FIN')) $texte = preg_replace_callback(',<div class="onglets_bloc_initial.*'._onglets_FIN.',Ums', create_function('$matches','return cs_code_echappement($matches[0], \'SOMM\');'), $texte); // et la, on y va... $sommaire = ''; $i = 1; $nbh3 = 0; // reinitialisation de l'index interne de la fonction sommaire_d_une_page($texte, $nbh3, false); // couplage avec l'outil 'decoupe_article' if(defined('_decoupe_SEPARATEUR') && !defined('_CS_PRINT')) { $pages = explode(_decoupe_SEPARATEUR, $texte); if (($num_page=count($pages)) == 1) $sommaire = sommaire_d_une_page($texte, $nbh3); else { foreach($pages as $p=>$page) { $sommaire .= sommaire_d_une_page($page, $nbh3, $i++, $num_page); $pages[$p] = $page; } $texte = join(_decoupe_SEPARATEUR, $pages); } } else $sommaire = sommaire_d_une_page($texte, $nbh3); if(!strlen($sommaire) || $nbh3<_sommaire_NB_TITRES_MINI) return $sommaire_seul?'':sommaire_nettoyer_raccourcis($texte0); // calcul du sommaire include_spip('public/assembler'); $sommaire = recuperer_fond('fonds/sommaire', array( 'sommaire'=>$sommaire, 'fond_css'=>strpos($texte0, _sommaire_SANS_FOND)===false ?'avec':'sans', )); // si on ne veut que le sommaire, on renvoie le sommaire // sinon, on n'insere ce sommaire en tete de texte que si la balise #CS_SOMMAIRE n'est pas activee if($sommaire_seul) return $sommaire; if(defined('_onglets_FIN')) $texte = echappe_retour($texte, 'SOMM'); if(defined('_sommaire_BALISE')) return $texte; return _sommaire_REM.$sommaire._sommaire_REM.$texte; } // fonction appelee par le traitement de #TEXTE/articles function sommaire_d_article($texte) { // s'il n'y a aucun intertitre, on ne fait rien // si la balise est utilisee, il faut quand meme inserer les ancres de retour if((strpos($texte, '<h')===false)) return $texte; return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite|onglets|table', 'sommaire_d_article_rempl', $texte, false); } // fonction appelee par le traitement post_propre de #CS_SOMMAIRE function sommaire_d_article_balise($texte) { // si la balise n'est pas utilisee ou s'il n'y a aucun intertitre, on ne fait rien if(!defined('_sommaire_BALISE') || (strpos($texte, '<h')===false)) return ''; return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite|onglets|table', 'sommaire_d_article_rempl', $texte, true); } // si on veut la balise #CS_SOMMAIRE if (defined('_sommaire_BALISE')) { // fonction traitant la balise function balise_CS_SOMMAIRE_dist($p) { // id de l'article a trouver pour retourner son texte $texte = ($v = interprete_argument_balise(1,$p))!==NULL ? 'cs_champ_sql('.$v.')' : champ_sql('texte', $p); if ($p->type_requete == 'articles' || $v!==NULL) { $p->code = 'cs_supprime_notes('.$texte.')'; } else { $p->code = "''"; } $p->interdire_scripts = true; return $p; } } ?>
/home/etiennec/www/oldsite/repertoires_photos/../tmp/couteau-suisse/mes_fonctions.php