3 namespace wcf\system\search
;
5 use wcf\data\conversation\Conversation
;
6 use wcf\data\conversation\message\SearchResultConversationMessage
;
7 use wcf\data\conversation\message\SearchResultConversationMessageList
;
8 use wcf\data\search\ISearchResultObject
;
9 use wcf\system\database\util\PreparedStatementConditionBuilder
;
13 * An implementation of ISearchProvider for searching in conversations.
16 * @copyright 2001-2019 WoltLab GmbH
17 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
19 final class ConversationMessageSearch
extends AbstractSearchProvider
24 private $conversationID = 0;
27 * searched conversation
30 private $conversation;
33 * @var SearchResultConversationMessage[]
35 private $messageCache = [];
40 public function cacheObjects(array $objectIDs, ?
array $additionalData = null): void
42 $messageList = new SearchResultConversationMessageList();
43 $messageList->setObjectIDs($objectIDs);
44 $messageList->readObjects();
45 foreach ($messageList->getObjects() as $message) {
46 $this->messageCache
[$message->messageID
] = $message;
53 public function getAdditionalData(): ?
array
56 'conversationID' => $this->conversationID
,
63 public function getObject(int $objectID): ?ISearchResultObject
65 return $this->messageCache
[$objectID] ??
null;
71 public function getJoins(): string
73 return " JOIN wcf" . WCF_N
. "_conversation_to_user conversation_to_user
74 ON conversation_to_user.participantID = " . WCF
::getUser()->userID
. "
75 AND conversation_to_user.conversationID = " . $this->getTableName() . ".conversationID
76 LEFT JOIN wcf" . WCF_N
. "_conversation conversation
77 ON conversation.conversationID = " . $this->getTableName() . ".conversationID";
83 public function getTableName(): string
85 return 'wcf' . WCF_N
. '_conversation_message';
91 public function getIDFieldName(): string
93 return $this->getTableName() . '.messageID';
99 public function getSubjectFieldName(): string
101 return 'conversation.subject';
107 public function getConditionBuilder(array $parameters): ?PreparedStatementConditionBuilder
109 $this->readParameters($parameters);
111 $conditionBuilder = new PreparedStatementConditionBuilder();
112 $conditionBuilder->add('conversation_to_user.hideConversation IN (0,1)');
113 if ($this->conversationID
) {
114 $conditionBuilder->add('conversation.conversationID = ?', [$this->conversationID
]);
117 return $conditionBuilder;
123 public function isAccessible(): bool
125 if (!WCF
::getUser()->userID
) {
128 if (!MODULE_CONVERSATION
) {
132 return WCF
::getSession()->getPermission('user.conversation.canUseConversation');
138 public function getFormTemplateName(): string
140 if ($this->conversation
) {
141 return 'searchConversationMessage';
150 public function assignVariables(): void
152 if (!empty($_REQUEST['conversationID'])) {
153 $conversation = Conversation
::getUserConversation(\
intval($_REQUEST['conversationID']), WCF
::getUser()->userID
);
154 if ($conversation !== null && $conversation->canRead()) {
155 $this->conversation
= $conversation;
156 WCF
::getTPL()->assign('searchedConversation', $conversation);
164 private function readParameters(array $parameters): void
166 if (!empty($parameters['conversationID'])) {
167 $this->conversationID
= \
intval($parameters['conversationID']);