Skip to content

Commit 511a8fb

Browse files
committed
import options
1 parent d1ef738 commit 511a8fb

6 files changed

Lines changed: 113 additions & 1 deletion

File tree

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

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ public function getQueue()
8181
}
8282
if (\in_array('dev.hanashi.wsdb.links.links', $this->selectedData)) {
8383
$queue[] = 'dev.hanashi.wsdb.links.links';
84-
if (\in_array('dev.hanashi.wsdb.links.option.values', $this->selectedData)) {
84+
if (
85+
\in_array('dev.hanashi.wsdb.links.option', $this->selectedData)
86+
&& \in_array('dev.hanashi.wsdb.links.option.values', $this->selectedData)
87+
) {
8588
$queue[] = 'dev.hanashi.wsdb.links.option.values';
8689
}
8790
if (\in_array('dev.hanashi.wsdb.links.comment', $this->selectedData)) {
@@ -479,6 +482,57 @@ public function exportLinks(int $offset, int $limit): void
479482
}
480483
}
481484

485+
public function countOptionValues(): int
486+
{
487+
return $this->countLinks();
488+
}
489+
490+
public function exportOptionValues(int $offset, int $limit): void
491+
{
492+
$sql = "SELECT linkID
493+
FROM wcf1_links
494+
ORDER BY linkID";
495+
$statement = $this->database->prepare($sql, $limit, $offset);
496+
$statement->execute();
497+
$linkIDs = $statement->fetchAll(\PDO::FETCH_COLUMN);
498+
if ($linkIDs === []) {
499+
return;
500+
}
501+
502+
$conditionBuilder = new PreparedStatementConditionBuilder();
503+
$conditionBuilder->add('links_option_value.linkID IN (?)', [$linkIDs]);
504+
505+
$sql = "SELECT links_option_value.*,
506+
links_option.optionType
507+
FROM wcf1_links_option_value links_option_value
508+
INNER JOIN wcf1_links_option links_option
509+
ON links_option.optionID = links_option_value.optionID
510+
" . $conditionBuilder . "
511+
ORDER BY links_option_value.linkID";
512+
$statement = $this->database->prepare($sql);
513+
$statement->execute($conditionBuilder->getParameters());
514+
515+
$optionValues = [];
516+
while ($row = $statement->fetchArray()) {
517+
$optionValues[$row['linkID']][] = $row;
518+
}
519+
if ($optionValues === []) {
520+
return;
521+
}
522+
523+
foreach ($optionValues as $linkID => $data) {
524+
ImportHandler::getInstance()
525+
->getImporter('dev.hanashi.wsdb.links.option.values')
526+
->import(
527+
0,
528+
$data,
529+
[
530+
'linkID' => $linkID,
531+
]
532+
);
533+
}
534+
}
535+
482536
/**
483537
* @return array<int, string[]>
484538
*/
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace wcf\system\wsdb\importer;
4+
5+
use wcf\command\wsdb\record\SetRecordOptionValues;
6+
use wcf\data\wsdb\record\Record;
7+
use wcf\system\importer\AbstractImporter;
8+
use wcf\system\importer\ImportHandler;
9+
use wcf\util\StringUtil;
10+
11+
final class LinkOptionValuesImporter extends AbstractImporter
12+
{
13+
#[\Override]
14+
public function import($oldID, array $data, array $additionalData = []): int
15+
{
16+
$linkID = ImportHandler::getInstance()->getNewID('dev.hanashi.wsdb.links.links', $additionalData['linkID']);
17+
$record = new Record($linkID);
18+
if (!$record->recordID) {
19+
return 0;
20+
}
21+
22+
$optionData = [];
23+
foreach ($data as $optionValue) {
24+
$newOptionID = ImportHandler::getInstance()->getNewID(
25+
'dev.hanashi.wsdb.links.option',
26+
$optionValue['optionID']
27+
);
28+
if ($newOptionID === null) {
29+
continue;
30+
}
31+
32+
$val = $optionValue['optionValue'];
33+
if (\in_array($optionValue['optionType'], ['checkboxes', 'multiSelect'])) {
34+
$val = \implode(',', \explode("\n", StringUtil::unifyNewlines($val)));
35+
}
36+
37+
if ($val != '') {
38+
$optionData['option' . $newOptionID] = $val;
39+
}
40+
}
41+
42+
(new SetRecordOptionValues(
43+
$record,
44+
$optionData,
45+
[]
46+
))();
47+
48+
return 0;
49+
}
50+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public function import($oldID, array $data, array $additionalData = []): int
7373
'description' => $data['optionDescription'],
7474
'optionType' => $this->optionTypeMap[$data['optionType']],
7575
'configuration' => JSON::encode($configuration),
76+
'displayPosition' => 'descriptionList',
7677
'isDisabled' => $data['isDisabled'],
7778
'isLimitedToCategories' => $additionalData['categories'] === [] ? 0 : 1,
7879
],

language/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.category.acl"><![CDATA[Kategorie-Berechtigungen]]></item>
2323
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option"><![CDATA[Eingabefelder]]></item>
2424
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.links"><![CDATA[Links]]></item>
25+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option.values"><![CDATA[Eingabefeld-Werte]]></item>
2526
</category>
2627
</import>
2728
</language>

language/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.category.acl"><![CDATA[Category permissions]]></item>
2323
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option"><![CDATA[Input options]]></item>
2424
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.links"><![CDATA[Links]]></item>
25+
<item name="wcf.acp.dataImport.data.dev.hanashi.wsdb.links.option.values"><![CDATA[Values of input fields]]></item>
2526
</category>
2627
</import>
2728
</language>

objectType.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,10 @@
3636
<definitionname>com.woltlab.wcf.importer</definitionname>
3737
<classname>wcf\system\wsdb\importer\LinkLinkImporter</classname>
3838
</type>
39+
<type>
40+
<name>dev.hanashi.wsdb.links.option.values</name>
41+
<definitionname>com.woltlab.wcf.importer</definitionname>
42+
<classname>wcf\system\wsdb\importer\LinkOptionValuesImporter</classname>
43+
</type>
3944
</import>
4045
</data>

0 commit comments

Comments
 (0)