summaryrefslogtreecommitdiff
path: root/plugins/emoticons/emoticons.php
blob: e929c9f9da0e1996f7d4fb06eed7e8b1fb382a8a (plain)
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 "&quot;)" 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;
    }

}