Browse Source

Fix #264

pull/277/head
Timothée Jaussoin 9 years ago
parent
commit
bfeaf4b36a
  1. 16
      app/models/message/Message.php
  2. 29
      app/models/message/MessageDAO.php
  3. 49
      app/widgets/Chat/Chat.php
  4. 7
      app/widgets/Chat/chat.css
  5. 4
      app/widgets/Chat/chat.js

16
app/models/message/Message.php

@ -30,6 +30,7 @@ class Message extends Model {
public $picture; // A valid (small) picture URL
public $sticker; // The sticker code
public $quoted; // If the user was quoted in the message
public function __construct()
{
@ -64,7 +65,9 @@ class Message extends Model {
"picture" :
{"type":"text" },
"sticker" :
{"type":"string", "size":128 }
{"type":"string", "size":128 },
"quoted" :
{"type":"int", "size":1}
}';
parent::__construct();
@ -92,7 +95,7 @@ class Message extends Model {
$this->type = 'chat';
if($stanza->attributes()->type) {
$this->type = (string)$stanza->attributes()->type;
$this->type = (string)$stanza->attributes()->type;
}
if($stanza->body)
@ -101,6 +104,15 @@ class Message extends Model {
if($stanza->subject)
$this->__set('subject', (string)$stanza->subject);
if($this->type == 'groupchat') {
$pd = new \Modl\PresenceDAO;
$p = $pd->getMyPresenceRoom($this->jidfrom);
if(strpos($this->body, $p->resource) !== false) {
$this->quoted = true;
}
}
if($stanza->html) {
$xml = \simplexml_load_string((string)$stanza->html->body);
if($xml) {

29
app/models/message/MessageDAO.php

@ -12,7 +12,8 @@ class MessageDAO extends SQL {
published = :published,
delivered = :delivered,
edited = :edited,
picture = :picture
picture = :picture,
quoted = :quoted
where session = :session
and id = :id
@ -21,19 +22,20 @@ class MessageDAO extends SQL {
$this->prepare(
'Message',
array(
[
'thread' => $message->newid, // FIXME
'id' => $message->id,
'session' => $message->session,
'jidto' => $message->jidto,
'edited' => $message->edited,
'picture' => $message->picture,
'quoted' => $message->quoted,
'jidfrom' => $message->jidfrom,
'body' => $message->body,
'html' => $message->html,
'published' => $message->published,
'delivered' => $message->delivered
)
]
);
$this->run('Message');
@ -55,7 +57,8 @@ class MessageDAO extends SQL {
published,
delivered,
sticker,
picture)
picture,
quoted)
values(
:id,
:session,
@ -70,12 +73,13 @@ class MessageDAO extends SQL {
:published,
:delivered,
:sticker,
:picture
:picture,
:quoted
)';
$this->prepare(
'Message',
array(
[
'id' => $message->id,
'session' => $message->session,
'jidto' => $message->jidto,
@ -89,8 +93,9 @@ class MessageDAO extends SQL {
'published' => $message->published,
'delivered' => $message->delivered,
'sticker' => $message->sticker,
'picture' => $message->picture
)
'picture' => $message->picture,
'quoted' => $message->quoted
]
);
}
@ -107,10 +112,10 @@ class MessageDAO extends SQL {
$this->prepare(
'Message',
array(
[
'session' => $this->_user,
'id' => $id
)
]
);
return $this->run('Message', 'item');
@ -128,11 +133,11 @@ class MessageDAO extends SQL {
$this->prepare(
'Message',
array(
[
'session' => $this->_user,
'jidto' => $to,
'jidfrom' => $this->_user
)
]
);
return $this->run('Message', 'item');

49
app/widgets/Chat/Chat.php

@ -91,22 +91,17 @@ class Chat extends \Movim\Widget\Base
4,
$this->route('chat', $contact->jid)
);
} elseif($message->type == 'groupchat') {
$pd = new \Modl\PresenceDAO;
$p = $pd->getMyPresenceRoom($from);
// If we are quoted in a chatroom
if(strpos($message->body, $p->resource) !== false) {
$cd = new \Modl\ConferenceDAO;
$c = $cd->get($from);
Notification::append(
'chat|'.$from,
($c != null && $c->name) ? $c->name : $from,
$message->body,
false,
4);
}
} elseif ($message->type == 'groupchat'
&& $message->quoted) {
$cd = new \Modl\ConferenceDAO;
$c = $cd->get($from);
Notification::append(
'chat|'.$from,
($c != null && $c->name) ? $c->name : $from,
$message->resource.': '.$message->body,
false,
4);
}
RPC::call('MovimTpl.fill', '#' . cleanupId($from.'_state'), $contact->jid);
@ -539,11 +534,6 @@ class Chat extends \Movim\Widget\Base
if(is_array($messages)) {
$messages = array_reverse($messages);
/*foreach($messages as $message) {
$this->_msgMap[$message->published.$message->jid] = $message;
}
foreach($this->_msgMap as $message) {*/
foreach($messages as $message) {
$this->prepareMessage($message);
}
@ -576,7 +566,7 @@ class Chat extends \Movim\Widget\Base
RPC::call('Chat.clearReplace');
}
function prepareMessage(&$message, $jid=null)
function prepareMessage(&$message, $jid = null)
{
if($jid != $message->jidto && $jid != $message->jidfrom && $jid != null)
return $this->_wrapper;
@ -587,10 +577,8 @@ class Chat extends \Movim\Widget\Base
if (isset($message->html)) {
$message->body = $message->html;
} else {
// We add some smileys...
$message->convertEmojis();
$message->addUrls();
// $message->body = prepareString(htmlentities($message->body , ENT_COMPAT,'UTF-8'));
}
if (isset($message->sticker)) {
@ -620,7 +608,6 @@ class Chat extends \Movim\Widget\Base
];
}
$message->publishedPrepared = prepareDate(strtotime($message->published), true);
if ($message->delivered) {
@ -639,29 +626,37 @@ class Chat extends \Movim\Widget\Base
else
array_push($this->_wrapper[$date], $message);
}
$pd = new \Modl\PresenceDAO;
$p = $pd->getMyPresenceRoom($message->from);
} else {
$msgkey = $message->jidfrom . '>' . substr($message->published, 11, 5);
//fillup $wrapper
if (!array_key_exists($date, $this->_wrapper)) {
$sticker = "";
if (isset($message->sticker)) {
$sticker = "sticker";
}
$this->_wrapper[$date] = ['0' . $sticker . '<' . $msgkey => [$message]];
} else { //date contains at least one speaker@time=>msg already
end($this->_wrapper[$date]);
$lastkey = key($this->_wrapper[$date]);
if (substr($lastkey, strpos($lastkey, '<') + 1) == $msgkey // same jidfrom, same min
&& !isset($message->sticker) // this msg is not a sticker
&& strpos($lastkey, "sticker<") === false
) { // the previous msg was not a sticker
array_push($this->_wrapper[$date][$lastkey], $message);
}
else {
} else {
$sticker = "";
if (isset($message->sticker)) {
$sticker = "sticker";
}
$this->_wrapper[$date][count($this->_wrapper[$date]) . $sticker . '<' . $msgkey] = [$message];
}
}

7
app/widgets/Chat/chat.css

@ -119,6 +119,13 @@
cursor: pointer;
}
#chat_widget li.room p.quoted {
background-color: rgba(255, 255, 51, 0.3);
padding: 0 0.5rem;
margin: 0 1rem;
border-radius: 0.5rem;
}
#chat_widget ul:after {
content: " ";
display: block;

4
app/widgets/Chat/chat.js

@ -102,6 +102,10 @@ var Chat = {
bubble.querySelector('p.message').innerHTML = messages[i].body.replace(/\r\n?|\n/g, '<br />');
}
if (messages[i].quoted) {
bubble.querySelector('p.message').classList.add('quoted');
}
bubble.querySelector('span.info').innerHTML = messages[i].publishedPrepared;
bubble.querySelector('p.user').className = 'user ' + messages[i].color;

Loading…
Cancel
Save