Skip to content

Commit 8bf0215

Browse files
committed
import options
1 parent e199905 commit 8bf0215

5 files changed

Lines changed: 154 additions & 4 deletions

File tree

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

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ final class LinkDatabaseExporter extends AbstractExporter
2121
'dev.hanashi.wsdb.links.permission' => 'Permissions',
2222
'dev.hanashi.wsdb.links.category' => 'Categories',
2323
'dev.hanashi.wsdb.links.category.acl' => 'CategoryACLs',
24-
'dev.hanashi.wsdb.links.option' => 'Option',
24+
'dev.hanashi.wsdb.links.option' => 'Options',
2525
'dev.hanashi.wsdb.links.links' => 'Links',
26-
'dev.hanashi.wsdb.links.comment' => 'Comment',
27-
'dev.hanashi.wsdb.links.comment.response' => 'CommentResponse',
28-
'dev.hanashi.wsdb.links.bbcode' => 'BBCode',
26+
'dev.hanashi.wsdb.links.option.values' => 'OptionValues',
27+
'dev.hanashi.wsdb.links.comment' => 'Comments',
28+
'dev.hanashi.wsdb.links.comment.response' => 'CommentResponses',
2929
];
3030

3131
#[\Override]
@@ -76,6 +76,9 @@ public function getQueue()
7676
$queue[] = 'dev.hanashi.wsdb.links.category.acl';
7777
}
7878
}
79+
if (\in_array('dev.hanashi.wsdb.links.option', $this->selectedData)) {
80+
$queue[] = 'dev.hanashi.wsdb.links.option';
81+
}
7982
}
8083

8184
return $queue;
@@ -91,6 +94,7 @@ public function getSupportedData(): array
9194
'dev.hanashi.wsdb.links.category.acl',
9295
'dev.hanashi.wsdb.links.option',
9396
'dev.hanashi.wsdb.links.links',
97+
'dev.hanashi.wsdb.links.option.values',
9498
'dev.hanashi.wsdb.links.comment',
9599
'dev.hanashi.wsdb.links.comment.response',
96100
'dev.hanashi.wsdb.links.bbcode',
@@ -390,6 +394,44 @@ public function exportCategoryACLs(int $offset, int $limit): void
390394
}
391395
}
392396

