1
0
mirror of https://github.com/wbbaddons/Tims-Chat.git synced 2025-01-24 02:20:39 +00:00

Handle whisper formatting on the client side.

Add additionalData to messages
This commit is contained in:
Tim Düsterhus 2013-05-28 23:39:19 +02:00
parent f49384991a
commit 63321dd0bd
11 changed files with 70 additions and 26 deletions

View File

@ -43,6 +43,17 @@ class Message extends \chat\data\CHATDatabaseObject {
*/ */
protected static $users = array(); protected static $users = array();
/**
* @see \wcf\data\DatabaseObject::handleData()
*/
protected function handleData($data) {
parent::handleData($data);
if ($this->data['additionalData'] !== null) {
$this->data['additionalData'] = unserialize($this->data['additionalData']);
}
}
/** /**
* @see \chat\data\message\Message::getFormattedMessage() * @see \chat\data\message\Message::getFormattedMessage()
*/ */
@ -65,8 +76,10 @@ class Message extends \chat\data\CHATDatabaseObject {
case self::TYPE_JOIN: case self::TYPE_JOIN:
case self::TYPE_LEAVE: case self::TYPE_LEAVE:
case self::TYPE_BACK: case self::TYPE_BACK:
$message = WCF::getLanguage()->getDynamicVariable('chat.message.'.$this->type, $this->data['additionalData'] ?: array());
break;
case self::TYPE_AWAY: case self::TYPE_AWAY:
$message = WCF::getLanguage()->getDynamicVariable('chat.message.'.$this->type, unserialize($message) ?: array()); $message = WCF::getLanguage()->getDynamicVariable('chat.message.'.$this->type, array('message' => $message));
break; break;
case self::TYPE_MODERATE: case self::TYPE_MODERATE:
$message = unserialize($message); $message = unserialize($message);
@ -75,8 +88,6 @@ class Message extends \chat\data\CHATDatabaseObject {
$message = $messageParser->parse($message, false, false, true, false); $message = $messageParser->parse($message, false, false, true, false);
break; break;
case self::TYPE_WHISPER: case self::TYPE_WHISPER:
$message = unserialize($message);
$message = $message['message'];
case self::TYPE_NORMAL: case self::TYPE_NORMAL:
case self::TYPE_ME: case self::TYPE_ME:
default: default:
@ -103,11 +114,6 @@ class Message extends \chat\data\CHATDatabaseObject {
$username = \chat\util\ChatUtil::gradient($username, $this->color1, $this->color2); $username = \chat\util\ChatUtil::gradient($username, $this->color1, $this->color2);
} }
if ($this->type == self::TYPE_WHISPER) {
$message = unserialize($this->message);
$username .= ' -> '.$message['username'];
}
return $username; return $username;
} }
@ -119,9 +125,9 @@ class Message extends \chat\data\CHATDatabaseObject {
*/ */
public function jsonify($raw = false) { public function jsonify($raw = false) {
switch ($this->type) { switch ($this->type) {
case self::TYPE_WHISPER:
case self::TYPE_NORMAL: case self::TYPE_NORMAL:
case self::TYPE_INFORMATION: case self::TYPE_INFORMATION:
case self::TYPE_WHISPER:
$separator = ':'; $separator = ':';
break; break;
default: default:
@ -141,7 +147,8 @@ class Message extends \chat\data\CHATDatabaseObject {
'receiver' => (int) $this->receiver, 'receiver' => (int) $this->receiver,
'type' => (int) $this->type, 'type' => (int) $this->type,
'roomID' => (int) $this->roomID, 'roomID' => (int) $this->roomID,
'messageID' => (int) $this->messageID 'messageID' => (int) $this->messageID,
'additionalData' => $this->additionalData
); );
if ($raw) return $array; if ($raw) return $array;

View File

@ -117,6 +117,7 @@ class MessageAction extends \wcf\data\AbstractDatabaseObjectAction {
$this->parameters['type'] = $command->getType(); $this->parameters['type'] = $command->getType();
$this->parameters['text'] = $command->getMessage(); $this->parameters['text'] = $command->getMessage();
$this->parameters['receiver'] = $command->getReceiver(); $this->parameters['receiver'] = $command->getReceiver();
$this->parameters['additionalData'] = $command->getAdditionalData();
} }
catch (\chat\system\command\NotFoundException $e) { catch (\chat\system\command\NotFoundException $e) {
throw new UserInputException('text', WCF::getLanguage()->getDynamicVariable('chat.error.notFound', array('exception' => $e))); throw new UserInputException('text', WCF::getLanguage()->getDynamicVariable('chat.error.notFound', array('exception' => $e)));
@ -128,6 +129,7 @@ class MessageAction extends \wcf\data\AbstractDatabaseObjectAction {
else { else {
$this->parameters['type'] = Message::TYPE_NORMAL; $this->parameters['type'] = Message::TYPE_NORMAL;
$this->parameters['receiver'] = null; $this->parameters['receiver'] = null;
$this->parameters['additionalData'] = null;
$this->parameters['text'] = \wcf\system\bbcode\PreParser::getInstance()->parse($this->parameters['text'], explode(',', WCF::getSession()->getPermission('user.chat.allowedBBCodes'))); $this->parameters['text'] = \wcf\system\bbcode\PreParser::getInstance()->parse($this->parameters['text'], explode(',', WCF::getSession()->getPermission('user.chat.allowedBBCodes')));
} }
@ -149,7 +151,8 @@ class MessageAction extends \wcf\data\AbstractDatabaseObjectAction {
'enableSmilies' => $this->parameters['enableSmilies'] ? 1 : 0, 'enableSmilies' => $this->parameters['enableSmilies'] ? 1 : 0,
'enableHTML' => $this->parameters['enableHTML'] ? 1 : 0, 'enableHTML' => $this->parameters['enableHTML'] ? 1 : 0,
'color1' => $this->parameters['userData']['color1'], 'color1' => $this->parameters['userData']['color1'],
'color2' => $this->parameters['userData']['color2'] 'color2' => $this->parameters['userData']['color2'],
'additionalData' => serialize($this->parameters['additionalData'])
) )
)); ));
$this->objectAction->executeAction(); $this->objectAction->executeAction();

View File

@ -192,9 +192,10 @@ class RoomAction extends \wcf\data\AbstractDatabaseObjectAction implements \wcf\
'username' => $this->parameters['user']->username, 'username' => $this->parameters['user']->username,
'time' => TIME_NOW, 'time' => TIME_NOW,
'type' => message\Message::TYPE_LEAVE, 'type' => message\Message::TYPE_LEAVE,
'message' => serialize(array('room' => $room)), 'message' => '',
'color1' => $this->parameters['user']->chatColor1, 'color1' => $this->parameters['user']->chatColor1,
'color2' => $this->parameters['user']->chatColor2 'color2' => $this->parameters['user']->chatColor2,
'additionalData' => serialize(array('room' => $room))
) )
)); ));
$messageAction->executeAction(); $messageAction->executeAction();
@ -211,9 +212,10 @@ class RoomAction extends \wcf\data\AbstractDatabaseObjectAction implements \wcf\
'username' => $this->parameters['user']->username, 'username' => $this->parameters['user']->username,
'time' => TIME_NOW, 'time' => TIME_NOW,
'type' => message\Message::TYPE_JOIN, 'type' => message\Message::TYPE_JOIN,
'message' => serialize(array('ipAddress' => $ipAddress)), 'message' => '',
'color1' => $this->parameters['user']->chatColor1, 'color1' => $this->parameters['user']->chatColor1,
'color2' => $this->parameters['user']->chatColor2 'color2' => $this->parameters['user']->chatColor2,
'additionalData' => serialize(array('ipAddress' => $ipAddress))
) )
)); ));
$messageAction->executeAction(); $messageAction->executeAction();
@ -286,7 +288,7 @@ class RoomAction extends \wcf\data\AbstractDatabaseObjectAction implements \wcf\
'username' => $this->parameters['user']->username, 'username' => $this->parameters['user']->username,
'time' => TIME_NOW, 'time' => TIME_NOW,
'type' => message\Message::TYPE_LEAVE, 'type' => message\Message::TYPE_LEAVE,
'message' => serialize(array('room' => null)), 'message' => '',
'color1' => $this->parameters['user']->chatColor1, 'color1' => $this->parameters['user']->chatColor1,
'color2' => $this->parameters['user']->chatColor2 'color2' => $this->parameters['user']->chatColor2
) )

