]> git.mxchange.org Git - friendica.git/blob - include/Smilies.php
193f3b555ddd2986f7e3adf009928678eba0f57c
[friendica.git] / include / Smilies.php
1 <?php
2
3 /**
4  * @file include/smilies.php
5  */
6
7 /**
8  * This class contains functions to handle smiles
9  */
10
11 class Smilies {
12
13         /**
14          * @brief Function to list all smilies
15          * 
16          * Get an array of all smilies, both internal and from addons.
17          * 
18          * @return array
19          *      'texts' => smilie shortcut
20          *      'icons' => icon in html
21          * 
22          * @hook smilie ('texts' => smilies texts array, 'icons' => smilies html array)
23          */
24         public static function get_list() {
25
26                 $texts =  array(
27                         '&lt;3',
28                         '&lt;/3',
29                         '&lt;\\3',
30                         ':-)',
31                         ';-)',
32                         ':-(',
33                         ':-P',
34                         ':-p',
35                         ':-"',
36                         ':-&quot;',
37                         ':-x',
38                         ':-X',
39                         ':-D',
40                         '8-|',
41                         '8-O',
42                         ':-O',
43                         '\\o/',
44                         'o.O',
45                         'O.o',
46                         'o_O',
47                         'O_o',
48                         ":'(",
49                         ":-!",
50                         ":-/",
51                         ":-[",
52                         "8-)",
53                         ':beer',
54                         ':homebrew',
55                         ':coffee',
56                         ':facepalm',
57                         ':like',
58                         ':dislike',
59                         '~friendica',
60                         'red#',
61                         'red#matrix'
62
63                 );
64
65                 $icons = array(
66                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-heart.gif" alt="&lt;3" />',
67                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-brokenheart.gif" alt="&lt;/3" />',
68                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-brokenheart.gif" alt="&lt;\\3" />',
69                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-smile.gif" alt=":-)" />',
70                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-wink.gif" alt=";-)" />',
71                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-frown.gif" alt=":-(" />',
72                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-P" />',
73                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-p" />',
74                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-\"" />',
75                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-\"" />',
76                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-x" />',
77                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-X" />',
78                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-laughing.gif" alt=":-D" />',
79                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-surprised.gif" alt="8-|" />',
80                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-surprised.gif" alt="8-O" />',
81                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-surprised.gif" alt=":-O" />',
82                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-thumbsup.gif" alt="\\o/" />',
83                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="o.O" />',
84                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="O.o" />',
85                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="o_O" />',
86                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="O_o" />',
87                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-cry.gif" alt=":\'(" />',
88                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-foot-in-mouth.gif" alt=":-!" />',
89                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-undecided.gif" alt=":-/" />',
90                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-embarassed.gif" alt=":-[" />',
91                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-cool.gif" alt="8-)" />',
92                         '<img class="smiley" src="' . app::get_baseurl() . '/images/beer_mug.gif" alt=":beer" />',
93                         '<img class="smiley" src="' . app::get_baseurl() . '/images/beer_mug.gif" alt=":homebrew" />',
94                         '<img class="smiley" src="' . app::get_baseurl() . '/images/coffee.gif" alt=":coffee" />',
95                         '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-facepalm.gif" alt=":facepalm" />',
96                         '<img class="smiley" src="' . app::get_baseurl() . '/images/like.gif" alt=":like" />',
97                         '<img class="smiley" src="' . app::get_baseurl() . '/images/dislike.gif" alt=":dislike" />',
98                         '<a href="http://friendica.com">~friendica <img class="smiley" src="' . app::get_baseurl() . '/images/friendica-16.png" alt="~friendica" /></a>',
99                         '<a href="http://redmatrix.me/">red<img class="smiley" src="' . app::get_baseurl() . '/images/rm-16.png" alt="red" />matrix</a>',
100                         '<a href="http://redmatrix.me/">red<img class="smiley" src="' . app::get_baseurl() . '/images/rm-16.png" alt="red" />matrix</a>'
101                 );
102
103                 $params = array('texts' => $texts, 'icons' => $icons);
104                 call_hooks('smilie', $params);
105
106                 return $params;
107
108         }
109
110         /**
111          * @brief Replaces text emoticons with graphical images
112          *
113          * It is expected that this function will be called using HTML text.
114          * We will escape text between HTML pre and code blocks from being
115          * processed.
116          *
117          * At a higher level, the bbcode [nosmile] tag can be used to prevent this
118          * function from being executed by the prepare_text() routine when preparing
119          * bbcode source for HTML display
120          *
121          * @param string $s
122          * @param boolean $sample
123          * 
124          * @return string
125          */
126         public static function replace($s, $sample = false) {
127                 if(intval(get_config('system','no_smilies'))
128                         || (local_user() && intval(get_pconfig(local_user(),'system','no_smilies'))))
129                         return $s;
130
131                 $s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','self::encode',$s);
132                 $s = preg_replace_callback('/<code>(.*?)<\/code>/ism','self::encode',$s);
133
134                 $params = self::get_list();
135                 $params['string'] = $s;
136
137                 if($sample) {
138                         $s = '<div class="smiley-sample">';
139                         for($x = 0; $x < count($params['texts']); $x ++) {
140                                 $s .= '<dl><dt>' . $params['texts'][$x] . '</dt><dd>' . $params['icons'][$x] . '</dd></dl>';
141                         }
142                 }
143                 else {
144                         $params['string'] = preg_replace_callback('/&lt;(3+)/','self::preg_heart',$params['string']);
145                         $s = str_replace($params['texts'],$params['icons'],$params['string']);
146                 }
147
148                 $s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','self::decode',$s);
149                 $s = preg_replace_callback('/<code>(.*?)<\/code>/ism','self::decode',$s);
150
151                 return $s;
152         }
153
154         private function encode($m) {
155                 return(str_replace($m[1],base64url_encode($m[1]),$m[0]));
156         }
157
158         private function decode($m) {
159                 return(str_replace($m[1],base64url_decode($m[1]),$m[0]));
160         }
161
162
163         /**
164          * @brief expand <3333 to the correct number of hearts
165          *
166          * @param string $x
167          * @return string
168          */
169         private function preg_heart($x) {
170                 if(strlen($x[1]) == 1)
171                         return $x[0];
172                 $t = '';
173                 for($cnt = 0; $cnt < strlen($x[1]); $cnt ++)
174                         $t .= '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-heart.gif" alt="&lt;3" />';
175                 $r =  str_replace($x[0],$t,$x[0]);
176                 return $r;
177         }
178
179 }