source: spip-zone/_plugins_/couteau_suisse/outils/smileys.php @ 49007

Last change on this file since 49007 was 49007, checked in by patfr@…, 10 years ago

On peut désormais facilement ajouter des smileys.php :

function smileys_installe() {

$tab = smileys_installe_dist();
compile_smiley($tab, ':-*', 'icon_kiss', 'gif');
return $tab;

}

File size: 6.6 KB
Line 
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');
10function compile_smiley(&$tab, $smy, $img, $ext='png') {
11        static $path, $path2;
12        if(!isset($path)) {
13                $path = find_in_path('img/smileys');
14cs_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
31function 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');
85function 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
90function 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
96function 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)
112function 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
119function 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
133function 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)
143function 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}
168function 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
177function 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?>
Note: See TracBrowser for help on using the repository browser.