View File

@ -59,4 +59,11 @@ abstract class AbstractCommand implements ICommand {
public function getReceiver() { public function getReceiver() {
return null; return null;
} }
/**
* No additionaldata by default.
*/
public function getAdditionalData() {
return null;
}
} }

View File

@ -42,6 +42,11 @@ interface ICommand {
*/ */
public function getMessage(); public function getMessage();
/**
* Returns additionalData to be saved within database
*/
public function getAdditionalData();
/** /**
* Returns the receiver for this command. * Returns the receiver for this command.
*/ */

View File

@ -1,5 +1,6 @@
<?php <?php
namespace chat\system\command\commands; namespace chat\system\command\commands;
use \wcf\system\WCF;
use \wcf\util\StringUtil; use \wcf\util\StringUtil;
/** /**
@ -33,15 +34,13 @@ class AwayCommand extends \chat\system\command\AbstractCommand {
* @see \chat\system\command\ICommand::getMessage() * @see \chat\system\command\ICommand::getMessage()
*/ */
public function getMessage() { public function getMessage() {
return serialize(array( return \wcf\system\bbcode\PreParser::getInstance()->parse($this->commandHandler->getParameters(), explode(',', WCF::getSession()->getPermission('user.chat.allowedBBCodes')));
'message' => \wcf\system\bbcode\PreParser::getInstance()->parse($this->commandHandler->getParameters(), explode(',', \wcf\system\WCF::getSession()->getPermission('user.chat.allowedBBCodes')))
));
} }
/** /**
* @see \chat\system\command\ICommand::getReceiver() * @see \chat\system\command\ICommand::getReceiver()
*/ */
public function getReceiver() { public function getReceiver() {
return \wcf\system\WCF::getUser()->userID; return WCF::getUser()->userID;
} }
} }

