Skip to content

Commit 42a4663

Browse files
committed
Like Importer
1 parent 772d30c commit 42a4663

6 files changed

Lines changed: 130 additions & 0 deletions

File tree

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ 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
2627
'dev.hanashi.wsdb.links.option.values' => 'OptionValues',
2728
'dev.hanashi.wsdb.links.comment' => 'Comments',
2829
'dev.hanashi.wsdb.links.comment.response' => 'CommentResponses',
30+
'dev.hanashi.wsdb.links.reaction' => 'Reactions',
2931
];
3032

3133
#[\Override]
@@ -93,6 +95,9 @@ public function getQueue()
9395
$queue[] = 'dev.hanashi.wsdb.links.comment.response';
9496
}
9597
}
98+
if (\in_array('dev.hanashi.wsdb.links.reaction', $this->selectedData)) {
99+
$queue[] = 'dev.hanashi.wsdb.links.reaction';
100+
}
96101
}
97102
}
98103

@@ -112,6 +117,7 @@ public function getSupportedData(): array
112117
'dev.hanashi.wsdb.links.option.values',
113118
'dev.hanashi.wsdb.links.comment',
114119
'dev.hanashi.wsdb.links.comment.response',
120+
'dev.hanashi.wsdb.links.reaction',
115121
],
116122
];
117123
}
@@ -645,6 +651,56 @@ public function exportCommentResponses(int $offset, int $limit): void
645651
}
646652
}
647653

654+
public function countReactions(): int
655+
{
656+
$objectType = ObjectTypeCache::getInstance()->getObjectTypeByName(
657+
'com.woltlab.wcf.like.likeableObject',
658+
'de.pehbeh.links.likeableLinkEntry'
659+
);
660+
if ($objectType === null) {
661+
return 0;
662+
}
663+
664+
$sql = "SELECT COUNT(*)
665+
FROM wcf1_like
666+
WHERE objectTypeID = ?";
667+
$statement = $this->database->prepare($sql);
668+
$statement->execute([$objectType->objectTypeID]);
669+
670+
return $statement->fetchSingleColumn();
671+
}
672+
673+
public function exportReactions(int $offset, int $limit): void
674+
{
675+
$objectType = ObjectTypeCache::getInstance()->getObjectTypeByName(
676+
'com.woltlab.wcf.like.likeableObject',
677+
'de.pehbeh.links.likeableLinkEntry'
678+
);
679+
if ($objectType === null) {
680+
return;
681+
}
682+
683+
$sql = "SELECT *
684+
FROM wcf1_like
685+
WHERE objectTypeID = ?
686+
ORDER BY likeID";
687+
$statement = $this->database->prepareUnmanaged($sql, $limit, $offset);
688+
$statement->execute([$objectType->objectTypeID]);
689+
while ($row = $statement->fetchArray()) {
690+
$data = [
691+
'objectID' => $row['objectID'],
692+
'objectUserID' => $row['objectUserID'],
693+
'userID' => $row['userID'],
694+
'likeValue' => $row['likeValue'],
695+
'time' => $row['time'],
696+
];
697+
698+
ImportHandler::getInstance()
699+
->getImporter('dev.hanashi.wsdb.links.reaction')
700+
->import(0, $data);
701+
}
702+
}
703+
648704
/**
649705
* @return array<int, string[]>
650706
*/

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function import($oldID, array $data, array $additionalData = []): int
4242
'comments' => $data['comments'],
4343
'coverPhotoID' => $this->getCoverPhotoID($data['imageFile']),
4444
'externalURL' => $this->getLink($data),
45+
'reactions' => $data['cumulativeLikes'],
4546
],
4647
'content' => [
4748
0 => $contentData,
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
namespace wcf\system\wsdb\importer;
4+
5+
use wcf\data\object\type\ObjectTypeCache;
6+
use wcf\system\importer\AbstractLikeImporter;
7+
use wcf\system\importer\ImportHandler;
8+
use wcf\system\reaction\ReactionHandler;
9+
use wcf\system\WCF;
10+
11+
final class LinkReactionImporter extends AbstractLikeImporter
12+
{
13+
public function __construct()
14+
{
15+
$databaseID = ImportHandler::getInstance()->getNewID('dev.hanashi.wsdb.links', 1);
16+
$objectType = ObjectTypeCache::getInstance()->getObjectTypeByName(
17+
'com.woltlab.wcf.like.likeableObject',
18+
'com.woltlab.wsdb.db' . $databaseID . '.reaction'
19+
);
20+
$this->objectTypeID = $objectType->objectTypeID;
21+
}
22+
23+
#[\Override]
24+
public function import($oldID, array $data, array $additionalData = [])
25+
{
26+
$data['objectID'] = ImportHandler::getInstance()->getNewID('dev.hanashi.wsdb.links.links', $data['objectID']);
27+
if (!$data['objectID']) {
28+
return 0;
29+
}
30+
31+
if (empty($data['time'])) {
32+
$data['time'] = 1;
33+
}
34+
35+
if (!isset($data['reactionTypeID'])) {
36+
if ($data['likeValue'] == 1) {
37+
$data['reactionTypeID'] = ReactionHandler::getInstance()->getFirstReactionTypeID();
38+
} else {
39+
$data['reactionTypeID'] = self::getDislikeReactionTypeID();
40+
}
41+
} else {
42+
$data['reactionTypeID'] = ImportHandler::getInstance()
43+
->getNewID('com.woltlab.wcf.reactionType', $data['reactionTypeID']);
44+
}
45+
46+
if (empty($data['reactionTypeID'])) {
47+
return 0;
48+
}
49+
50+
$sql = "INSERT IGNORE INTO wcf1_like
51+
(objectID, objectTypeID, objectUserID, userID, time, likeValue, reactionTypeID)
52+
VALUES (?, ?, ?, ?, ?, ?, ?)";
53+
$statement = WCF::getDB()->prepare($sql);
54+
$statement->execute([
55+
$data['objectID'],
56+
$this->objectTypeID,
57+
$data['objectUserID'],
58+
$data['userID'],
59+
$data['time'],
60+
$data['likeValue'],
61+
$data['reactionTypeID'],
62+
]);
63+
64+
return 0;
65+
}
66+
}

language/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option.values"><![CDATA[Eingabefeld-Werte]]></item>
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>
28+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.reaction"><![CDATA[Reaktionen]]></item>
2829
</category>
2930
</import>
3031
</language>

language/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option.values"><![CDATA[Values of input fields]]></item>
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>
28+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.reaction"><![CDATA[Reactions]]></item>
2829
</category>
2930
</import>
3031
</language>

objectType.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,10 @@
5151
<definitionname>com.woltlab.wcf.importer</definitionname>
5252
<classname>wcf\system\wsdb\importer\LinkCommentResponseImporter</classname>
5353
</type>
54+
<type>
55+
<name>dev.hanashi.wsdb.links.reaction</name>
56+
<definitionname>com.woltlab.wcf.importer</definitionname>
57+
<classname>wcf\system\wsdb\importer\LinkReactionImporter</classname>
58+
</type>
5459
</import>
5560
</data>

0 commit comments

Comments
 (0)