3 namespace wcf\system\worker
;
5 use wcf\data\conversation\ConversationList
;
6 use wcf\data\conversation\message\ConversationMessageList
;
7 use wcf\system\search\SearchIndexManager
;
11 * Worker implementation for updating the search index of conversation messages.
13 * @author Tim Duesterhus
14 * @copyright 2001-2019 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package WoltLabSuite\Core\System\Worker
18 * @method ConversationMessageList getObjectList()
20 final class ConversationMessageSearchIndexRebuildDataWorker
extends AbstractRebuildDataWorker
25 protected $limit = 1000;
30 public function countObjects()
32 if ($this->count
=== null) {
34 $sql = "SELECT MAX(messageID) AS messageID
35 FROM wcf" . WCF_N
. "_conversation_message";
36 $statement = WCF
::getDB()->prepareStatement($sql);
37 $statement->execute();
38 $row = $statement->fetchArray();
40 $this->count
= $row['messageID'];
48 protected function initObjectList()
50 $this->objectList
= new ConversationMessageList();
51 $this->objectList
->sqlOrderBy
= 'conversation_message.messageID';
57 public function execute()
59 $this->objectList
->getConditionBuilder()->add(
60 'conversation_message.messageID BETWEEN ? AND ?',
61 [$this->limit
* $this->loopCount +
1, $this->limit
* $this->loopCount +
$this->limit
]
66 if (!$this->loopCount
) {
68 SearchIndexManager
::getInstance()->reset('com.woltlab.wcf.conversation.message');
71 if (!\
count($this->objectList
)) {
75 // read associated conversations
76 $conversationIDs = \array_column
(
77 $this->getObjectList()->getObjects(),
81 $threadList = new ConversationList();
82 $threadList->setObjectIDs($conversationIDs);
83 $threadList->readObjects();
84 $conversations = $threadList->getObjects();
86 foreach ($this->getObjectList() as $message) {
87 $message->setConversation($conversations[$message->conversationID
]);
90 if ($message->messageID
== $message->getConversation()->firstMessageID
) {
91 $subject = $message->getTitle();
94 SearchIndexManager
::getInstance()->set(
95 'com.woltlab.wcf.conversation.message',