Validate the file extensions using lower case
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / message / quote / AbstractMessageQuoteHandler.class.php
... / ...
CommitLineData
1<?php
2
3namespace wcf\system\message\quote;
4
5use wcf\system\cache\runtime\UserProfileRuntimeCache;
6use wcf\system\SingletonFactory;
7use wcf\system\WCF;
8
9/**
10 * Default implementation for quote handlers.
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>
15 */
16abstract 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);
113}