Skip to content

Commit a83ecc8

Browse files
committed
fix attachment import
1 parent 42a4663 commit a83ecc8

File tree

6 files changed

+117
-29
lines changed

6 files changed

+117
-29
lines changed

files/lib/system/wsdb/exporter/LinkDatabaseExporter.class.php

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ final class LinkDatabaseExporter extends AbstractExporter
2323
'dev.hanashi.wsdb.links.category.acl' => 'CategoryACLs',
2424
'dev.hanashi.wsdb.links.option' => 'Options',
2525
'dev.hanashi.wsdb.links.links' => 'Links',
26-
// TODO: attachment importer
26+
'dev.hanashi.wsdb.links.attachments' => 'Attachments',
2727
'dev.hanashi.wsdb.links.option.values' => 'OptionValues',
2828
'dev.hanashi.wsdb.links.comment' => 'Comments',
2929
'dev.hanashi.wsdb.links.comment.response' => 'CommentResponses',
@@ -83,6 +83,9 @@ public function getQueue()
8383
}
8484
if (\in_array('dev.hanashi.wsdb.links.links', $this->selectedData)) {
8585
$queue[] = 'dev.hanashi.wsdb.links.links';
86+
if (\in_array('dev.hanashi.wsdb.links.attachments', $this->selectedData)) {
87+
$queue[] = 'dev.hanashi.wsdb.links.attachments';
88+
}
8689
if (
8790
\in_array('dev.hanashi.wsdb.links.option', $this->selectedData)
8891
&& \in_array('dev.hanashi.wsdb.links.option.values', $this->selectedData)
@@ -114,6 +117,7 @@ public function getSupportedData(): array
114117
'dev.hanashi.wsdb.links.category.acl',
115118
'dev.hanashi.wsdb.links.option',
116119
'dev.hanashi.wsdb.links.links',
120+
'dev.hanashi.wsdb.links.attachments',
117121
'dev.hanashi.wsdb.links.option.values',
118122
'dev.hanashi.wsdb.links.comment',
119123
'dev.hanashi.wsdb.links.comment.response',
@@ -488,6 +492,37 @@ public function exportLinks(int $offset, int $limit): void
488492
}
489493
}
490494

