Merge branch '3.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / message / quote / AbstractMessageQuoteHandler.class.php
CommitLineData
d45eaff6
MW
1<?php
2namespace wcf\system\message\quote;
a8c5936e 3use wcf\system\cache\runtime\UserProfileRuntimeCache;
d45eaff6
MW
4use wcf\system\SingletonFactory;
5use wcf\system\WCF;
6
7/**
8 * Default implementation for quote handlers.
9 *
10 * @author Alexander Ebert
c839bd49 11 * @copyright 2001-2018 WoltLab GmbH
d45eaff6 12 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
e71525e4 13 * @package WoltLabSuite\Core\System\Message\Quote
d45eaff6
MW
14 */
15abstract class AbstractMessageQuoteHandler extends SingletonFactory implements IMessageQuoteHandler {
16 /**
17 * template name
18 * @var string
19 */
20 public $templateName = 'messageQuoteList';
21
22 /**
23 * list of quoted message
7a23a706 24 * @var QuotedMessage[]
d45eaff6 25 */
058cbd6a 26 public $quotedMessages = [];
d45eaff6
MW
27
28 /**
0fcfe5f6 29 * @inheritDoc
d45eaff6
MW
30 */
31 public function render(array $data, $supportPaste = false) {
32 $messages = $this->getMessages($data);
1d9d9296
AE
33 $this->overrideIsFullQuote($messages);
34
058cbd6a 35 $userIDs = $userProfiles = [];
d45eaff6
MW
36 foreach ($messages as $message) {
37 $userID = $message->getUserID();
38 if ($userID) {
39 $userIDs[] = $userID;
40 }
41 }
42
43 if (!empty($userIDs)) {
44 $userIDs = array_unique($userIDs);
a8c5936e 45 $userProfiles = UserProfileRuntimeCache::getInstance()->getObjects($userIDs);
d45eaff6
MW
46 }
47
058cbd6a 48 WCF::getTPL()->assign([
1d9d9296 49 'messages' => $messages,
d45eaff6
MW
50 'supportPaste' => $supportPaste,
51 'userProfiles' => $userProfiles
058cbd6a 52 ]);
d45eaff6
MW
53
54 return WCF::getTPL()->fetch($this->templateName);
55 }
56
57 /**
0fcfe5f6 58 * @inheritDoc
d45eaff6 59 */
69cabb77 60 public function renderQuotes(array $data, $render = true, $renderAsString = true) {
d45eaff6 61 $messages = $this->getMessages($data);
1d9d9296 62 $this->overrideIsFullQuote($messages);
d45eaff6 63
058cbd6a 64 $renderedQuotes = [];
d45eaff6
MW
65 foreach ($messages as $message) {
66 foreach ($message as $quoteID => $quote) {
7cdf6715
AE
67 $quotedMessage = $message->getFullQuote($quoteID);
68 if ($render && ($renderAsString && $quotedMessage === null)) {
69cabb77 69 $renderedQuotes[] = MessageQuoteManager::getInstance()->renderQuote($message->object, $quote, $renderAsString);
d45eaff6
MW
70 }
71 else {
69cabb77 72 $renderedQuotes[] = MessageQuoteManager::getInstance()->renderQuote($message->object, ($quotedMessage === null ? $quote : $quotedMessage), $renderAsString);
d45eaff6
MW
73 }
74 }
75 }
76
77 return $renderedQuotes;
78 }
79
1d9d9296
AE
80 /**
81 * Overrides the full quote flag for given message.
82 *
83 * @param QuotedMessage[] $messages
84 */
85 protected function overrideIsFullQuote(array $messages) {
86 foreach ($messages as $message) {
87 $quoteIDs = $message->getQuoteIDs();
88 foreach ($quoteIDs as $quoteID) {
89 $message->setOverrideIsFullQuote($quoteID, MessageQuoteManager::getInstance()->isFullQuote($quoteID));
90 }
91 }
92 }
93
d45eaff6
MW
94 /**
95 * Returns a list of QuotedMessage objects.
96 *
7a23a706
MS
97 * @param mixed[][] $data
98 * @return QuotedMessage[]
d45eaff6
MW
99 */
100 abstract protected function getMessages(array $data);
101}