0
|
1 <?php
|
|
2
|
|
3 /**
|
|
4 * Emoticons
|
|
5 *
|
|
6 * Plugin to replace emoticons in plain text message body with real icons.
|
|
7 * Also it enables emoticons in HTML compose editor. Both features are optional.
|
|
8 *
|
|
9 * @license GNU GPLv3+
|
|
10 * @author Thomas Bruederli
|
|
11 * @author Aleksander Machniak
|
|
12 * @website http://roundcube.net
|
|
13 */
|
|
14 class emoticons extends rcube_plugin
|
|
15 {
|
|
16 public $task = 'mail|settings|utils';
|
|
17
|
|
18
|
|
19 /**
|
|
20 * Plugin initilization.
|
|
21 */
|
|
22 function init()
|
|
23 {
|
|
24 $rcube = rcube::get_instance();
|
|
25
|
|
26 $this->add_hook('message_part_after', array($this, 'message_part_after'));
|
|
27 $this->add_hook('message_outgoing_body', array($this, 'message_outgoing_body'));
|
|
28 $this->add_hook('html2text', array($this, 'html2text'));
|
|
29 $this->add_hook('html_editor', array($this, 'html_editor'));
|
|
30
|
|
31 if ($rcube->task == 'settings') {
|
|
32 $this->add_hook('preferences_list', array($this, 'preferences_list'));
|
|
33 $this->add_hook('preferences_save', array($this, 'preferences_save'));
|
|
34 }
|
|
35 }
|
|
36
|
|
37 /**
|
|
38 * 'message_part_after' hook handler to replace common plain text emoticons
|
|
39 * with emoticon images (<img>)
|
|
40 */
|
|
41 function message_part_after($args)
|
|
42 {
|
|
43 if ($args['type'] == 'plain') {
|
|
44 $this->load_config();
|
|
45
|
|
46 $rcube = rcube::get_instance();
|
|
47 if (!$rcube->config->get('emoticons_display', false)) {
|
|
48 return $args;
|
|
49 }
|
|
50
|
|
51 require_once __DIR__ . '/emoticons_engine.php';
|
|
52
|
|
53 $args['body'] = emoticons_engine::text2icons($args['body']);
|
|
54 }
|
|
55
|
|
56 return $args;
|
|
57 }
|
|
58
|
|
59 /**
|
|
60 * 'message_outgoing_body' hook handler to replace image emoticons from TinyMCE
|
|
61 * editor with image attachments.
|
|
62 */
|
|
63 function message_outgoing_body($args)
|
|
64 {
|
|
65 if ($args['type'] == 'html') {
|
|
66 $this->load_config();
|
|
67
|
|
68 $rcube = rcube::get_instance();
|
|
69 if (!$rcube->config->get('emoticons_compose', true)) {
|
|
70 return $args;
|
|
71 }
|
|
72
|
|
73 require_once __DIR__ . '/emoticons_engine.php';
|
|
74
|
|
75 // look for "emoticon" images from TinyMCE and change their src paths to
|
|
76 // be file paths on the server instead of URL paths.
|
|
77 $images = emoticons_engine::replace($args['body']);
|
|
78
|
|
79 // add these images as attachments to the MIME message
|
|
80 foreach ($images as $img_name => $img_file) {
|
|
81 $args['message']->addHTMLImage($img_file, 'image/gif', '', true, $img_name);
|
|
82 }
|
|
83 }
|
|
84
|
|
85 return $args;
|
|
86 }
|
|
87
|
|
88 /**
|
|
89 * 'html2text' hook handler to replace image emoticons from TinyMCE
|
|
90 * editor with plain text emoticons.
|
|
91 *
|
|
92 * This is executed on html2text action, i.e. when switching from HTML to text
|
|
93 * in compose window (or similar place). Also when generating alternative
|
|
94 * text/plain part.
|
|
95 */
|
|
96 function html2text($args)
|
|
97 {
|
|
98 $rcube = rcube::get_instance();
|
|
99
|
|
100 if ($rcube->action == 'html2text' || $rcube->action == 'send') {
|
|
101 $this->load_config();
|
|
102
|
|
103 if (!$rcube->config->get('emoticons_compose', true)) {
|
|
104 return $args;
|
|
105 }
|
|
106
|
|
107 require_once __DIR__ . '/emoticons_engine.php';
|
|
108
|
|
109 $args['body'] = emoticons_engine::icons2text($args['body']);
|
|
110 }
|
|
111
|
|
112 return $args;
|
|
113 }
|
|
114
|
|
115 /**
|
|
116 * 'html_editor' hook handler, where we enable emoticons in TinyMCE
|
|
117 */
|
|
118 function html_editor($args)
|
|
119 {
|
|
120 $rcube = rcube::get_instance();
|
|
121
|
|
122 $this->load_config();
|
|
123
|
|
124 if ($rcube->config->get('emoticons_compose', true)) {
|
|
125 $args['extra_plugins'][] = 'emoticons';
|
|
126 $args['extra_buttons'][] = 'emoticons';
|
|
127 }
|
|
128
|
|
129 return $args;
|
|
130 }
|
|
131
|
|
132 /**
|
|
133 * 'preferences_list' hook handler
|
|
134 */
|
|
135 function preferences_list($args)
|
|
136 {
|
|
137 $rcube = rcube::get_instance();
|
|
138 $dont_override = $rcube->config->get('dont_override', array());
|
|
139
|
|
140 if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) {
|
|
141 $this->load_config();
|
|
142 $this->add_texts('localization');
|
|
143
|
|
144 $field_id = 'emoticons_display';
|
|
145 $checkbox = new html_checkbox(array('name' => '_' . $field_id, 'id' => $field_id, 'value' => 1));
|
|
146
|
|
147 $args['blocks']['main']['options']['emoticons_display'] = array(
|
|
148 'title' => $this->gettext('emoticonsdisplay'),
|
|
149 'content' => $checkbox->show(intval($rcube->config->get('emoticons_display', false)))
|
|
150 );
|
|
151 }
|
|
152 else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) {
|
|
153 $this->load_config();
|
|
154 $this->add_texts('localization');
|
|
155
|
|
156 $field_id = 'emoticons_compose';
|
|
157 $checkbox = new html_checkbox(array('name' => '_' . $field_id, 'id' => $field_id, 'value' => 1));
|
|
158
|
|
159 $args['blocks']['main']['options']['emoticons_compose'] = array(
|
|
160 'title' => $this->gettext('emoticonscompose'),
|
|
161 'content' => $checkbox->show(intval($rcube->config->get('emoticons_compose', true)))
|
|
162 );
|
|
163 }
|
|
164
|
|
165 return $args;
|
|
166 }
|
|
167
|
|
168 /**
|
|
169 * 'preferences_save' hook handler
|
|
170 */
|
|
171 function preferences_save($args)
|
|
172 {
|
|
173 $rcube = rcube::get_instance();
|
|
174 $dont_override = $rcube->config->get('dont_override', array());
|
|
175
|
|
176 if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) {
|
|
177 $args['prefs']['emoticons_display'] = rcube_utils::get_input_value('_emoticons_display', rcube_utils::INPUT_POST) ? true : false;
|
|
178 }
|
|
179 else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) {
|
|
180 $args['prefs']['emoticons_compose'] = rcube_utils::get_input_value('_emoticons_compose', rcube_utils::INPUT_POST) ? true : false;
|
|
181 }
|
|
182
|
|
183 return $args;
|
|
184 }
|
|
185 }
|