2 namespace wcf\system\worker
;
3 use wcf\data\conversation\message\ConversationMessageEditor
;
4 use wcf\data\conversation\message\ConversationMessageList
;
5 use wcf\data\
object\type\ObjectTypeCache
;
6 use wcf\system\message\embedded\
object\MessageEmbeddedObjectManager
;
7 use wcf\system\search\SearchIndexManager
;
11 * Worker implementation for updating conversation messages.
14 * @copyright 2001-2016 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package com.woltlab.wcf
17 * @subpackage system.worker
18 * @category Community Framework
20 class ConversationMessageRebuildDataWorker
extends AbstractRebuildDataWorker
{
24 protected $limit = 500;
29 public function countObjects() {
30 if ($this->count
=== null) {
32 $sql = "SELECT MAX(messageID) AS messageID
33 FROM wcf".WCF_N
."_conversation_message";
34 $statement = WCF
::getDB()->prepareStatement($sql);
35 $statement->execute();
36 $row = $statement->fetchArray();
37 if ($row !== false) $this->count
= $row['messageID'];
44 protected function initObjectList() {
45 $this->objectList
= new ConversationMessageList();
46 $this->objectList
->sqlOrderBy
= 'conversation_message.messageID';
47 $this->objectList
->sqlSelects
= 'conversation.subject';
48 $this->objectList
->sqlJoins
= 'LEFT JOIN wcf'.WCF_N
.'_conversation conversation ON (conversation.firstMessageID = conversation_message.messageID)';
54 public function execute() {
55 $this->objectList
->getConditionBuilder()->add('conversation_message.messageID BETWEEN ? AND ?', [$this->limit
* $this->loopCount +
1, $this->limit
* $this->loopCount +
$this->limit
]);
59 if (!$this->loopCount
) {
61 SearchIndexManager
::getInstance()->reset('com.woltlab.wcf.conversation.message');
65 $attachmentObjectType = ObjectTypeCache
::getInstance()->getObjectTypeByName('com.woltlab.wcf.attachment.objectType', 'com.woltlab.wcf.conversation.message');
66 $sql = "SELECT COUNT(*) AS attachments
67 FROM wcf".WCF_N
."_attachment
68 WHERE objectTypeID = ?
70 $attachmentStatement = WCF
::getDB()->prepareStatement($sql);
72 foreach ($this->objectList
as $message) {
73 SearchIndexManager
::getInstance()->add('com.woltlab.wcf.conversation.message', $message->messageID
, $message->message
, ($message->subject ?
: ''), $message->time
, $message->userID
, $message->username
);
75 $editor = new ConversationMessageEditor($message);
79 $attachmentStatement->execute([$attachmentObjectType->objectTypeID
, $message->messageID
]);
80 $row = $attachmentStatement->fetchSingleRow();
81 $data['attachments'] = $row['attachments'];
83 // update embedded objects
84 $data['hasEmbeddedObjects'] = (MessageEmbeddedObjectManager
::getInstance()->registerObjects('com.woltlab.wcf.conversation.message', $message->messageID
, $message->message
) ?
1 : 0);
86 $editor->update($data);