Skip to content

Commit bf02a4b

Browse files
committed
set button name i18n
1 parent eb46308 commit bf02a4b

11 files changed

Lines changed: 153 additions & 7 deletions

eventListener.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<import>
44
<eventlistener name="linksWsdbDatabaseEditFormListener">
55
<eventclassname>wcf\acp\form\WsdbDatabaseEditForm</eventclassname>
6-
<eventname>createForm</eventname>
6+
<eventname>createForm,buildForm,saved</eventname>
77
<listenerclassname>wcf\system\event\listener\LinksWsdbDatabaseEditFormListener</listenerclassname>
88
<environment>admin</environment>
99
</eventlistener>
@@ -17,6 +17,7 @@
1717
<eventclassname>wcf\form\WsdbRecordAddForm</eventclassname>
1818
<eventname>createForm</eventname>
1919
<listenerclassname>wcf\system\event\listener\LinksWsdbRecordAddFormListener</listenerclassname>
20+
<inherit>1</inherit>
2021
</eventlistener>
2122
</import>
2223
</data>

files/acp/database/install_dev.hanashi.wsdb.links.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,11 @@
1919
VarcharDatabaseTableColumn::create('externalUrl')
2020
->length(255),
2121
]),
22+
PartialDatabaseTable::create('wcf1_wsdb_database_language')
23+
->columns([
24+
VarcharDatabaseTableColumn::create('linkButton')
25+
->length(100)
26+
->notNull()
27+
->defaultValue(''),
28+
]),
2229
];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
use wcf\command\wsdb\database\SetDatabaseLinksLanguageItems;
4+
use wcf\data\wsdb\database\DatabaseList;
5+
6+
$databaseList = new DatabaseList();
7+
$databaseList->readObjects();
8+
9+
foreach ($databaseList as $database) {
10+
(new SetDatabaseLinksLanguageItems($database))();
11+
}

files/lib/bootstrap/dev.hanashi.wsdb.links.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
<?php
22

3+
use wcf\event\wsdb\database\DatabaseCreated;
34
use wcf\event\wsdb\database\preset\PresetCollecting;
45
use wcf\system\event\EventHandler;
6+
use wcf\system\event\listener\LinksWsdbDatabaseCreatedListener;
57
use wcf\system\wsdb\database\preset\LinkPreset;
68

79
return static function (): void {
@@ -11,4 +13,9 @@ static function (PresetCollecting $event): void {
1113
$event->register(new LinkPreset());
1214
}
1315
);
16+
17+
EventHandler::getInstance()->register(
18+
DatabaseCreated::class,
19+
LinksWsdbDatabaseCreatedListener::class
20+
);
1421
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace wcf\command\wsdb\database;
4+
5+
use wcf\data\wsdb\database\Database;
6+
use wcf\data\wsdb\database\language\DatabaseLanguage;
7+
use wcf\data\wsdb\database\language\DatabaseLanguageAction;
8+
use wcf\system\language\LanguageFactory;
9+
10+
final class SetDatabaseLinksLanguageItems
11+
{
12+
public function __construct(private readonly Database $database)
13+
{
14+
}
15+
16+
public function __invoke(): void
17+
{
18+
foreach (LanguageFactory::getInstance()->getLanguages() as $language) {
19+
$databaseLanguage = DatabaseLanguage::getDatabaseLanguage(
20+
$this->database->databaseID,
21+
$language->languageID
22+
);
23+
if ($databaseLanguage !== null) {
24+
$action = new DatabaseLanguageAction([$databaseLanguage], 'update', ['data' => [
25+
'linkButton' => $language->get('dev.hanashi.wsdb.linkButton'),
26+
]]);
27+
$action->executeAction();
28+
}
29+
}
30+
}
31+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace wcf\system\event\listener;
4+
5+
use wcf\command\wsdb\database\SetDatabaseLinksLanguageItems;
6+
use wcf\event\wsdb\database\DatabaseCreated;
7+
8+
final class LinksWsdbDatabaseCreatedListener extends AbstractEventListener
9+
{
10+
public function __invoke(DatabaseCreated $event): void
11+
{
12+
(new SetDatabaseLinksLanguageItems($event->database))();
13+
}
14+
}

files/lib/system/event/listener/LinksWsdbDatabaseEditFormListener.class.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,18 @@
33
namespace wcf\system\event\listener;
44

55
use wcf\acp\form\WsdbDatabaseEditForm;
6+
use wcf\data\IStorableObject;
7+
use wcf\data\wsdb\database\Database;
8+
use wcf\data\wsdb\database\language\DatabaseLanguage;
9+
use wcf\data\wsdb\database\language\DatabaseLanguageAction;
610
use wcf\system\form\builder\container\FormContainer;
11+
use wcf\system\form\builder\data\processor\CustomFormDataProcessor;
712
use wcf\system\form\builder\field\BooleanFormField;
813
use wcf\system\form\builder\field\dependency\NonEmptyFormFieldDependency;
14+
use wcf\system\form\builder\field\TextFormField;
15+
use wcf\system\form\builder\IFormDocument;
16+
use wcf\system\language\LanguageFactory;
17+
use wcf\system\WCF;
918

1019
final class LinksWsdbDatabaseEditFormListener extends AbstractEventListener
1120
{
@@ -23,6 +32,65 @@ protected function onCreateForm(WsdbDatabaseEditForm $eventObj): void
2332
NonEmptyFormFieldDependency::create('linksMandatoryDependency')
2433
->fieldId('enableLinks')
2534
),
35+
TextFormField::create('linkButton')
36+
->label('dev.hanashi.wsdb.linkButtonTitle')
37+
->maximumLength(100)
38+
->required()
39+
->i18nRequired()
40+
->addDependency(
41+
NonEmptyFormFieldDependency::create('linksMandatoryDependency')
42+
->fieldId('enableLinks')
43+
),
2644
]);
2745
}
46+
47+
protected function onBuildForm(WsdbDatabaseEditForm $eventObj): void
48+
{
49+
$eventObj->form->getDataHandler()->addProcessor(
50+
new CustomFormDataProcessor(
51+
'linksProcessor',
52+
static function (IFormDocument $document, array $parameters): array {
53+
if (\is_array($parameters['linkButton_i18n'])) {
54+
$parameters['language']['linkButton'] = $parameters['linkButton_i18n'];
55+
} else {
56+
$parameters['language']['linkButton'] = [
57+
WCF::getLanguage()->languageID => $parameters['linkButton_i18n'],
58+
];
59+
}
60+
unset(
61+
$parameters['linkButton_i18n'],
62+
$parameters['data']['linkButton']
63+
);
64+
65+
return $parameters;
66+
},
67+
static function (IFormDocument $document, array $data, IStorableObject $object) use ($eventObj): array {
68+
\assert($object instanceof Database);
69+
70+
$field = $eventObj->form->getFormField('linkButton');
71+
$field->value($object->getPhrases('linkButton'));
72+
73+
return $data;
74+
}
75+
)
76+
);
77+
}
78+
79+
protected function onSaved(WsdbDatabaseEditForm $eventObj): void
80+
{
81+
$formData = $eventObj->form->getData();
82+
83+
foreach (LanguageFactory::getInstance()->getLanguages() as $language) {
84+
$databaseLanguage = DatabaseLanguage::getDatabaseLanguage(
85+
$eventObj->formObject->databaseID,
86+
$language->languageID
87+
);
88+
if ($databaseLanguage !== null) {
89+
$action = new DatabaseLanguageAction([$databaseLanguage], 'update', ['data' => [
90+
'linkButton' => $formData['language']['linkButton'][$language->languageID] ?? '',
91+
]]);
92+
$action->executeAction();
93+
}
94+
}
95+
}
2896
}

