1
0
mirror of https://github.com/wbbaddons/Tims-Chat.git synced 2025-04-01 10:54:52 +00:00

Add possibility to use BBCodes

This commit is contained in:
Tim Düsterhus 2013-01-09 21:34:30 +01:00
parent d2f23cb5a7
commit 539dcb2a4e
10 changed files with 65 additions and 34 deletions

View File

@ -77,7 +77,12 @@ class ChatMessage extends \wcf\data\DatabaseObject {
$message = $message['message']; $message = $message['message'];
case self::TYPE_NORMAL: case self::TYPE_NORMAL:
case self::TYPE_ME: case self::TYPE_ME:
if (!$this->enableHTML && $outputType == 'text/html') { if ($this->enableBBCodes) {
$messageParser = \wcf\system\bbcode\MessageParser::getInstance();
$messageParser->setOutputType($outputType);
$message = $messageParser->parse($message, $this->enableSmilies, $this->enableHTML, true, false);
}
else if (!$this->enableHTML && $outputType == 'text/html') {
$message = \wcf\system\bbcode\SimpleMessageParser::getInstance()->parse($message, true, $this->enableSmilies); $message = \wcf\system\bbcode\SimpleMessageParser::getInstance()->parse($message, true, $this->enableSmilies);
} }
break; break;
@ -85,6 +90,12 @@ class ChatMessage extends \wcf\data\DatabaseObject {
if ($this->enableHTML) { if ($this->enableHTML) {
$message = self::replaceUserLink($message, $outputType); $message = self::replaceUserLink($message, $outputType);
} }
if ($this->enableBBCodes) {
$messageParser = \wcf\system\bbcode\MessageParser::getInstance();
$messageParser->setOutputType($outputType);
$message = $messageParser->parse($message, $this->enableSmilies, $this->enableHTML, true, false);
}
break; break;
} }

View File

