source: spip-zone/_plugins_/frimousses/frimousses_fonctions.php @ 95085

Last change on this file since 95085 was 95085, checked in by gouz@…, 3 years ago

modification des noms de fonctions pour éviter les conflits avec CS, ajout de smileys manquants dans CS et présents dans frimousses

File size: 8.5 KB
Line 
1<?php
2if (!isset($GLOBALS['spip_version_branche']) OR intval($GLOBALS['spip_version_branche'])<2){
3        $p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__FILE__))));
4        define('_DIR_PLUGIN_FRIMOUSSES',(_DIR_PLUGINS.end($p)).'/');
5}
6
7// balises de tracage, directement compatibles regexpr
8// le separateur _FRIMOUSSES_HTMLX est supprime en fin de calcul
9@define('_FRIMOUSSES_HTMLA', '<span class="frimoussesfoo htmla"></span>');
10@define('_FRIMOUSSES_HTMLB', '<span class="frimoussesfoo htmlb"></span>');
11@define('_FRIMOUSSES_HTMLX', '<span class="frimoussesfoo \w+"></span>');
12
13
14// fonction ajoutant un smiley au tableau $tab
15// ex : frimousses_compile_smiley($tab, ':-*', 'icon_kiss', 'gif');
16function frimousses_compile_smiley(&$tab, $smy, $img, $ext='png') {
17    static $path, $path2;
18    if(!isset($path)) {
19            $path = find_in_path('frimousses');
20            $path2 = url_absolue($path);
21            $pp = defined('_DIR_PLUGIN_PORTE_PLUME');
22    }
23    $espace = strlen($smy)==2?' ':'';
24    $file = "$img.$ext";
25    list(,,,$size) = @getimagesize("$path/$file");
26    $tab['0']['0'][] = $espace.$smy;
27    // frimousses_code_echappement evite que le remplacement se fasse a l'interieur des attributs de la balise <img>
28    $tab[0][1][] = frimousses_code_echappement("$espace<img alt=\"$smy\" title=\"$smy\" class=\"no_image_filtrer format_$ext\" src=\"$path2/$file\" $size/>", 'FRIMOUSSES');
29   
30    $tab[0][2][] = $file;
31    $tab['racc'][] = $smy;
32    // pour le porte-plume
33    $tab[0][4]['smiley_'.$img] = $file;
34}
35
36// cette fonction appelee automatiquement a chaque affichage de la page privee du Couteau Suisse renvoie un tableau
37function frimousses_liste_smileys($tab = array(0 => array(), 'racc' => array())) {
38    // l'ordre des smileys ici est important :
39    //  - les doubles, puis les simples, puis les courts
40    //  - le raccourci insere par la balise #SMILEYS est la premiere occurence de chaque fichier
41    $smileys = array(
42    // attention ' est different de ’ (&#8217;) (SPIP utilise/ecrit ce dernier)
43        ":&#8217;-))"=> 'pleure_de_rire',
44        ":&#8217;-)"=> 'pleure_de_rire',
45        ":&#8217;-D"   => 'pleure_de_rire',
46        ":&#8217;-("   => 'triste',
47   
48    // les doubles :
49        ':-))' => 'mort_de_rire',
50        ':))'  => 'mort_de_rire',
51        ":'-))"=> 'pleure_de_rire',
52        ':-((' => 'en_colere',
53        ':-)*' => 'bisou',
54        ':-...' => 'rouge',
55        ':...' => 'rouge', 
56        ':-..' => 'rouge', 
57        ':..' => 'rouge', 
58        ':-.' => 'rouge', 
59
60       
61       
62    // les simples :
63        ';-)'  => 'clin_d-oeil',
64        ':-)'  => 'sourire',
65        ':-D'  => 'mort_de_rire',
66        ":'-)"=> 'pleure_de_rire',
67        ":'-D" => 'pleure_de_rire',
68        ':-('  => 'pas_content',
69        ":'-(" => 'triste',
70        ':~(' => 'triste',
71        ':-&gt;' => 'diable',
72        ':o)'  => 'rigolo',
73        'B-)'  => 'lunettes',
74        ':-P'  => 'tire_la_langue',
75        ':-p'  => 'tire_la_langue',
76        ':-|'  => 'bof',
77        '|-)'  => 'bof',       
78        ':-/'  => 'mouais',
79        ':-O'  => 'surpris',
80        ':-o'  => 'surpris',
81        ':-*'  => 'bisou',
82        'o:)' => 'ange',
83        'O:)' => 'ange',
84        '0:)' => 'ange',
85        ':.' => 'rouge', 
86        ':-x' => 'bouche_cousu',
87        ':-@' => 'dort',
88        ':-$' => 'argent',
89        ':-!' => 'indeci',
90       
91    // les courts : tester a l'usage...
92    // attention : ils ne sont reconnus que s'il y a un espace avant !
93        ':)'   => 'sourire',
94        ':('   => 'pas_content',
95        ';)'   => 'clin_d-oeil',
96        ':|'   => 'bof',
97        '|)'   => 'bof',
98        ':/'   => 'mouais',
99    );
100   
101    foreach ($smileys as $smy=>$val)
102            frimousses_compile_smiley($tab, $smy, $val);
103
104    return $tab;
105}
106
107
108// fonction qui renvoie un tableau de smileys uniques
109function frimousses_smileys_uniques($smileys) {
110        $max = count($smileys[1]);
111        $new = array(array(), array(), array());
112        for ($i=0; $i<$max; $i++) {
113            if(!in_array($smileys[2][$i], $new[2])) {
114                $new[0][] = $smileys[0][$i]; // texte
115                $new[1][] = $smileys[1][$i]; // image
116                $new[2][] = $smileys[2][$i]; // nom de fichier
117            }
118        }
119        return $new;
120}
121
122// fonction principale (pipeline pre_typo)
123function frimousses_pre_typo($texte) {
124        if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
125        // appeler frimousses_rempl_smileys() une fois que certaines balises ont ete protegees
126        return frimousses_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'frimousses_rempl_smileys', $texte);
127}
128
129
130// evite les transformations typo dans les balises $balises
131// par exemple pour <html>, <cadre>, <code>, <frame>, <script>, <acronym> et <cite>, $balises = 'html|code|cadre|frame|script|acronym|cite'
132// $fonction est la fonction prevue pour transformer $texte
133// si $fonction = false, alors le texte est retourne simplement protege
134// $texte est le texte d'origine
135// si $balises = '' alors la protection par defaut est : html|code|cadre|frame|script
136// si $balises = false alors le texte est utilise tel quel
137function frimousses_echappe_balises($balises, $fonction, $texte, $arg=NULL){
138        if(!strlen($texte)) return '';
139        if (($fonction!==false) && !function_exists($fonction)) {
140                // chargement des fonctions
141                include_spip('frimousses_fonctions');
142                if (!function_exists($fonction)) {
143                        spip_log("Erreur - frimousses_echappe_balises() : $fonction() non definie dans : ".$_SERVER['REQUEST_URI']);
144                        return $texte;
145                }
146        }
147        // trace d'anciennes balises <html></html> ou autre echappement SPIP ?
148        if(strpos($texte, _FRIMOUSSES_HTMLA)!==false) {
149                $texte = preg_replace(',<p[^>]*>(\s*'._FRIMOUSSES_HTMLX.')</p>,', '$1', $texte);
150                $texte = preg_replace_callback(','._FRIMOUSSES_HTMLA.'(.*?)(?='._FRIMOUSSES_HTMLB.'),s', 'frimousses_echappe_html_callback', $texte);
151        }
152        // protection du texte
153        if($balises!==false) {
154                if(!strlen($balises)) $balises = 'html|code|cadre|frame|script';
155                $balises = ',<('.$balises.')(\s[^>]*)?>(.*)</\1>,UimsS';
156                include_spip('inc/texte');
157                $texte = echappe_html($texte, 'FRIMOUSSES', true, $balises);
158        }
159        // retour du texte simplement protege
160        if ($fonction===false) return $texte;
161        // transformation par $fonction
162        $texte = $arg==NULL?$fonction($texte):$fonction($texte, $arg);
163        // deprotection en abime, notamment des modeles...
164        if(strpos($texte, 'base64FRIMOUSSES')!==false) $texte = echappe_retour($texte, 'FRIMOUSSES');
165        if(strpos($texte, 'base64FRIMOUSSES')!==false) return echappe_retour($texte, 'FRIMOUSSES');
166        return $texte;
167}
168
169// fonction callback pour frimousses_echappe_balises
170function frimousses_echappe_html_callback($matches) {
171 return _FRIMOUSSES_HTMLA.frimousses_code_echappement($matches[1], 'FRIMOUSSES');
172}
173
174
175// Echapper les elements perilleux en les passant en base64
176// Creer un bloc base64 correspondant a $rempl ; au besoin en marquant
177// une $source differente ; optimisation du code spip !
178// echappe_retour() permet de revenir en arriere
179function frimousses_code_echappement($rempl, $source='', $mode='span') {
180        // Convertir en base64
181        $base64 = base64_encode($rempl);
182        // guillemets simples dans la balise pour simplifier l'outil 'guillemets'
183        return "<$mode class='base64$source' title='$base64'></$mode>";
184}
185
186
187
188function frimousses_echappe_balises_callback($matches) {
189 return frimousses_code_echappement($matches[1], 'FRIMOUSSES');
190}
191
192// fonction de remplacement
193// les balises suivantes sont protegees : html|code|cadre|frame|script|acronym|cite
194function frimousses_rempl_smileys($texte) {
195        if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
196        $smileys_rempl = frimousses_liste_smileys()[0];
197        $texte = preg_replace_callback(',(<img .*?/>),ms', 'frimousses_echappe_balises_callback', $texte);
198        // smileys a probleme :
199        $texte = str_replace(':->', ':-&gt;', $texte); // remplacer > par &gt;
200        // remplacer ’ (apostrophe curly) par &#8217;
201        $texte = str_replace(':’-', ':&#8217;-', $texte);
202        $texte = str_replace(':'.chr(146).'-', ':&#8217;-', $texte);
203        // voila, on remplace tous les smileys d'un coup...
204        $texte = str_replace($smileys_rempl[0], $smileys_rempl[1], $texte);
205
206        return echappe_retour($texte, 'FRIMOUSSES');
207}
208
209?>
Note: See TracBrowser for help on using the repository browser.