Mise en route du suivi.
[aidenligne_francais_universite.git] / plugins / couteau_suisse / outils / smileys.php
1 <?php
2
3 // Outil SMILEYS - 25 decembre 2006
4 // serieuse refonte et integration au Couteau Suisse : Patrice Vanneufville, 2006
5 // Toutes les infos sur : http://www.spip-contrib.net/?article1561
6 // dessin des frimousses : Sylvain Michel [http://www.guaph.net/]
7
8 // cette fonction est appelee automatiquement a chaque affichage de la page privee du Couteau Suisse
9 function smileys_installe() {
10 $path = find_in_path('img/smileys');
11 cs_log("smileys_installe() : $path");
12 $path2 = url_absolue($path);
13
14 // l'ordre des smileys ici est important :
15 // - les doubles, puis les simples, puis les courts
16 // - le raccourci insere par la balise #SMILEYS est la premiere occurence de chaque fichier
17 $smileys = array(
18 // attention ' est different de ’ (&#8217;) (SPIP utilise/ecrit ce dernier)
19 ":&#8217;-))"=> 'pleure_de_rire.png',
20 ":&#8217;-)"=> 'pleure_de_rire.png',
21 ":&#8217;-D" => 'pleure_de_rire.png',
22 ":&#8217;-(" => 'triste.png',
23
24 // les doubles :
25 ':-))' => 'mort_de_rire.png',
26 ':))' => 'mort_de_rire.png',
27 ":'-))"=> 'pleure_de_rire.png',
28 ':-((' => 'en_colere.png',
29
30 // les simples :
31 ';-)' => 'clin_d-oeil.png',
32 ':-)' => 'sourire.png',
33 ':-D' => 'mort_de_rire.png',
34 ":'-)"=> 'pleure_de_rire.png',
35 ":'-D" => 'pleure_de_rire.png',
36 ':-(' => 'pas_content.png',
37 ":'-(" => 'triste.png',
38 ':-&gt;' => 'diable.png',
39 '|-)' => 'rouge.png',
40 ':o)' => 'rigolo.png',
41 'B-)' => 'lunettes.png',
42 ':-P' => 'tire_la_langue.png',
43 ':-p' => 'tire_la_langue.png',
44 ':-|' => 'bof.png',
45 ':-/' => 'mouais.png',
46 ':-O' => 'surpris.png',
47 ':-o' => 'surpris.png',
48
49 // les courts : tester a l'usage...
50 // attention : ils ne sont reconnus que s'il y a un espace avant !
51 ':)' => 'sourire.png',
52 ':(' => 'pas_content.png',
53 ';)' => 'clin_d-oeil.png',
54 ':|' => 'bof.png',
55 '|)' => 'rouge.png',
56 ':/' => 'mouais.png',
57 );
58
59 $liste = array();
60 foreach ($smileys as $smy=>$val) {
61 $espace = strlen($smy)==2?' ':'';
62 $smileys2[0][] = $espace.$smy;
63 list(,,,$size) = @getimagesize("$path/$val");
64 // cs_code_echappement evite que le remplacement se fasse a l'interieur des attributs de la balise <img>
65 $smileys2[1][] = cs_code_echappement($espace."<img alt=\"$smy\" title=\"$smy\" class=\"no_image_filtrer format_png\" src=\"$path2/$val\" $size/>", 'SMILE');
66 $smileys2[2][] = $val;
67 // liste des raccourcis et smileys disponibles
68 $liste[] = '<b>'.$smy.'</b>';
69 }
70 ecrire_meta('cs_smileys_racc', join(', ', $liste));
71 ecrire_meta('cs_smileys', serialize($smileys2));
72 ecrire_metas();
73 }
74
75 // cette fonction est appelee automatiquement a chaque affichage de la page privee du Couteau Suisse
76 // le resultat est une chaine apportant des informations sur les nouveaux raccourcis ajoutes par l'outil
77 // si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide');
78 function smileys_raccourcis() {
79 return _T('couteauprive:smileys:aide', array('liste' => $GLOBALS['meta']['cs_smileys_racc']));
80 }
81
82 function smileys_echappe_balises_callback($matches) {
83 return cs_code_echappement($matches[1], 'SMILE');
84 }
85
86 // fonction de remplacement
87 // les balises suivantes sont protegees : html|code|cadre|frame|script|acronym|cite
88 function cs_rempl_smileys($texte) {
89 if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
90 $smileys_rempl = unserialize($GLOBALS['meta']['cs_smileys']);
91 // protection des images, on ne sait jamais...
92 $texte = preg_replace_callback(',(<img .*?/>),ms', 'smileys_echappe_balises_callback', $texte);
93 // smileys a probleme :
94 $texte = str_replace(':->', ':-&gt;', $texte); // remplacer > par &gt;
95 // remplacer ’ (apostrophe curly) par &#8217;
96 $texte = str_replace(':’-', ':&#8217;-', $texte);
97 $texte = str_replace(':'.chr(146).'-', ':&#8217;-', $texte);
98 // voila, on remplace tous les smileys d'un coup...
99 $texte = str_replace($smileys_rempl[0], $smileys_rempl[1], $texte);
100 //cs_log('smileys traités : '.$texte);
101 return echappe_retour($texte, 'SMILE');
102 }
103
104 // fonction principale (pipeline pre_typo)
105 function cs_smileys_pre_typo($texte) {
106 if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
107 if (!isset($GLOBALS['meta']['cs_smileys']))
108 smileys_installe();
109 //cs_log('smileys trouvés !');
110 // appeler cs_rempl_smileys() une fois que certaines balises ont ete protegees
111 return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'cs_rempl_smileys', $texte);
112 }
113
114 // fonction qui renvoie un tableau de smileys uniques
115 function smileys_uniques($smileys) {
116 $max = count($smileys[1]);
117 $new = array(array(), array(), array());
118 for ($i=0; $i<$max; $i++) {
119 if(!in_array($smileys[2][$i], $new[2])) {
120 $new[0][] = $smileys[0][$i]; // texte
121 $new[1][] = $smileys[1][$i]; // image
122 $new[2][] = $smileys[2][$i]; // nom de fichier
123 }
124 }
125 return $new;
126 }
127
128 // cette fonction renvoie une ligne de tableau entre <tr></tr> afin de l'inserer dans la Barre Typo V2, si elle est presente
129 function cs_smileys_BarreTypo($tr) {
130 if (!isset($GLOBALS['meta']['cs_smileys'])) smileys_installe();
131 // le tableau des smileys est present dans les metas
132 $smileys = smileys_uniques(unserialize($GLOBALS['meta']['cs_smileys']));
133 $max = count($smileys[0]);
134 $res = '';
135 for ($i=0; $i<$max; $i++)
136 $res .= "<a href=\"javascript:barre_inserer('{$smileys[0][$i]}',@@champ@@)\">{$smileys[1][$i]}</a>";
137
138 return $tr.'<tr><td><@@span@@>'._T('couteauprive:smileys:nom').'</span>&nbsp;'.echappe_retour($res, 'SMILE').'</td></tr>';
139 }
140
141 ?>