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>
17 * @method ConversationMessageList getObjectList()
19 final class ConversationMessageSearchIndexRebuildDataWorker
extends AbstractRebuildDataWorker
24 protected $limit = 1000;
29 public function countObjects()
31 if ($this->count
=== null) {
33 $sql = "SELECT MAX(messageID) AS messageID
34 FROM wcf1_conversation_message";
35 $statement = WCF
::getDB()->prepare($sql);
36 $statement->execute();
37 $row = $statement->fetchArray();
39 $this->count
= $row['messageID'];
47 protected function initObjectList()
49 $this->objectList
= new ConversationMessageList();
50 $this->objectList
->sqlOrderBy
= 'conversation_message.messageID';
56 public function execute()
58 $this->objectList
->getConditionBuilder()->add(
59 'conversation_message.messageID BETWEEN ? AND ?',
60 [$this->limit
* $this->loopCount +
1, $this->limit
* $this->loopCount +
$this->limit
]
65 if (!$this->loopCount
) {
67 SearchIndexManager
::getInstance()->reset('com.woltlab.wcf.conversation.message');
70 if (!\
count($this->objectList
)) {
74 // read associated conversations
75 $conversationIDs = \array_column
(
76 $this->getObjectList()->getObjects(),
80 $threadList = new ConversationList();
81 $threadList->setObjectIDs($conversationIDs);
82 $threadList->readObjects();
83 $conversations = $threadList->getObjects();
85 foreach ($this->getObjectList() as $message) {
86 $message->setConversation($conversations[$message->conversationID
]);
89 if ($message->messageID
== $message->getConversation()->firstMessageID
) {
90 $subject = $message->getTitle();
93 SearchIndexManager
::getInstance()->set(
94 'com.woltlab.wcf.conversation.message',