language/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<item name="dev.hanashi.wsdb.linksMandatory"><![CDATA[Angabe eines Links verpflichtend]]></item>
1010
<item name="dev.hanashi.wsdb.externalUrl"><![CDATA[Link]]></item>
1111
<item name="dev.hanashi.wsdb.linkButton"><![CDATA[Link öffnen]]></item>
12+
<item name="dev.hanashi.wsdb.linkButtonTitle"><![CDATA[Beschriftung des Link-Buttons]]></item>
1213
</category>
1314
</import>
1415
</language>

language/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<item name="dev.hanashi.wsdb.linksMandatory"><![CDATA[Providing a link is mandatory]]></item>
1010
<item name="dev.hanashi.wsdb.externalUrl"><![CDATA[Link]]></item>
1111
<item name="dev.hanashi.wsdb.linkButton"><![CDATA[Open link]]></item>
12+
<item name="dev.hanashi.wsdb.linkButtonTitle"><![CDATA[Labeling of the link button]]></item>
1213
</category>
1314
</import>
1415
</language>

package.xml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<packagename language="de">Database: Links</packagename>
77
<packagedescription>Links for the WoltLab Suite Database</packagedescription>
88
<packagedescription language="de">Links für die WoltLab Suite Database</packagedescription>
9-
<version>1.0.1</version>
10-
<date>2026-01-09</date>
9+
<version>1.0.2</version>
10+
<date>2026-01-11</date>
1111
</packageinformation>
1212
<authorinformation>
1313
<author>Hanashi Development</author>
@@ -23,14 +23,19 @@
2323
</excludedpackages>
2424
<instructions type="install">
2525
<instruction type="file"/>
26+
<instruction type="template"/>
2627
<instruction type="language"/>
2728
<instruction type="eventListener"/>
28-
<instruction type="template"/>
2929
<instruction type="templateListener"/>
3030
<instruction type="database">acp/database/install_dev.hanashi.wsdb.links.php</instruction>
31+
<instruction type="script" run="standalone">acp/install_dev.hanashi.wsdb.links.php</instruction>
3132
</instructions>
32-
<instructions type="update" fromversion="1.0.0">
33+
<instructions type="update" fromversion="1.0.1">
3334
<instruction type="file"/>
35+
<instruction type="template"/>
36+
<instruction type="language"/>
37+
<instruction type="eventListener"/>
3438
<instruction type="database">acp/database/install_dev.hanashi.wsdb.links.php</instruction>
39+
<instruction type="script" run="standalone">acp/install_dev.hanashi.wsdb.links.php</instruction>
3540
</instructions>
3641
</package>

0 commit comments

Comments
 (0)