Page MenuHomePhorge

No OneTemporary

Size
7 KB
Referenced Files
None
Subscribers
None
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 "&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(
- '/:\)/' => $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

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)

Event Timeline