33namespace wcf \system \event \listener ;
44
55use 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 ;
610use wcf \system \form \builder \container \FormContainer ;
11+ use wcf \system \form \builder \data \processor \CustomFormDataProcessor ;
712use wcf \system \form \builder \field \BooleanFormField ;
813use 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
1019final 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}
0 commit comments