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