use wcf\system\user\notification\UserNotificationHandler;
use wcf\system\user\storage\UserStorageHandler;
use wcf\system\WCF;
-use wcf\util\MessageUtil;
use wcf\util\StringUtil;
/**
* @author Marcel Werk
* @copyright 2001-2016 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
- * @package com.woltlab.wcf.conversation
- * @subpackage data.conversation.message
- * @category Community Framework
+ * @package WoltLabSuite\Core\Data\Conversation\Message
*
* @method ConversationMessageEditor[] getObjects()
* @method ConversationMessageEditor getSingleObject()
* @return ConversationMessage
*/
public function create() {
+ if (!isset($this->parameters['data']['enableHtml'])) $this->parameters['data']['enableHtml'] = 1;
+
// count attachments
if (isset($this->parameters['attachmentHandler']) && $this->parameters['attachmentHandler'] !== null) {
$this->parameters['data']['attachments'] = count($this->parameters['attachmentHandler']);
}
if (!empty($this->parameters['htmlInputProcessor'])) {
- /** @var HtmlInputProcessor $htmlInputProcessor */
- $htmlInputProcessor = $this->parameters['htmlInputProcessor'];
- $this->parameters['data']['message'] = $htmlInputProcessor->getHtml();
+ /** @noinspection PhpUndefinedMethodInspection */
+ $this->parameters['data']['message'] = $this->parameters['htmlInputProcessor']->getHtml();
}
// create message
$messageEditor = new ConversationMessageEditor($message);
// get conversation
- $conversation = (isset($this->parameters['converation']) ? $this->parameters['converation'] : new Conversation($message->conversationID));
+ $conversation = (isset($this->parameters['conversation']) ? $this->parameters['conversation'] : new Conversation($message->conversationID));
$conversationEditor = new ConversationEditor($conversation);
if (empty($this->parameters['isFirstPost'])) {
UserStorageHandler::getInstance()->reset($conversation->getParticipantIDs(), 'unreadConversationCount');
// update search index
- SearchIndexManager::getInstance()->add('com.woltlab.wcf.conversation.message', $message->messageID, $message->message, (!empty($this->parameters['isFirstPost']) ? $conversation->subject : ''), $message->time, $message->userID, $message->username);
+ SearchIndexManager::getInstance()->set('com.woltlab.wcf.conversation.message', $message->messageID, $message->message, (!empty($this->parameters['isFirstPost']) ? $conversation->subject : ''), $message->time, $message->userID, $message->username);
// update attachments
if (isset($this->parameters['attachmentHandler']) && $this->parameters['attachmentHandler'] !== null) {
}
// save embedded objects
- if (MessageEmbeddedObjectManager::getInstance()->registerObjects('com.woltlab.wcf.conversation.message', $message->messageID, $message->message)) {
- $messageEditor->update([
- 'hasEmbeddedObjects' => 1
- ]);
+ if (!empty($this->parameters['htmlInputProcessor'])) {
+ /** @noinspection PhpUndefinedMethodInspection */
+ $this->parameters['htmlInputProcessor']->setObjectID($message->messageID);
+
+ if (MessageEmbeddedObjectManager::getInstance()->registerObjects($this->parameters['htmlInputProcessor'])) {
+ $messageEditor->update(['hasEmbeddedObjects' => 1]);
+ }
}
// clear quotes
$this->parameters['data']['attachments'] = count($this->parameters['attachmentHandler']);
}
+ if (!empty($this->parameters['htmlInputProcessor'])) {
+ /** @noinspection PhpUndefinedMethodInspection */
+ $this->parameters['data']['message'] = $this->parameters['htmlInputProcessor']->getHtml();
+ }
+
parent::update();
// update search index / embedded objects
if (isset($this->parameters['data']) && isset($this->parameters['data']['message'])) {
foreach ($this->getObjects() as $message) {
$conversation = $message->getConversation();
- SearchIndexManager::getInstance()->update('com.woltlab.wcf.conversation.message', $message->messageID, $this->parameters['data']['message'], ($conversation->firstMessageID == $message->messageID ? $conversation->subject : ''), $message->time, $message->userID, $message->username);
+ SearchIndexManager::getInstance()->set('com.woltlab.wcf.conversation.message', $message->messageID, $this->parameters['data']['message'], ($conversation->firstMessageID == $message->messageID ? $conversation->subject : ''), $message->time, $message->userID, $message->username);
- if ($message->hasEmbeddedObjects != MessageEmbeddedObjectManager::getInstance()->registerObjects('com.woltlab.wcf.conversation.message', $message->messageID, $this->parameters['data']['message'])) {
- $message->update([
- 'hasEmbeddedObjects' => ($message->hasEmbeddedObjects ? 0 : 1)
- ]);
+ if (!empty($this->parameters['htmlInputProcessor'])) {
+ /** @noinspection PhpUndefinedMethodInspection */
+ $this->parameters['htmlInputProcessor']->setObjectID($message->messageID);
+
+ if ($message->hasEmbeddedObjects != MessageEmbeddedObjectManager::getInstance()->registerObjects($this->parameters['htmlInputProcessor'])) {
+ $message->update(['hasEmbeddedObjects' => ($message->hasEmbeddedObjects ? 0 : 1)]);
+ }
}
}
}
if (!empty($this->objectIDs)) {
// delete notifications
- UserNotificationHandler::getInstance()->deleteNotifications('conversationMessage', 'com.woltlab.wcf.conversation.message.notification', [], $this->objectIDs);
+ UserNotificationHandler::getInstance()->removeNotifications('com.woltlab.wcf.conversation.message.notification', $this->objectIDs);
// update search index
SearchIndexManager::getInstance()->delete('com.woltlab.wcf.conversation.message', $this->objectIDs);
* @inheritDoc
*/
public function validateQuickReply() {
- QuickReplyManager::getInstance()->setAllowedBBCodes(explode(',', WCF::getSession()->getPermission('user.message.allowedBBCodes')));
+ QuickReplyManager::getInstance()->setDisallowedBBCodes(explode(',', WCF::getSession()->getPermission('user.message.disallowedBBCodes')));
QuickReplyManager::getInstance()->validateParameters($this, $this->parameters, Conversation::class);
}
if (!$this->message->canEdit()) {
throw new PermissionDeniedException();
}
+
+ BBCodeHandler::getInstance()->setDisallowedBBCodes(explode(',', WCF::getSession()->getPermission('user.message.disallowedBBCodes')));
}
/**
* @inheritDoc
*/
public function beginEdit() {
- BBCodeHandler::getInstance()->setAllowedBBCodes(explode(',', WCF::getSession()->getPermission('user.message.allowedBBCodes')));
-
WCF::getTPL()->assign([
'defaultSmilies' => SmileyCache::getInstance()->getCategorySmilies(),
'message' => $this->message,
$this->validateBeginEdit();
- $this->validateMessage($this->conversation, $this->getHtmlInputProcessor($this->parameters['data']['message']));
+ $this->validateMessage($this->conversation, $this->getHtmlInputProcessor($this->parameters['data']['message'], $this->message->messageID));
}
/**
* @inheritDoc
*/
public function save() {
- $data = [
- //'message' => PreParser::getInstance()->parse(MessageUtil::stripCrap($this->parameters['data']['message']), explode(',', WCF::getSession()->getPermission('user.message.allowedBBCodes')))
- ];
+ $data = [];
if (!$this->message->getConversation()->isDraft) {
$data['lastEditTime'] = TIME_NOW;
$data['editCount'] = $this->message->editCount + 1;
}
// execute update action
- $action = new ConversationMessageAction([$this->message], 'update', ['data' => $data]);
+ $action = new ConversationMessageAction([$this->message], 'update', [
+ 'data' => $data,
+ 'htmlInputProcessor' => $this->getHtmlInputProcessor()
+ ]);
$action->executeAction();
// load new message
* @inheritDoc
*/
public function validateMessage(DatabaseObject $container, HtmlInputProcessor $htmlInputProcessor) {
- /*if (mb_strlen($message) > WCF::getSession()->getPermission('user.conversation.maxLength')) {
+ $message = $htmlInputProcessor->getTextContent();
+ if (mb_strlen($message) > WCF::getSession()->getPermission('user.conversation.maxLength')) {
throw new UserInputException('message', WCF::getLanguage()->getDynamicVariable('wcf.message.error.tooLong', ['maxTextLength' => WCF::getSession()->getPermission('user.conversation.maxLength')]));
}
// search for disallowed bbcodes
- $disallowedBBCodes = BBCodeParser::getInstance()->validateBBCodes($message, explode(',', WCF::getSession()->getPermission('user.message.allowedBBCodes')));
+ $disallowedBBCodes = $htmlInputProcessor->validate();
if (!empty($disallowedBBCodes)) {
throw new UserInputException('text', WCF::getLanguage()->getDynamicVariable('wcf.message.error.disallowedBBCodes', ['disallowedBBCodes' => $disallowedBBCodes]));
}
if ($result) {
throw new UserInputException('message', WCF::getLanguage()->getDynamicVariable('wcf.message.error.censoredWordsFound', ['censoredWords' => $result]));
}
- }*/
+ }
}
/**
/**
* @inheritDoc
*/
- public function getHtmlInputProcessor($message = null) {
+ public function getHtmlInputProcessor($message = null, $objectID = 0) {
if ($message === null) {
return $this->htmlInputProcessor;
}
$this->htmlInputProcessor = new HtmlInputProcessor();
- $this->htmlInputProcessor->process($message);
+ $this->htmlInputProcessor->process($message, 'com.woltlab.wcf.conversation.message', $objectID);
return $this->htmlInputProcessor;
}