1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
<?php
/**
* Display Emoticons
*
* Sample plugin to replace emoticons in plain text message body with real icons
*
* @version 1.2.0
* @author Thomas Bruederli
* @author Aleksander Machniak
* @website http://roundcube.net
*/
class emoticons extends rcube_plugin
{
public $task = 'mail';
function init()
{
$this->add_hook('message_part_after', array($this, 'replace'));
}
function replace($args)
{
// This is a lookbehind assertion which will exclude html entities
// E.g. situation when ";)" in "")" shouldn't be replaced by the icon
// It's so long because of assertion format restrictions
$entity = '(?<!&'
. '[a-zA-Z0-9]{2}' . '|' . '#[0-9]{2}' . '|'
. '[a-zA-Z0-9]{3}' . '|' . '#[0-9]{3}' . '|'
. '[a-zA-Z0-9]{4}' . '|' . '#[0-9]{4}' . '|'
. '[a-zA-Z0-9]{5}' . '|'
. '[a-zA-Z0-9]{6}' . '|'
. '[a-zA-Z0-9]{7}'
. ')';
// map of emoticon replacements
$map = array(
'/:\)/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif',
'title' => ':)'
)),
'/:-\)/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif',
'title' => ':-)'
)),
'/(?<!mailto):D/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif',
'title' => ':D'
)),
'/:-D/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif',
'title' => ':-D'
)),
'/:\(/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif',
'title' => ':('
)),
'/:-\(/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif',
'title' => ':-('
)),
'/'.$entity.';\)/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif',
'title' => ';)'
)),
'/'.$entity.';-\)/' => html::img(array(
'src' => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif',
'title' => ';-)'
)),
);
if ($args['type'] == 'plain') {
$args['body'] = preg_replace(
array_keys($map), array_values($map), $args['body']);
}
return $args;
}
}
|