[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / 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 // fonction ajoutant un sailey au tableau $tab
9 // ex : compile_smiley($tab, ':-*', 'icon_kiss', 'gif');
10 function compile_smiley(&$tab, $smy, $img, $ext='png') {
11 static $path, $path2;
12 if(!isset($path)) {
13 $path = find_in_path('img/smileys');
14 cs_log("smileys_installe_dist() : $path");
15 $path2 = url_absolue($path);
16 $pp = defined('_DIR_PLUGIN_PORTE_PLUME');
17 }
18 $espace = strlen($smy)==2?' ':'';
19 $file = "$img.$ext";
20 list(,,,$size) = @getimagesize("$path/$file");
21 $tab['0']['0'][] = $espace.$smy;
22 // cs_code_echappement evite que le remplacement se fasse a l'interieur des attributs de la balise <img>
23 $tab[0][1][] = cs_code_echappement("$espace<img alt=\"$smy\" title=\"$smy\" class=\"no_image_filtrer format_$ext\" src=\"$path2/$file\" $size/>", 'SMILE');
24 $tab[0][2][] = $file;
25 $tab['racc'][] = $smy;
26 // pour le porte-plume
27 $tab[0][4]['smiley_'.$img] = $file;
28 }
29
30 // cette fonction appelee automatiquement a chaque affichage de la page privee du Couteau Suisse renvoie un tableau
31 function smileys_installe_dist($tab = array(0 => array(), 'racc' => array())) {
32 // l'ordre des smileys ici est important :
33 // - les doubles, puis les simples, puis les courts
34 // - le raccourci insere par la balise #SMILEYS est la premiere occurence de chaque fichier
35 $smileys = array(
36 // attention ' est different de ’ (&#8217;) (SPIP utilise/ecrit ce dernier)
37 ":&#8217;-))"=> 'pleure_de_rire',
38 ":&#8217;-)"=> 'pleure_de_rire',
39 ":&#8217;-D" => 'pleure_de_rire',
40 ":&#8217;-(" => 'triste',
41
42 // les doubles :
43 ':-))' => 'mort_de_rire',
44 ':))' => 'mort_de_rire',
45 ":'-))"=> 'pleure_de_rire',
46 ':-((' => 'en_colere',
47
48 // les simples :
49 ';-)' => 'clin_d-oeil',
50 ':-)' => 'sourire',
51 ':-D' => 'mort_de_rire',
52 ":'-)"=> 'pleure_de_rire',
53 ":'-D" => 'pleure_de_rire',
54 ':-(' => 'pas_content',
55 ":'-(" => 'triste',
56 ':-&gt;' => 'diable',
57 '|-)' => 'rouge',
58 ':o)' => 'rigolo',
59 'B-)' => 'lunettes',
60 ':-P' => 'tire_la_langue',
61 ':-p' => 'tire_la_langue',
62 ':-|' => 'bof',
63 ':-/' => 'mouais',
64 ':-O' => 'surpris',
65 ':-o' => 'surpris',
66
67 // les courts : tester a l'usage...
68 // attention : ils ne sont reconnus que s'il y a un espace avant !
69 ':)' => 'sourire',
70 ':(' => 'pas_content',
71 ';)' => 'clin_d-oeil',
72 ':|' => 'bof',
73 '|)' => 'rouge',
74 ':/' => 'mouais',
75 );
76
77 foreach ($smileys as $smy=>$val)
78 compile_smiley($tab, $smy, $val);
79
80 return $tab;
81 }
82
83 // liste des nouveaux raccourcis ajoutes par l'outil
84 // si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide');
85 function smileys_raccourcis() {
86 $racc = cs_lire_data_outil('smileys', 'racc');
87 return _T('couteauprive:smileys:aide', array('liste' => '<b>'.join('</b>, <b>', $racc).'</b>'));
88 }
89
90 function smileys_echappe_balises_callback($matches) {
91 return cs_code_echappement($matches[1], 'SMILE');
92 }
93
94 // fonction de remplacement
95 // les balises suivantes sont protegees : html|code|cadre|frame|script|acronym|cite
96 function cs_rempl_smileys($texte) {
97 if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
98 $smileys_rempl = cs_lire_data_outil('smileys');
99 // protection des images, on ne sait jamais...
100 $texte = preg_replace_callback(',(<img .*?/>),ms', 'smileys_echappe_balises_callback', $texte);
101 // smileys a probleme :
102 $texte = str_replace(':->', ':-&gt;', $texte); // remplacer > par &gt;
103 // remplacer ’ (apostrophe curly) par &#8217;
104 $texte = str_replace(':’-', ':&#8217;-', $texte);
105 $texte = str_replace(':'.chr(146).'-', ':&#8217;-', $texte);
106 // voila, on remplace tous les smileys d'un coup...
107 $texte = str_replace($smileys_rempl[0], $smileys_rempl[1], $texte);
108 return echappe_retour($texte, 'SMILE');
109 }
110
111 // fonction principale (pipeline pre_typo)
112 function cs_smileys_pre_typo($texte) {
113 if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
114 // appeler cs_rempl_smileys() une fois que certaines balises ont ete protegees
115 return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'cs_rempl_smileys', $texte);
116 }
117
118 // fonction qui renvoie un tableau de smileys uniques
119 function smileys_uniques($smileys) {
120 $max = count($smileys[1]);
121 $new = array(array(), array(), array());
122 for ($i=0; $i<$max; $i++) {
123 if(!in_array($smileys[2][$i], $new[2])) {
124 $new[0][] = $smileys[0][$i]; // texte
125 $new[1][] = $smileys[1][$i]; // image
126 $new[2][] = $smileys[2][$i]; // nom de fichier
127 }
128 }
129 return $new;
130 }
131
132 // cette fonction renvoie une ligne de tableau entre <tr></tr> afin de l'inserer dans la Barre Typo V2, si elle est presente
133 function cs_smileys_BarreTypo($tr) {
134 $smileys = smileys_uniques(cs_lire_data_outil('smileys'));
135 $max = count($smileys[0]);
136 $res = '';
137 for ($i=0; $i<$max; $i++)
138 $res .= "<a href=\"javascript:barre_inserer('{$smileys[0][$i]}',@@champ@@)\">{$smileys[1][$i]}</a>";
139 return $tr.'<tr><td><@@span@@>'._T('couteauprive:smileys:nom').'</span>&nbsp;'.echappe_retour($res, 'SMILE').'</td></tr>';
140 }
141
142 // les 2 fonctions suivantes inserent les boutons pour le plugin Porte Plume, s'il est present (SPIP>=2.0)
143 function cs_smileys_PP_pre_charger($flux) {
144 $smileys = smileys_uniques(cs_lire_data_outil('smileys'));
145 $max = count($smileys[0]);
146 $r = array();
147 for ($i=0; $i<$max; $i++) {
148 $id = 'smiley_' . substr($smileys[2][$i], 0, strrpos($smileys[2][$i], '.'));
149 $r[] = array(
150 "id" => $id,
151 "name" => _T('couteau:pp_smileys_inserer', array('smiley'=>$smileys[0][$i])),
152 "className" => $id,
153 "replaceWith" => $smileys[0][$i],
154 "display" => true);
155 }
156 $r = array(
157 "id" => 'cs_smileys_drop',
158 "name" => _T('couteau:pp_smileys_inserer', array('smiley'=>'')),
159 "className" => 'cs_smileys_drop',
160 "replaceWith" => '',
161 "display" => true,
162 "dropMenu" => $r,
163 );
164 foreach(cs_pp_liste_barres('smileys') as $b)
165 $flux[$b]->ajouterApres('grpCaracteres', $r);
166 return $flux;
167 }
168 function cs_smileys_PP_icones($flux) {
169 $smileys = cs_lire_data_outil('smileys');
170 $path = find_in_path('img/smileys').'/';
171 // icones utilisees. Attention : mettre les drop-boutons en premier !!
172 $flux['cs_smileys_drop'] = smileys_creer_icone_barre(find_in_path('img/smileys/mort_de_rire.png'));
173 foreach($smileys[4] as $i=>$v) $flux[$i] = smileys_creer_icone_barre($path.$v);
174 return $flux;
175 }
176 // creation d'icone pour le plugin porte-plume
177 function smileys_creer_icone_barre($file) {
178 static $icones_barre;
179 rep_icones_barre($icones_barre);
180 $file = filtrer('image_recadre', $file, 16, 16, 'topleft');
181 $nom = basename($src = extraire_attribut($file, 'src'));
182 @copy($src, $icones_barre.$nom);
183 return $nom;
184 }
185
186 ?>