495+
public function countAttachments(): int
496+
{
497+
$sql = "SELECT COUNT(*)
498+
FROM wcf1_links
499+
WHERE attachments <> ?";
500+
501+
$statement = $this->database->prepare($sql);
502+
$statement->execute([0]);
503+
504+
return $statement->fetchSingleColumn();
505+
}
506+
507+
public function exportAttachments(int $offset, int $limit): void
508+
{
509+
$sql = "SELECT linkID
510+
FROM wcf1_links
511+
WHERE attachments <> ?
512+
ORDER BY linkID";
513+
$statement = $this->database->prepare($sql, $limit, $offset);
514+
$statement->execute([0]);
515+
516+
while ($row = $statement->fetchArray()) {
517+
ImportHandler::getInstance()
518+
->getImporter('dev.hanashi.wsdb.links.attachments')
519+
->import(
520+
0,
521+
$row
522+
);
523+
}
524+
}
525+
491526
public function countOptionValues(): int
492527
{
493528
return $this->countLinks();
@@ -632,7 +667,7 @@ public function exportCommentResponses(int $offset, int $limit): void
632667
WHERE objectTypeID = ?
633668
)
634669
ORDER BY responseID";
635-
$statement = $this->database->prepareUnmanaged($sql, $limit, $offset);
670+
$statement = $this->database->prepare($sql, $limit, $offset);
636671
$statement->execute([$objectType->objectTypeID]);
637672
while ($row = $statement->fetchArray()) {
638673
$data = [
@@ -684,7 +719,7 @@ public function exportReactions(int $offset, int $limit): void
684719
FROM wcf1_like
685720
WHERE objectTypeID = ?
686721
ORDER BY likeID";
687-
$statement = $this->database->prepareUnmanaged($sql, $limit, $offset);
722+
$statement = $this->database->prepare($sql, $limit, $offset);
688723
$statement->execute([$objectType->objectTypeID]);
689724
while ($row = $statement->fetchArray()) {
690725
$data = [
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
namespace wcf\system\wsdb\importer;
4+
5+
use wcf\command\wsdb\record\SetRecordContent;
6+
use wcf\data\attachment\AttachmentAction;
7+
use wcf\data\object\type\ObjectTypeCache;
8+
use wcf\data\wsdb\record\Record;
9+
use wcf\system\html\input\HtmlInputProcessor;
10+
use wcf\system\importer\AbstractAttachmentImporter;
11+
use wcf\system\importer\ImportHandler;
12+
13+
final class LinkAttachmentImporter extends AbstractAttachmentImporter
14+
{
15+
public function __construct()
16+
{
17+
$objectType = ObjectTypeCache::getInstance()->getObjectTypeByName(
18+
'com.woltlab.wcf.attachment.objectType',
19+
'com.woltlab.wsdb.record'
20+
);
21+
$this->objectTypeID = $objectType->objectTypeID;
22+
}
23+
24+
#[\Override]
25+
public function import($oldID, array $data, array $additionalData = [])
26+
{
27+
$recordID = ImportHandler::getInstance()->getNewID('dev.hanashi.wsdb.links.links', $data['linkID']);
28+
$record = new Record($recordID);
29+
if (!$record->recordID) {
30+
return 0;
31+
}
32+
$content = $record->getRecordContent();
33+
if ($content === null) {
34+
return 0;
35+
}
36+
37+
try {
38+
$action = new AttachmentAction([], 'copy', [
39+
'sourceObjectType' => 'de.pehbeh.links.linkEntry',
40+
'targetObjectType' => 'com.woltlab.wsdb.record',
41+
'sourceObjectID' => $data['linkID'],
42+
'targetObjectID' => $content->contentID,
43+
]);
44+
$returnValues = $action->executeAction()['returnValues'];
45+
$attachmentIDs = $returnValues['attachmentIDs'];
46+
47+
$recordContent = $content->getData();
48+
foreach ($attachmentIDs as $oldAttachmentID => $attachmentID) {
49+
if (
50+
(
51+
$newMessage = $this->fixEmbeddedAttachments(
52+
$recordContent['description'],
53+
$oldAttachmentID,
54+
$attachmentID
55+
)
56+
) !== false
57+
) {
58+
$recordContent['description'] = $newMessage;
59+
}
60+
}
61+
62+
$htmlInputProcessor = new HtmlInputProcessor();
63+
$htmlInputProcessor->process($recordContent['description'], 'com.woltlab.wsdb.record', $content->contentID);
64+
$recordContent['htmlInputProcessor'] = $htmlInputProcessor;
65+
66+
(new SetRecordContent($record, [0 => $recordContent]))();
67+
} catch (\Throwable) {
68+
}
69+
70+
return 0;
71+
}
72+
}

files/lib/system/wsdb/importer/LinkLinkImporter.class.php

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@
22

33
namespace wcf\system\wsdb\importer;
44

5-
use wcf\command\wsdb\record\SetRecordContent;
6-
use wcf\data\attachment\AttachmentAction;
75
use wcf\data\file\FileEditor;
86
use wcf\data\page\Page;
97
use wcf\data\wsdb\record\Record;
108
use wcf\data\wsdb\record\RecordAction;
11-
use wcf\system\attachment\AttachmentHandler;
12-
use wcf\system\html\input\HtmlInputProcessor;
139
use wcf\system\importer\AbstractImporter;
1410
use wcf\system\importer\ImportHandler;
1511

@@ -53,28 +49,6 @@ public function import($oldID, array $data, array $additionalData = []): int
5349

5450
ImportHandler::getInstance()->saveNewID('dev.hanashi.wsdb.links.links', $oldID, $record->recordID);
5551

56-
if ($data['attachments']) {
57-
try {
58-
$action = new AttachmentAction([], 'copy', [
59-
'sourceObjectType' => 'de.pehbeh.links.linkEntry',
60-
'targetObjectType' => 'com.woltlab.wsdb.record',
61-
'sourceObjectID' => $oldID,
62-
'targetObjectID' => $record->recordID,
63-
]);
64-
$action->executeAction()['returnValues'];
65-
66-
$attachmentHandler = new AttachmentHandler('com.woltlab.wsdb.record', $record->recordID);
67-
$contentData['attachmentHandler'] = $attachmentHandler;
68-
} catch (\Throwable) {
69-
}
70-
}
71-
72-
$htmlInputProcessor = new HtmlInputProcessor();
73-
$htmlInputProcessor->process($data['message'], 'com.woltlab.wsdb.record', $record->recordID);
74-
$contentData['htmlInputProcessor'] = $htmlInputProcessor;
75-
76-
(new SetRecordContent($record, [0 => $contentData]))();
77-
7852
return $record->recordID;
7953
}
8054

language/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.comment"><![CDATA[Kommentare]]></item>
2727
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.comment.response"><![CDATA[Antworten auf Kommentare]]></item>
2828
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.reaction"><![CDATA[Reaktionen]]></item>
29+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.attachments"><![CDATA[Anhänge]]></item>
2930
</category>
3031
</import>
3132
</language>

language/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.comment"><![CDATA[Comments]]></item>
2727
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.comment.response"><![CDATA[Answers to comments]]></item>
2828
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.reaction"><![CDATA[Reactions]]></item>
29+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.attachments"><![CDATA[Attachments]]></item>
2930
</category>
3031
</import>
3132
</language>

objectType.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,10 @@
5656
<definitionname>com.woltlab.wcf.importer</definitionname>
5757
<classname>wcf\system\wsdb\importer\LinkReactionImporter</classname>
5858
</type>
59+
<type>
60+
<name>dev.hanashi.wsdb.links.attachments</name>
61+
<definitionname>com.woltlab.wcf.importer</definitionname>
62+
<classname>wcf\system\wsdb\importer\LinkAttachmentImporter</classname>
63+
</type>
5964
</import>
6065
</data>

0 commit comments

Comments
 (0)