397+
public function countOptions(): int
398+
{
399+
$sql = "SELECT COUNT(*)
400+
FROM wcf1_links_option";
401+
402+
$statement = $this->database->prepare($sql);
403+
$statement->execute();
404+
405+
return $statement->fetchSingleColumn();
406+
}
407+
408+
public function exportOptions(int $offset, int $limit): void
409+
{
410+
$sql = "SELECT optionID,
411+
categoryID
412+
FROM wcf1_links_option_to_category";
413+
$statement = $this->database->prepare($sql);
414+
$statement->execute();
415+
$categories = $statement->fetchMap('optionID', 'categoryID', false);
416+
417+
$sql = "SELECT *
418+
FROM wcf1_links_option";
419+
$statement = $this->database->prepare($sql, $limit, $offset);
420+
$statement->execute();
421+
422+
while ($row = $statement->fetchArray()) {
423+
ImportHandler::getInstance()
424+
->getImporter('dev.hanashi.wsdb.links.option')
425+
->import(
426+
$row['optionID'],
427+
$row,
428+
[
429+
'categories' => $categories[$row['optionID']] ?? [],
430+
]
431+
);
432+
}
433+
}
434+
393435
/**
394436
* @param string[] $i18nValues
395437
* @return string[][][]
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
3+
namespace wcf\system\wsdb\importer;
4+
5+
use wcf\data\wsdb\option\Option;
6+
use wcf\data\wsdb\option\OptionAction;
7+
use wcf\system\importer\AbstractImporter;
8+
use wcf\system\importer\ImportHandler;
9+
use wcf\system\WCF;
10+
use wcf\util\JSON;
11+
use wcf\util\StringUtil;
12+
13+
final class LinkOptionsImporter extends AbstractImporter
14+
{
15+
/**
16+
* @var array<string, string>
17+
*/
18+
private array $optionTypeMap = [
19+
'boolean' => 'boolean',
20+
'checkboxes' => 'checkboxes',
21+
'date' => 'date',
22+
'integer' => 'integer',
23+
'float' => 'float',
24+
'multiSelect' => 'checkboxes',
25+
'radioButton' => 'radioButton',
26+
'select' => 'select',
27+
'text' => 'text',
28+
'textarea' => 'textarea',
29+
'URL' => 'url',
30+
];
31+
32+
#[\Override]
33+
public function import($oldID, array $data, array $additionalData = []): int
34+
{
35+
$databaseID = ImportHandler::getInstance()->getNewID('dev.hanashi.wsdb.links', 1);
36+
if (!$databaseID) {
37+
return 0;
38+
}
39+
40+
if (!isset($this->optionTypeMap[$data['optionType']])) {
41+
return 0;
42+
}
43+
44+
$configuration = [];
45+
if ($data['required']) {
46+
$configuration['required'] = 1;
47+
}
48+
if (!empty($data['selectOptions'])) {
49+
$selectOptions = [];
50+
$lines = \explode("\n", StringUtil::unifyNewlines($data['selectOptions']));
51+
foreach ($lines as $line) {
52+
$lineSplitted = \explode(':', $line, 2);
53+
if (\count($lineSplitted) == 2) {
54+
$selectOptions[] = [
55+
'key' => $lineSplitted[0],
56+
'value' => [$lineSplitted[1]],
57+
];
58+
} else {
59+
$selectOptions[] = [
60+
'key' => $lineSplitted[0],
61+
'value' => [$lineSplitted[0]],
62+
];
63+
}
64+
}
65+
$configuration['selectOptions'] = JSON::encode($selectOptions);
66+
}
67+
68+
$action = new OptionAction([], 'create', [
69+
'data' => [
70+
'databaseID' => $databaseID,
71+
'showOrder' => $data['showOrder'],
72+
'name' => $data['optionTitle'],
73+
'description' => $data['optionDescription'],
74+
'optionType' => $this->optionTypeMap[$data['optionType']],
75+
'configuration' => JSON::encode($configuration),
76+
'isDisabled' => $data['isDisabled'],
77+
'isLimitedToCategories' => $additionalData['categories'] === [] ? 0 : 1,
78+
],
79+
]);
80+
$newOption = $action->executeAction()['returnValues'];
81+
\assert($newOption instanceof Option);
82+
83+
ImportHandler::getInstance()->saveNewID('dev.hanashi.wsdb.links.option', $oldID, $newOption->optionID);
84+
85+
$sql = "INSERT INTO wcf1_wsdb_option_to_record_category
86+
(optionID, categoryID)
87+
VALUES (?, ?)";
88+
$statement = WCF::getDB()->prepare($sql);
89+
90+
foreach ($additionalData['categories'] as $categoryID) {
91+
$newCategoryID = ImportHandler::getInstance()->getNewID('dev.hanashi.wsdb.links.category', $categoryID);
92+
if (!$newCategoryID) {
93+
continue;
94+
}
95+
96+
$statement->execute([$newOption->optionID, $newCategoryID]);
97+
}
98+
99+
return $newOption->optionID;
100+
}
101+
}

language/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.permission"><![CDATA[Berechtigungen]]></item>
2121
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.category"><![CDATA[Kategorien]]></item>
2222
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.category.acl"><![CDATA[Kategorie-Berechtigungen]]></item>
23+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option"><![CDATA[Eingabefelder]]></item>
2324
</category>
2425
</import>
2526
</language>

language/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.permission"><![CDATA[Permissions]]></item>
2121
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.category"><![CDATA[Categories]]></item>
2222
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.category.acl"><![CDATA[Category permissions]]></item>
23+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option"><![CDATA[Input options]]></item>
2324
</category>
2425
</import>
2526
</language>

objectType.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,10 @@
2626
<definitionname>com.woltlab.wcf.importer</definitionname>
2727
<classname>wcf\system\wsdb\importer\LinkCategoryACLImporter</classname>
2828
</type>
29+
<type>
30+
<name>dev.hanashi.wsdb.links.option</name>
31+
<definitionname>com.woltlab.wcf.importer</definitionname>
32+
<classname>wcf\system\wsdb\importer\LinkOptionsImporter</classname>
33+
</type>
2934
</import>
3035
</data>

0 commit comments

Comments
 (0)