[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / cout_fonctions.php
1 <?php
2 // Ce fichier contient des fonctions toujours compilees dans tmp/couteau-suisse/mes_fonctions.php
3 if (!defined("_ECRIRE_INC_VERSION")) return;
4
5 // compatibilite SPIP < 2.00
6 if(!defined('_SPIP19300')) {
7 // #VAL{x} renvoie 'x' (permet d'appliquer un filtre a une chaine)
8 // Attention #VAL{1,2} renvoie '1', indiquer #VAL{'1,2'}
9 function balise_VAL($p){
10 $p->code = interprete_argument_balise(1,$p);
11 if (!strlen($p->code)) $p->code = "''";
12 $p->interdire_scripts = false;
13 return $p;
14 }
15 if(!function_exists('oui')) { function oui($code) { return $code?' ':''; } }
16 if(!function_exists('non')) { function non($code) { return $code?'':' '; } }
17 }
18
19 // fonction appelant une liste de fonctions qui permettent de nettoyer un texte original de ses raccourcis indesirables
20 function cs_introduire($texte) {
21 // liste de filtres qui sert a la balise #INTRODUCTION
22 if(!is_array($GLOBALS['cs_introduire'])) return $texte;
23 $liste = array_unique($GLOBALS['cs_introduire']);
24 foreach($liste as $f)
25 if (function_exists($f)) $texte = $f($texte);
26 return $texte;
27 }
28
29 // Fonction propre() sans paragraphage
30 function cs_propre($texte) {
31 include_spip('inc/texte');
32 return trim(PtoBR(propre($texte)));
33 }
34
35 // Filtre creant un lien <a> sur un texte
36 // Exemple d'utilisation : [(#EMAIL*|cs_lien{#NOM})]
37 function cs_lien($lien, $texte='') {
38 if(!$lien) return $texte;
39 return cs_propre("[{$texte}->{$lien}]");
40 }
41
42 // filtre pour ajouter un <span> autour d'un texte
43 function cs_span($texte, $attr='') { return "<span $attr>$texte</span>"; }
44
45 // Controle (basique!) des 3 balises usuelles p|div|span eventuellement coupees
46 // Attention : simple traitement pour des balises non imbriquees
47 function cs_safebalises($texte) {
48 $texte = trim($texte);
49 // ouvre/supprime la premiere balise trouvee fermee (attention aux modeles SPIP)
50 if(preg_match(',^(.*)</([a-z]+)>,Ums', $texte, $m) && !preg_match(",<$m[2][ >],", $m[1]))
51 $texte = strlen($m[1])?"<$m[2]>$texte":trim(substr($texte, strlen($m[2])+3));
52 // referme/supprime la derniere balise laissee ouverte (attention aux modeles SPIP)
53 if(preg_match(',^(.*)[ >]([a-z]+)<,Ums', $rev = strrev($texte), $m) && !preg_match(",>$m[2]/<,", $m[1]))
54 $texte = strrev(strlen($m[1])?">$m[2]/<$rev":trim(substr($rev, strlen($m[2])+2)));
55 // balises <p|span|div> a traiter
56 foreach(array('span', 'div', 'p') as $b) {
57 // ouvrante manquante
58 if(($fin = strpos($texte, "</$b>")) !== false)
59 if(!preg_match(",<{$b}[ >],", substr($texte, 0, $fin)))
60 $texte = "<$b>$texte";
61 // fermante manquante
62 $texte = strrev($texte);
63 if(preg_match(',[ >]'.strrev("<{$b}").',', $texte, $reg)) {
64 $fin = strpos(substr($texte, 0, $deb = strpos($texte, $reg[0])), strrev("</$b>"));
65 if($fin===false || $fin>$deb) $texte = strrev("</$b>").$texte;
66 }
67 $texte = strrev($texte);
68 }
69 return $texte;
70 }
71
72 // fonction de suppression de notes. Utile pour #CS_SOMMAIRE ou #CS_DECOUPE
73 function cs_supprime_notes($texte) {
74 return preg_replace(', *\[\[(.*?)\]\],msS', '', $texte);
75 }
76
77 // filtre appliquant les traitements SPIP d'un champ (et eventuellement d'un type d'objet) sur un texte
78 // (voir la fonction champs_traitements($p) dans : public/references.php)
79 // => permet d'utiliser les balises etoilees : #TEXTE*|mon_filtre|cs_traitements{TEXTE,articles}
80 // ce mecanisme est a preferer au traditionnel #TEXTE*|mon_filtre|propre
81 // cs_traitements() consulte simplement la globale $table_des_traitements et applique le traitement adequat
82 // $exclusions est une chaine ou un tableau de filtres a exclure du traitement
83 function cs_traitements($texte, $nom_champ='NULL', $type_objet='NULL', $exclusions=NULL) {
84 global $table_des_traitements;
85 if(!isset($table_des_traitements[$nom_champ])) return $texte;
86 $ps = $table_des_traitements[$nom_champ];
87 if(is_array($ps)) $ps = $ps[isset($ps[$type_objet]) ? $type_objet : 0];
88 if(!$ps) return $texte;
89 // retirer les filtres a exclure
90 if($exclusions!==NULL) $ps = str_replace($exclusions, 'cs_noop', $ps);
91 // remplacer le placeholder %s par le texte fourni
92 eval('$texte=' . str_replace('%s', '$texte', $ps) . ';');
93 return $texte;
94 }
95 function cs_noop($t='',$a=NULL,$b=NULL,$c=NULL) { return $t; }
96
97 // liste des docs sur spip-contrib (outils actifs)
98 function cs_liste_contribs($coupe = 999, $join = "</li><li>") {
99 global $metas_outils;
100 $contribs = array();
101 foreach($metas_outils as $o=>$v) if(isset($v['contrib']) && isset($v['actif']) && $v['actif'])
102 $contribs[] = '[' . couper(couteauprive_T($o.':nom'), $coupe) . '->' . (is_numeric($v['contrib']) ?_URL_CONTRIB.$v['contrib']:$v['contrib']) . ']';
103 sort($contribs);
104 return '[{{' . couteauprive_T('docgen') . '}}->' . _URL_CONTRIB . '2166]'
105 . $join . '[{{' . couteauprive_T('docwiki') . '}}->' . _URL_CONTRIB . '2793]'
106 . $join . join($join, $contribs);
107 }
108
109 // renvoie un champ d'un objet en base
110 function cs_champ_sql($id, $champ='texte', $objet='article') {
111 // Utiliser la bonne requete en fonction de la version de SPIP
112 if(function_exists('sql_getfetsel')) {
113 // SPIP 2.0
114 // TODO : fonctions SPIP pour trouver la table et l'id_objet
115 if($r = sql_getfetsel($champ, 'spip_'.$objet.'s', 'id_'.$objet.'='.intval($id)))
116 return $r;
117 } else {
118 if($r = spip_query('SELECT '.$champ.' FROM spip_'.$objet.'s WHERE id_'.$objet.'='.intval($id)))
119 // s'il existe un champ, on le retourne
120 if($row = spip_fetch_array($r)) return $row[$champ];
121 }
122 // sinon rien !
123 return '';
124 }
125
126 ?>