Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2530152
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
7 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/plugins/emoticons/composer.json b/plugins/emoticons/composer.json
index 8e7b90ae9..d1679cfe9 100644
--- a/plugins/emoticons/composer.json
+++ b/plugins/emoticons/composer.json
@@ -1,29 +1,29 @@
{
"name": "roundcube/emoticons",
"type": "roundcube-plugin",
"description": "Sample plugin to replace emoticons in plain text message body with real icons.",
"license": "GPLv3+",
- "version": "1.3",
+ "version": "1.4",
"authors": [
{
"name": "Thomas Bruederli",
"email": "roundcube@gmail.com",
"role": "Lead"
},
{
"name": "Aleksander Machniak",
"email": "alec@alec.pl",
"role": "Developer"
}
],
"repositories": [
{
"type": "composer",
"url": "http://plugins.roundcube.net"
}
],
"require": {
"php": ">=5.3.0",
"roundcube/plugin-installer": ">=0.1.3"
}
}
diff --git a/plugins/emoticons/emoticons.php b/plugins/emoticons/emoticons.php
index 187e83827..f3f987a72 100644
--- a/plugins/emoticons/emoticons.php
+++ b/plugins/emoticons/emoticons.php
@@ -1,78 +1,78 @@
<?php
/**
* Display Emoticons
*
* Sample plugin to replace emoticons in plain text message body with real icons
*
* @version @package_version@
* @license GNU GPLv3+
* @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(
- '/:\)/' => $this->img_tag('smiley-smile.gif', ':)' ),
- '/:-\)/' => $this->img_tag('smiley-smile.gif', ':-)' ),
'/(?<!mailto):D/' => $this->img_tag('smiley-laughing.gif', ':D' ),
'/:-D/' => $this->img_tag('smiley-laughing.gif', ':-D' ),
'/:\(/' => $this->img_tag('smiley-frown.gif', ':(' ),
'/:-\(/' => $this->img_tag('smiley-frown.gif', ':-(' ),
'/'.$entity.';\)/' => $this->img_tag('smiley-wink.gif', ';)' ),
'/'.$entity.';-\)/' => $this->img_tag('smiley-wink.gif', ';-)' ),
'/8\)/' => $this->img_tag('smiley-cool.gif', '8)' ),
'/8-\)/' => $this->img_tag('smiley-cool.gif', '8-)' ),
'/(?<!mailto):O/i' => $this->img_tag('smiley-surprised.gif', ':O' ),
'/(?<!mailto):-O/i' => $this->img_tag('smiley-surprised.gif', ':-O' ),
'/(?<!mailto):P/i' => $this->img_tag('smiley-tongue-out.gif', ':P' ),
'/(?<!mailto):-P/i' => $this->img_tag('smiley-tongue-out.gif', ':-P' ),
'/(?<!mailto):@/i' => $this->img_tag('smiley-yell.gif', ':@' ),
'/(?<!mailto):-@/i' => $this->img_tag('smiley-yell.gif', ':-@' ),
'/O:\)/i' => $this->img_tag('smiley-innocent.gif', 'O:)' ),
'/O:-\)/i' => $this->img_tag('smiley-innocent.gif', 'O:-)' ),
- '/(?<!mailto):$/' => $this->img_tag('smiley-embarassed.gif', ':$' ),
- '/(?<!mailto):-$/' => $this->img_tag('smiley-embarassed.gif', ':-$' ),
+ '/(?<!O):\)/' => $this->img_tag('smiley-smile.gif', ':)' ),
+ '/(?<!O):-\)/' => $this->img_tag('smiley-smile.gif', ':-)' ),
+ '/(?<!mailto):\$/' => $this->img_tag('smiley-embarassed.gif', ':$' ),
+ '/(?<!mailto):-\$/' => $this->img_tag('smiley-embarassed.gif', ':-$' ),
'/(?<!mailto):\*/i' => $this->img_tag('smiley-kiss.gif', ':*' ),
'/(?<!mailto):-\*/i' => $this->img_tag('smiley-kiss.gif', ':-*' ),
'/(?<!mailto):S/i' => $this->img_tag('smiley-undecided.gif', ':S' ),
'/(?<!mailto):-S/i' => $this->img_tag('smiley-undecided.gif', ':-S' ),
);
if ($args['type'] == 'plain') {
$args['body'] = preg_replace(
array_keys($map), array_values($map), $args['body']);
}
return $args;
}
private function img_tag($ico, $title)
{
$path = './program/js/tinymce/plugins/emoticons/img/';
return html::img(array('src' => $path.$ico, 'title' => $title));
}
}
diff --git a/plugins/emoticons/tests/Emoticons.php b/plugins/emoticons/tests/Emoticons.php
index e04502285..14c7fd0e6 100644
--- a/plugins/emoticons/tests/Emoticons.php
+++ b/plugins/emoticons/tests/Emoticons.php
@@ -1,23 +1,63 @@
<?php
class Emoticons_Plugin extends PHPUnit_Framework_TestCase
{
function setUp()
{
include_once __DIR__ . '/../emoticons.php';
}
/**
* Plugin object construction test
*/
function test_constructor()
{
$rcube = rcube::get_instance();
$plugin = new emoticons($rcube->api);
$this->assertInstanceOf('emoticons', $plugin);
$this->assertInstanceOf('rcube_plugin', $plugin);
}
-}
+ /**
+ * replace() method tests
+ */
+ function test_replace()
+ {
+ $rcube = rcube::get_instance();
+ $plugin = new emoticons($rcube->api);
+
+ $map = array(
+ ':D' => array('smiley-laughing.gif', ':D' ),
+ ':-D' => array('smiley-laughing.gif', ':-D' ),
+ ':(' => array('smiley-frown.gif', ':(' ),
+ ':-(' => array('smiley-frown.gif', ':-(' ),
+ '8)' => array('smiley-cool.gif', '8)' ),
+ '8-)' => array('smiley-cool.gif', '8-)' ),
+ ':O' => array('smiley-surprised.gif', ':O' ),
+ ':-O' => array('smiley-surprised.gif', ':-O' ),
+ ':P' => array('smiley-tongue-out.gif', ':P' ),
+ ':-P' => array('smiley-tongue-out.gif', ':-P' ),
+ ':@' => array('smiley-yell.gif', ':@' ),
+ ':-@' => array('smiley-yell.gif', ':-@' ),
+ 'O:)' => array('smiley-innocent.gif', 'O:)' ),
+ 'O:-)' => array('smiley-innocent.gif', 'O:-)' ),
+ ':)' => array('smiley-smile.gif', ':)' ),
+ ':-)' => array('smiley-smile.gif', ':-)' ),
+ ':$' => array('smiley-embarassed.gif', ':$' ),
+ ':-$' => array('smiley-embarassed.gif', ':-$' ),
+ ':*' => array('smiley-kiss.gif', ':*' ),
+ ':-*' => array('smiley-kiss.gif', ':-*' ),
+ ':S' => array('smiley-undecided.gif', ':S' ),
+ ':-S' => array('smiley-undecided.gif', ':-S' ),
+ );
+
+ foreach ($map as $body => $expected) {
+ $args = array('type' => 'plain', 'body' => $body);
+ $args = $plugin->replace($args);
+ $this->assertRegExp('/' . preg_quote($expected[0], '/') . '/', $args['body']);
+ $this->assertRegExp('/title="' . preg_quote($expected[1], '/') . '"/', $args['body']);
+ }
+ }
+}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Feb 3, 7:21 AM (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
427130
Default Alt Text
(7 KB)
Attached To
Mode
R3 roundcubemail
Attached
Detach File
Event Timeline
Log In to Comment