Skip to content

Commit 6668080

Browse files
committed
Save conversation message data
1 parent b82cca5 commit 6668080

File tree

3 files changed

+99
-1
lines changed

3 files changed

+99
-1
lines changed

files/lib/data/conversation/ConversationAction.class.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,21 @@ public function update()
216216

217217
parent::update();
218218

219+
if (isset($this->parameters['messageData'])) {
220+
$messageIDs = [];
221+
foreach ($this->getObjects() as $conversation) {
222+
$messageIDs[] = $conversation->getFirstMessage()->messageID;
223+
}
224+
225+
if ($messageIDs !== []) {
226+
(new ConversationMessageAction(
227+
$messageIDs,
228+
'update',
229+
$this->parameters['messageData']
230+
))->executeAction();
231+
}
232+
}
233+
219234
foreach ($this->getObjects() as $conversation) {
220235
// participants
221236
if (!empty($this->parameters['participants']) || !empty($this->parameters['invisibleParticipants'])) {

files/lib/form/ConversationAddForm.class.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ function (IFormDocument $document, array $parameters) {
261261
'participants' => $parameters['participants'] ?? [],
262262
'invisibleParticipants' => $parameters['invisibleParticipants'] ?? [],
263263
]);
264+
265+
unset($parameters['participants'], $parameters['invisibleParticipants']);
264266
} else {
265267
$parameters['data']['draftData'] = \serialize([]);
266268
}
@@ -287,7 +289,11 @@ public function saved()
287289
parent::saved();
288290

289291
/** @var Conversation $conversation */
290-
$conversation = $this->objectAction->getReturnValues()['returnValues'];
292+
if ($this->formAction == 'create') {
293+
$conversation = $this->objectAction->getReturnValues()['returnValues'];
294+
} else {
295+
$conversation = new Conversation($this->formObject->conversationID);
296+
}
291297

292298
if (!$conversation->isDraft) {
293299
FloodControl::getInstance()->registerContent('com.woltlab.wcf.conversation');

files/lib/form/ConversationDraftEditForm.class.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
namespace wcf\form;
44

55
use wcf\data\conversation\Conversation;
6+
use wcf\data\conversation\message\ConversationMessageAction;
7+
use wcf\data\conversation\message\ConversationMessageList;
68
use wcf\system\exception\IllegalLinkException;
9+
use wcf\system\form\builder\data\processor\CustomFormDataProcessor;
10+
use wcf\system\form\builder\IFormDocument;
711
use wcf\system\WCF;
812

913
/**
@@ -20,6 +24,11 @@ class ConversationDraftEditForm extends ConversationAddForm
2024
*/
2125
public $templateName = 'conversationAdd';
2226

27+
/**
28+
* @inheritDoc
29+
*/
30+
public $formAction = 'edit';
31+
2332
#[\Override]
2433
public function readParameters()
2534
{
@@ -33,4 +42,72 @@ public function readParameters()
3342
throw new IllegalLinkException();
3443
}
3544
}
45+
46+
#[\Override]
47+
public function finalizeForm()
48+
{
49+
parent::finalizeForm();
50+
51+
$this->form->getDataHandler()
52+
->addProcessor(
53+
new CustomFormDataProcessor(
54+
'messageDataProcessor',
55+
function (IFormDocument $document, array $parameters) {
56+
$messageData = [
57+
'htmlInputProcessor' => $parameters['message_htmlInputProcessor'],
58+
'attachmentHandler' => $parameters['message_attachmentHandler'],
59+
'data' => [],
60+
];
61+
if ($parameters['data']['isDraft']) {
62+
$messageData['data']['time'] = TIME_NOW;
63+
}
64+
65+
unset($parameters['message_htmlInputProcessor'], $parameters['message_attachmentHandler']);
66+
67+
$parameters['messageData'] = $messageData;
68+
69+
return $parameters;
70+
}
71+
)
72+
)
73+
->addProcessor(
74+
new CustomFormDataProcessor('timeProcessor', function (IFormDocument $document, array $parameters) {
75+
if (!$parameters['data']['isDraft']) {
76+
$parameters['data']['time'] = $parameters['data']['lastPostTime'] = TIME_NOW;
77+
}
78+
79+
return $parameters;
80+
})
81+
);
82+
}
83+
84+
#[\Override]
85+
public function saved()
86+
{
87+
// Reload conversation object to get updated data.
88+
$conversation = new Conversation($this->formObject->conversationID);
89+
90+
// Update timestamp of other messages in this draft.
91+
if (!$conversation->isDraft) {
92+
$list = new ConversationMessageList();
93+
$list->getConditionBuilder()->add('conversationID = ?', [$conversation->conversationID]);
94+
$list->getConditionBuilder()->add('messageID <> ?', [$conversation->getFirstMessage()->messageID]);
95+
$list->readObjectIDs();
96+
97+
if (\count($list->getObjectIDs())) {
98+
$messageAction = new ConversationMessageAction(
99+
$list->getObjectIDs(),
100+
'update',
101+
[
102+
'data' => [
103+
'time' => TIME_NOW,
104+
],
105+
]
106+
);
107+
$messageAction->executeAction();
108+
}
109+
}
110+
111+
parent::saved();
112+
}
36113
}

0 commit comments

Comments
 (0)