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 ’ (’) (SPIP utilise/ecrit ce dernier) |
---|
37 | ":’-))"=> 'pleure_de_rire', |
---|
38 | ":’-)"=> 'pleure_de_rire', |
---|
39 | ":’-D" => 'pleure_de_rire', |
---|
40 | ":’-(" => '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 | ':->' => '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(':->', ':->', $texte); // remplacer > par > |
---|
103 | // remplacer ’ (apostrophe curly) par ’ |
---|
104 | $texte = str_replace(':’-', ':’-', $texte); |
---|
105 | $texte = str_replace(':'.chr(146).'-', ':’-', $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> '.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 | ?> |
---|