Replace @see tags with @inheritDoc tags
[GitHub/WoltLab/com.woltlab.wcf.conversation.git] / files / lib / system / worker / ConversationMessageRebuildDataWorker.class.php
1 <?php
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;
8 use wcf\system\WCF;
9
10 /**
11 * Worker implementation for updating conversation messages.
12 *
13 * @author Marcel Werk
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
19 */
20 class ConversationMessageRebuildDataWorker extends AbstractRebuildDataWorker {
21 /**
22 * @inheritDoc
23 */
24 protected $limit = 500;
25
26 /**
27 * @inheritDoc
28 */
29 public function countObjects() {
30 if ($this->count === null) {
31 $this->count = 0;
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'];
38 }
39 }
40
41 /**
42 * @inheritDoc
43 */
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)';
49 }
50
51 /**
52 * @inheritDoc
53 */
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]);
56
57 parent::execute();
58
59 if (!$this->loopCount) {
60 // reset search index
61 SearchIndexManager::getInstance()->reset('com.woltlab.wcf.conversation.message');
62 }
63
64 // prepare statements
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 = ?
69 AND objectID = ?";
70 $attachmentStatement = WCF::getDB()->prepareStatement($sql);
71
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);
74
75 $editor = new ConversationMessageEditor($message);
76 $data = [];
77
78 // count attachments
79 $attachmentStatement->execute([$attachmentObjectType->objectTypeID, $message->messageID]);
80 $row = $attachmentStatement->fetchSingleRow();
81 $data['attachments'] = $row['attachments'];
82
83 // update embedded objects
84 $data['hasEmbeddedObjects'] = (MessageEmbeddedObjectManager::getInstance()->registerObjects('com.woltlab.wcf.conversation.message', $message->messageID, $message->message) ? 1 : 0);
85
86 $editor->update($data);
87 }
88 }
89 }