View File

@ -14,6 +14,7 @@ use \wcf\util\StringUtil;
*/ */
class TemproomCommand extends \chat\system\command\AbstractRestrictedCommand { class TemproomCommand extends \chat\system\command\AbstractRestrictedCommand {
public $roomName = ''; public $roomName = '';
public $roomID = 0;
public function __construct(\chat\system\command\CommandHandler $commandHandler) { public function __construct(\chat\system\command\CommandHandler $commandHandler) {
parent::__construct($commandHandler); parent::__construct($commandHandler);
@ -28,8 +29,8 @@ class TemproomCommand extends \chat\system\command\AbstractRestrictedCommand {
$this->objectAction->executeAction(); $this->objectAction->executeAction();
$returnValues = $this->objectAction->getReturnValues(); $returnValues = $this->objectAction->getReturnValues();
$chatRoomEditor = new \chat\data\room\RoomEditor($returnValues['returnValues']); $chatRoomEditor = new \chat\data\room\RoomEditor($returnValues['returnValues']);
$roomID = $returnValues['returnValues']->roomID; $this->roomID = $returnValues['returnValues']->roomID;
$this->roomName = WCF::getLanguage()->getDynamicVariable('chat.room.titleTemp', array('roomID' => $roomID)); $this->roomName = WCF::getLanguage()->getDynamicVariable('chat.room.titleTemp', array('roomID' => $this->roomID));
// set accurate title // set accurate title
$chatRoomEditor->update(array( $chatRoomEditor->update(array(
@ -50,7 +51,7 @@ class TemproomCommand extends \chat\system\command\AbstractRestrictedCommand {
) )
); );
$acl->save($roomID, $acl->getObjectTypeID('be.bastelstu.chat.room')); $acl->save($this->roomID, $acl->getObjectTypeID('be.bastelstu.chat.room'));
\chat\system\permission\PermissionHandler::clearCache(); \chat\system\permission\PermissionHandler::clearCache();
$this->didInit(); $this->didInit();
} }
@ -84,4 +85,14 @@ class TemproomCommand extends \chat\system\command\AbstractRestrictedCommand {
public function getReceiver() { public function getReceiver() {
return \wcf\system\WCF::getUser()->userID; return \wcf\system\WCF::getUser()->userID;
} }
/**
* @see \chat\system\command\ICommand::getAdditionalData()
*/
public function getAdditionalData() {
return array(
'roomID' => (int) $this->roomID,
'roomName' => $this->roomName
);
}
} }

View File

@ -48,7 +48,7 @@ class WhisperCommand extends \chat\system\command\AbstractCommand {
public function getMessage() { public function getMessage() {
$this->message = \wcf\system\bbcode\PreParser::getInstance()->parse($this->message, explode(',', \wcf\system\WCF::getSession()->getPermission('user.chat.allowedBBCodes'))); $this->message = \wcf\system\bbcode\PreParser::getInstance()->parse($this->message, explode(',', \wcf\system\WCF::getSession()->getPermission('user.chat.allowedBBCodes')));
return serialize(array('message' => $this->message, 'username' => $this->user->username)); return $this->message;
} }
/** /**
@ -57,4 +57,13 @@ class WhisperCommand extends \chat\system\command\AbstractCommand {
public function getReceiver() { public function getReceiver() {
return $this->user->userID; return $this->user->userID;
} }
/**
* @see \chat\system\command\ICommand::getAdditionalData()
*/
public function getAdditionalData() {
return array(
'receiverUsername' => $this->user->username
);
}
} }

View File

@ -21,6 +21,7 @@ CREATE TABLE chat1_message (
enableHTML TINYINT(1) NOT NULL DEFAULT 0, enableHTML TINYINT(1) NOT NULL DEFAULT 0,
color1 INT(10) NOT NULL DEFAULT 0, color1 INT(10) NOT NULL DEFAULT 0,
color2 INT(10) NOT NULL DEFAULT 0, color2 INT(10) NOT NULL DEFAULT 0,
additionalData TEXT DEFAULT NULL,
KEY (roomID), KEY (roomID),
KEY (sender), KEY (sender),

View File

@ -110,7 +110,7 @@
<!-- 1 = TYPE_JOIN --> <!-- 1 = TYPE_JOIN -->
<item name="chat.message.1"><![CDATA[hat den Chat betreten.{if $__wcf->session->getPermission('admin.user.canViewIpAddress') && $ipAddress} ({$ipAddress}){/if}]]></item> <item name="chat.message.1"><![CDATA[hat den Chat betreten.{if $__wcf->session->getPermission('admin.user.canViewIpAddress') && $ipAddress} ({$ipAddress}){/if}]]></item>
<!-- 2 = TYPE_LEAVE --> <!-- 2 = TYPE_LEAVE -->
<item name="chat.message.2"><![CDATA[{if $room == null}hat den Chat verlassen.{else}ist in den Raum „{$room}“ gegangen.{/if}]]></item> <item name="chat.message.2"><![CDATA[{if !$room|isset || $room === null}hat den Chat verlassen.{else}ist in den Raum „{$room}“ gegangen.{/if}]]></item>
<!-- 3 = TYPE_AWAY --> <!-- 3 = TYPE_AWAY -->
<item name="chat.message.3"><![CDATA[ist jetzt abwesend{if $message}: {$message}{else}.{/if}]]></item> <item name="chat.message.3"><![CDATA[ist jetzt abwesend{if $message}: {$message}{else}.{/if}]]></item>
<!-- 4 = TYPE_BACK --> <!-- 4 = TYPE_BACK -->

View File

@ -1 +1 @@
{literal}<time>{@$formattedTime}</time> <span class="usernameContainer"><span class="username">{@$formattedUsername}</span><span class="separator">{$separator}</span></span> <span class="text">{@$formattedMessage}</span> <span class="markContainer"><input type="checkbox" value="{@$messageID}" /></span>{/literal} {literal}<time>{@$formattedTime}</time> <span class="usernameContainer"><span class="username">{if $type != 7}{@$formattedUsername}{else}{if $receiver == WCF.User.userID}{@$formattedUsername} {/if}->{if $receiver != WCF.User.userID} {$additionalData.receiverUsername}{/if}{/if}</span><span class="separator">{$separator}</span></span> <span class="text">{@$formattedMessage}</span> <span class="markContainer"><input type="checkbox" value="{@$messageID}" /></span>{/literal}