Skip to content

Commit 36fa776

Browse files
authored
Merge pull request #6272 from WoltLab/6.2-RadioButtonFormField-allow-empty-value
Allow empty value in `RadioButtonFormField`
2 parents 7398733 + 298288e commit 36fa776

10 files changed

Lines changed: 35 additions & 10 deletions

com.woltlab.wcf/templates/shared_radioButtonFormField.tpl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
{if !$field->isRequired()}
2+
<label>
3+
<input {*
4+
*}type="radio" {*
5+
*}name="{$field->getPrefixedId()}" {*
6+
*}value="" {*
7+
*}{if !$field->getFieldClasses()|empty} class="{implode from=$field->getFieldClasses() item='class' glue=' '}{$class}{/implode}"{/if}{*
8+
*}{if $field->getValue() === null || $field->getValue() === ''} checked{/if}{*
9+
*}{if $field->isImmutable()} disabled{/if}{*
10+
*}{foreach from=$field->getFieldAttributes() key='attributeName' item='attributeValue'} {$attributeName}="{$attributeValue}"{/foreach}{*
11+
*}> {lang}wcf.global.noSelection{/lang}
12+
</label>
13+
{/if}
114
{foreach from=$field->getOptions() key=$__fieldValue item=__fieldLabel}
215
<label>
316
<input {*

wcfsetup/install/files/lib/acp/form/DevtoolsProjectAddForm.class.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ protected function createForm()
101101

102102
$mode = RadioButtonFormField::create('mode')
103103
->label('wcf.acp.devtools.project.add.mode')
104+
->required()
104105
->options(function () {
105106
$options = [
106107
'import' => 'wcf.acp.devtools.project.add.mode.import',

wcfsetup/install/files/lib/acp/form/LanguageItemAddForm.class.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ protected function createForm()
6868
->label('wcf.global.form.data')
6969
->appendChildren([
7070
RadioButtonFormField::create('languageCategoryIDMode')
71+
->required()
7172
->label('wcf.acp.language.item.languageCategoryID.mode')
7273
->options([
7374
'automatic' => 'wcf.acp.language.item.languageCategoryID.mode.automatic',

wcfsetup/install/files/lib/acp/form/MenuItemAddForm.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ protected function createForm()
146146
0 => 'wcf.acp.menu.item.link.external',
147147
1 => 'wcf.acp.menu.item.link.internal',
148148
])
149-
->value(1),
149+
->value(1)
150+
->required(),
150151
SingleSelectionFormField::create('pageID')
151152
->label('wcf.acp.page.page')
152153
->options($pageNodeList, true)

wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ protected function getForm(): IFormDocument
255255
->get('wcf.user.ignore.type.hideMessages'),
256256
])
257257
->value($ignore->type ?: 0)
258+
->required()
258259
->addValidator(new FormFieldValidator('type', function (RadioButtonFormField $formField) {
259260
$userProfile = UserProfileRuntimeCache::getInstance()->getObject($this->parameters['userID']);
260261
if ($userProfile->getPermission('user.profile.cannotBeIgnored')) {

wcfsetup/install/files/lib/system/form/builder/field/RadioButtonFormField.class.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,15 @@ public function supportsNestedOptions()
6262
*/
6363
public function validate()
6464
{
65-
if (!isset($this->getOptions()[$this->getValue()])) {
66-
$this->addValidationError(new FormFieldValidationError(
67-
'invalidValue',
68-
'wcf.global.form.error.noValidSelection'
69-
));
65+
if ($this->isRequired() || $this->getValue() !== '') {
66+
if (!isset($this->getOptions()[$this->getValue()])) {
67+
$this->addValidationError(
68+
new FormFieldValidationError(
69+
'invalidValue',
70+
'wcf.global.form.error.noValidSelection'
71+
)
72+
);
73+
}
7074
}
7175

7276
parent::validate();

wcfsetup/install/files/lib/system/package/plugin/BoxPackageInstallationPlugin.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,8 @@ protected function addFormFields(IFormDocument $form)
560560
->label('wcf.acp.pip.box.boxType')
561561
->description('wcf.acp.pip.box.boxType.description')
562562
->options(\array_combine(Box::$availableBoxTypes, Box::$availableBoxTypes))
563-
->value('text'),
563+
->value('text')
564+
->required(),
564565

565566
SingleSelectionFormField::create('objectType')
566567
->label('wcf.acp.pip.box.objectType')

wcfsetup/install/files/lib/system/package/plugin/LanguagePackageInstallationPlugin.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,8 @@ protected function addFormFields(IFormDocument $form)
359359
'selection' => 'wcf.acp.language.item.languageCategoryID.mode.selection',
360360
'new' => 'wcf.acp.language.item.languageCategoryID.mode.new',
361361
])
362-
->value('automatic'),
362+
->value('automatic')
363+
->required(),
363364

364365
SingleSelectionFormField::create('languageCategoryID')
365366
->label('wcf.acp.language.item.languageCategoryID')

wcfsetup/install/files/lib/system/package/plugin/PagePackageInstallationPlugin.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,8 @@ protected function addFormFields(IFormDocument $form)
489489
->label('wcf.acp.pip.page.pageType')
490490
->description('wcf.acp.pip.page.pageType.description')
491491
->options(\array_combine(Page::$availablePageTypes, Page::$availablePageTypes))
492-
->addClass('floated'),
492+
->addClass('floated')
493+
->required(),
493494

494495
TextFormField::create('name')
495496
->label('wcf.acp.pip.page.name')

wcfsetup/install/files/lib/system/user/multifactor/TotpMultifactorMethod.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,8 @@ public function createAuthenticationForm(IFormDocument $form, Setup $setup): voi
280280
->description('wcf.user.security.multifactor.totp.deviceName.description.auth')
281281
->objectProperty('deviceID')
282282
->options($deviceOptions)
283-
->value($mostRecentlyUsed['deviceID']),
283+
->value($mostRecentlyUsed['deviceID'])
284+
->required(),
284285
]);
285286
}
286287

0 commit comments

Comments
 (0)