From 58f0feb78a02afd135e79e9845cbb6d48db940af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Jaussoin?= Date: Mon, 22 Feb 2016 00:02:17 +0100 Subject: [PATCH] Start implementing a Stickers feature in Movim (not enabled yet) Refactor the Picture lib to make it compatible with PNG --- app/helpers/StringHelper.php | 11 ++ app/models/message/Message.php | 15 ++- app/models/message/MessageDAO.php | 9 +- app/views/chat.tpl | 1 + app/widgets/Chat/Chat.php | 15 ++- app/widgets/Chat/_chat_smiley.tpl | 5 + app/widgets/Chat/chat.js | 12 +- app/widgets/Stickers/Stickers.php | 124 ++++++++++++++++++ app/widgets/Stickers/_stickers.tpl | 17 +++ app/widgets/Stickers/stickers.tpl | 0 ...c6573f4e67c1ec8a0ce1ee4510b0ccd0583290.png | Bin 0 -> 13837 bytes ...c649c7ad655722c1c63bea09c6aa6cd3b6e5ed.png | Bin 0 -> 17056 bytes ...dddf556a53a6f4fcb74c36c4301d59c2290f69.png | Bin 0 -> 60737 bytes ...7b058305ec44e49b839f665f030cb000e14477.png | Bin 0 -> 17409 bytes ...0de08965c7a8653af311c414ca0ac79f0f7fb8.png | Bin 0 -> 45012 bytes ...bda812246d091b57ab927f89e1b7d429cbc73e.png | Bin 0 -> 14352 bytes ...9626467b06ccc6836105a790b660c6e1a0f92a.png | Bin 0 -> 48437 bytes ...50e0b8ea76646bf8ba08694c666fbfb7f7402c.png | Bin 0 -> 23592 bytes ...f48774260a5560a88be6944bc80545854ea48b.png | Bin 0 -> 49725 bytes ...2754fd1bdf83b87ee717ff6f5b181ae7384cd2.png | Bin 0 -> 620 bytes bootstrap.php | 2 +- system/Picture.php | 31 +++-- themes/material/css/listn.css | 20 ++- 23 files changed, 231 insertions(+), 31 deletions(-) create mode 100644 app/widgets/Stickers/Stickers.php create mode 100644 app/widgets/Stickers/_stickers.tpl create mode 100644 app/widgets/Stickers/stickers.tpl create mode 100644 app/widgets/Stickers/stickers/04c6573f4e67c1ec8a0ce1ee4510b0ccd0583290.png create mode 100644 app/widgets/Stickers/stickers/0fc649c7ad655722c1c63bea09c6aa6cd3b6e5ed.png create mode 100644 app/widgets/Stickers/stickers/30dddf556a53a6f4fcb74c36c4301d59c2290f69.png create mode 100644 app/widgets/Stickers/stickers/347b058305ec44e49b839f665f030cb000e14477.png create mode 100644 app/widgets/Stickers/stickers/530de08965c7a8653af311c414ca0ac79f0f7fb8.png create mode 100644 app/widgets/Stickers/stickers/66bda812246d091b57ab927f89e1b7d429cbc73e.png create mode 100644 app/widgets/Stickers/stickers/a19626467b06ccc6836105a790b660c6e1a0f92a.png create mode 100644 app/widgets/Stickers/stickers/a650e0b8ea76646bf8ba08694c666fbfb7f7402c.png create mode 100644 app/widgets/Stickers/stickers/a8f48774260a5560a88be6944bc80545854ea48b.png create mode 100644 app/widgets/Stickers/stickers/f72754fd1bdf83b87ee717ff6f5b181ae7384cd2.png diff --git a/app/helpers/StringHelper.php b/app/helpers/StringHelper.php index 2d1f24051..cf3ff4c3b 100644 --- a/app/helpers/StringHelper.php +++ b/app/helpers/StringHelper.php @@ -223,6 +223,17 @@ function cleanJid($jid) return reset($explode); } +/* + * Extract the CID + */ +function getCid($string) +{ + preg_match("/(\w+)\@/", $string, $matches); + if(is_array($matches)) { + return $matches[1]; + } +} + /* * Explode JID */ diff --git a/app/models/message/Message.php b/app/models/message/Message.php index 1d1c4741a..9c755c0d2 100644 --- a/app/models/message/Message.php +++ b/app/models/message/Message.php @@ -26,6 +26,8 @@ class Message extends Model { public $publishedPrepared; // Only for chat purpose public $edited; + public $sticker; // The sticker code + public function __construct() { $this->_struct = ' @@ -55,7 +57,9 @@ class Message extends Model { "delivered" : {"type":"date"}, "edited" : - {"type":"int", "size":1} + {"type":"int", "size":1}, + "sticker" : + {"type":"string", "size":128 } }'; parent::__construct(); @@ -94,6 +98,15 @@ class Message extends Model { $images = (bool)($this->type == 'chat'); + if($stanza->html) { + $xhtml = new \SimpleXMLElement(''.(string)$stanza->html->body.''); + $xhtml->registerXPathNamespace('xhtml', 'http://www.w3.org/1999/xhtml'); + $img = $xhtml->xpath('//xhtml:img/@src')[0]; + if($img) { + $this->sticker = getCid((string)$img); + } + } + /*if($stanza->html) { $this->html = \cleanHTMLTags($stanza->html->body->asXML()); $this->html = \fixSelfClosing($this->html); diff --git a/app/models/message/MessageDAO.php b/app/models/message/MessageDAO.php index e76b75f65..276cdd79d 100644 --- a/app/models/message/MessageDAO.php +++ b/app/models/message/MessageDAO.php @@ -50,7 +50,8 @@ class MessageDAO extends SQL { body, html, published, - delivered) + delivered, + sticker) values( :id, :session, @@ -63,7 +64,8 @@ class MessageDAO extends SQL { :body, :html, :published, - :delivered + :delivered, + :sticker )'; $this->prepare( @@ -80,7 +82,8 @@ class MessageDAO extends SQL { 'body' => $message->body, 'html' => $message->html, 'published' => $message->published, - 'delivered' => $message->delivered + 'delivered' => $message->delivered, + 'sticker' => $message->sticker ) ); } diff --git a/app/views/chat.tpl b/app/views/chat.tpl index 518ce1c51..9fc978c33 100644 --- a/app/views/chat.tpl +++ b/app/views/chat.tpl @@ -1,3 +1,4 @@ +widget('Stickers');?>