@ -22,6 +22,13 @@ class ChatForm extends AbstractForm {
*/ */
public $enableHTML = 0; public $enableHTML = 0;
/**
* Should bbcodes be enabled for this message.
*
* @var integer
*/
public $enableBBCodes = CHAT_ENABLE_BBCODES;
/** /**
* Should smilies be enabled for this message. * Should smilies be enabled for this message.
* *
@ -82,7 +89,7 @@ class ChatForm extends AbstractForm {
* @see wcf\page\IPage::__run() * @see wcf\page\IPage::__run()
*/ */
public function __run() { public function __run() {
if (($this->request = \wcf\system\request\RequestHandler::getInstance()->getActiveRequest()->getRequestObject()) === $this) throw new IllegalLinkException(); if (($this->request = \wcf\system\request\RequestHandler::getInstance()->getActiveRequest()->getRequestObject()) === $this) throw new \wcf\system\exception\IllegalLinkException();
parent::__run(); parent::__run();
} }
@ -141,8 +148,10 @@ class ChatForm extends AbstractForm {
try { try {
$command = $commandHandler->loadCommand(); $command = $commandHandler->loadCommand();
if ($command->enableSmilies != \wcf\system\chat\command\ICommand::SMILEY_USER) $this->enableSmilies = $command->enableSmilies; if ($command->enableSmilies != \wcf\system\chat\command\ICommand::SETTING_USER) $this->enableSmilies = $command->enableSmilies;
$this->enableHTML = $command->enableHTML; $this->enableHTML = $command->enableHTML;
if ($command->enableBBCodes != \wcf\system\chat\command\ICommand::SETTING_USER) $this->enableBBCodes = $command->enableBBCodes;
$type = $command->getType(); $type = $command->getType();
$this->message = $command->getMessage(); $this->message = $command->getMessage();
$receiver = $command->getReceiver(); $receiver = $command->getReceiver();
@ -202,6 +211,7 @@ class ChatForm extends AbstractForm {
'message' => $this->message, 'message' => $this->message,
'enableSmilies' => $this->enableSmilies, 'enableSmilies' => $this->enableSmilies,
'enableHTML' => $this->enableHTML, 'enableHTML' => $this->enableHTML,
'enableBBCodes' => $this->enableBBCodes,
'color1' => $this->userData['color'][1], 'color1' => $this->userData['color'][1],
'color2' => $this->userData['color'][2] 'color2' => $this->userData['color'][2]
) )

View File

@ -23,18 +23,30 @@ abstract class AbstractCommand implements ICommand {
* Should HTML be enabled? * Should HTML be enabled?
* *
* @var integer * @var integer
* @see \wcf\system\chat\command\ICommand::SETTING_OFF
* @see \wcf\system\chat\command\ICommand::SETTING_ON
*/ */
public $enableHTML = 0; public $enableHTML = ICommand::SETTING_OFF;
/**
* Should BBCodes be enabled?
*
* @var integer
* @see \wcf\system\chat\command\ICommand::SETTING_OFF
* @see \wcf\system\chat\command\ICommand::SETTING_ON
* @see \wcf\system\chat\command\ICommand::SETTING_USER
*/
public $enableBBCodes = ICommand::SETTING_OFF;
/** /**
* Should smilies be enabled? * Should smilies be enabled?
* *
* @var integer * @var integer
* @see \wcf\system\chat\command\ICommand::SMILEY_OFF * @see \wcf\system\chat\command\ICommand::SETTING_OFF
* @see \wcf\system\chat\command\ICommand::SMILEY_ON * @see \wcf\system\chat\command\ICommand::SETTING_ON
* @see \wcf\system\chat\command\ICommand::SMILEY_USER * @see \wcf\system\chat\command\ICommand::SETTING_USER
*/ */
public $enableSmilies = ICommand::SMILEY_OFF; public $enableSmilies = ICommand::SETTING_OFF;
public function __construct(CommandHandler $commandHandler) { public function __construct(CommandHandler $commandHandler) {
EventHandler::getInstance()->fireAction($this, 'shouldInit'); EventHandler::getInstance()->fireAction($this, 'shouldInit');

View File

@ -70,7 +70,7 @@ final class CommandHandler {
$parts = explode(' ', StringUtil::substring($this->text, StringUtil::length(static::COMMAND_CHAR)), 2); $parts = explode(' ', StringUtil::substring($this->text, StringUtil::length(static::COMMAND_CHAR)), 2);
if ($this->isCommand($parts[0])) { if ($this->isCommand($parts[0])) {
return new commands\Plain($this); return new commands\PlainCommand($this);
} }
$class = '\wcf\system\chat\command\commands\\'.ucfirst(strtolower($parts[0])).'Command'; $class = '\wcf\system\chat\command\commands\\'.ucfirst(strtolower($parts[0])).'Command';

View File

@ -12,25 +12,25 @@ namespace wcf\system\chat\command;
*/ */
interface ICommand { interface ICommand {
/** /**
* Smilies are forced to be disabled. * Setting is forced to be disabled.
* *
* @var integer * @var integer
*/ */
const SMILEY_OFF = 0; const SETTING_OFF = 0;
/** /**
* Smilies are forced to be enabled. * Setting is forced to be enabled.
* *
* @var integer * @var integer
*/ */
const SMILEY_ON = 1; const SETTING_ON = 1;
/** /**
* The user may decide whether smilies are on or off. * The user may decide whether this setting is on or off.
* *
* @var integer * @var integer
*/ */
const SMILEY_USER = 2; const SETTING_USER = 2;
/** /**
* Returns the message-type for this command. * Returns the message-type for this command.

View File

@ -15,7 +15,8 @@ use \wcf\util\StringUtil;
* @subpackage system.chat.command.commands * @subpackage system.chat.command.commands
*/ */
class InfoCommand extends \wcf\system\chat\command\AbstractCommand { class InfoCommand extends \wcf\system\chat\command\AbstractCommand {
public $enableHTML = 1; public $enableBBCodes = self::SETTING_ON;
public $enableHTML = self::SETTING_ON;
public $lines = array(); public $lines = array();
public $user = null; public $user = null;
@ -86,9 +87,9 @@ class InfoCommand extends \wcf\system\chat\command\AbstractCommand {
public function getMessage() { public function getMessage() {
$lines = array(); $lines = array();
foreach ($this->lines as $key => $val) { foreach ($this->lines as $key => $val) {
$lines[] = '<strong>'.$key.':</strong> '.$val; $lines[] = '[b]'.$key.':[/b] '.$val;
} }
return '<ul><li>'.implode('</li><li>', $lines).'</li></ul>'; return '[list][*]'.implode('[*]', $lines).'[/list]';
} }
/** /**

View File

@ -24,14 +24,7 @@ class RestoreCommand extends \wcf\system\chat\command\AbstractRestrictedCommand
$this->user = User::getUserByUsername(rtrim($commandHandler->getParameters(), ',')); $this->user = User::getUserByUsername(rtrim($commandHandler->getParameters(), ','));
if (!$this->user->userID) throw new \wcf\system\chat\command\UserNotFoundException(rtrim($commandHandler->getParameters(), ',')); if (!$this->user->userID) throw new \wcf\system\chat\command\UserNotFoundException(rtrim($commandHandler->getParameters(), ','));
// Username + link to profile $this->link = '<span class="userLink" data-user-id="'.$this->user->userID.'" />';
$color = array(1 => ChatUtil::getRandomNumber(), 2 => ChatUtil::getRandomNumber() * 0xFFFF);
ChatUtil::writeUserData(array('color' => $color), $this->user);
$profile = \wcf\system\request\LinkHandler::getInstance()->getLink('User', array(
'object' => $this->user
));
$this->link = '<a href="'.$profile.'" class="userLink" data-user-id="'.$this->user->userID.'">'.ChatUtil::gradient($this->user->username, $color[1], $color[2]).'</a>';
$this->didInit(); $this->didInit();
} }

View File

@ -11,7 +11,8 @@ namespace wcf\system\chat\command\commands;
* @subpackage system.chat.command.commands * @subpackage system.chat.command.commands
*/ */
class WhereCommand extends \wcf\system\chat\command\AbstractCommand { class WhereCommand extends \wcf\system\chat\command\AbstractCommand {
public $enableHTML = 1; public $enableHTML = self::SETTING_ON;
public $enableBBCodes = self::SETTING_ON;
/** /**
* @see \wcf\system\chat\command\ICommand::getType() * @see \wcf\system\chat\command\ICommand::getType()
@ -30,16 +31,12 @@ class WhereCommand extends \wcf\system\chat\command\AbstractCommand {
$users = $room->getUsers(); $users = $room->getUsers();
$tmp = array(); $tmp = array();
foreach ($users as $user) { foreach ($users as $user) {
$profile = \wcf\system\request\LinkHandler::getInstance()->getLink('User', array( $tmp[] = '<span class="userLink" data-user-id="'.$user->userID.'" />';
'object' => $user
));
$tmp[] = '<a href="'.$profile.'">'.$user.'</a>';
} }
if (!empty($tmp)) $lines[] = '<strong>'.$room.':</strong> '.implode(', ', $tmp); if (!empty($tmp)) $lines[] = '[b]'.$room.':[/b] '.implode(', ', $tmp);
} }
return '<ul><li>'.implode('</li><li>', $lines).'</li></ul>'; return '[list][*]'.implode('[*]', $lines).'[/list]';
} }
/** /**

View File

@ -18,6 +18,7 @@ CREATE TABLE wcf1_chat_message (
type TINYINT(3) NOT NULL DEFAULT 1, type TINYINT(3) NOT NULL DEFAULT 1,
message MEDIUMTEXT NOT NULL, message MEDIUMTEXT NOT NULL,
enableSmilies TINYINT(1) NOT NULL DEFAULT 1, enableSmilies TINYINT(1) NOT NULL DEFAULT 1,
enableBBCodes TINYINT(1) NOT NULL DEFAULT 0,
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,

View File

@ -37,6 +37,12 @@
<defaultvalue>1</defaultvalue> <defaultvalue>1</defaultvalue>
<showorder>5</showorder> <showorder>5</showorder>
</option> </option>
<option name="chat_enable_bbcodes">
<categoryname>chat.general</categoryname>
<optiontype>boolean</optiontype>
<defaultvalue>1</defaultvalue>
<showorder>6</showorder>
</option>
<option name="chat_max_length"> <option name="chat_max_length">
<categoryname>chat.general</categoryname> <categoryname>chat.general</categoryname>
<optiontype>integer</optiontype> <optiontype>integer</optiontype>