Skip to content

Commit 0f7fa1f

Browse files
committed
Add option to define an unit for numeric form options
1 parent 3245fcd commit 0f7fa1f

File tree

9 files changed

+67
-7
lines changed

9 files changed

+67
-7
lines changed

wcfsetup/install/files/lib/system/form/option/AbstractNumericFormOption.class.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,17 @@ public function applyFilter(DatabaseObjectList $list, string $columnName, mixed
4343
public function renderFilterValue(string $value, array $configuration = []): string
4444
{
4545
$values = $this->parseFilterValue($value);
46+
$suffix = $this->getSuffix($configuration);
47+
if ($suffix !== '') {
48+
$suffix = ' ' . $suffix;
49+
}
4650

4751
if ($values['from'] && $values['to']) {
48-
return $values['from'] . '' . $values['to'];
52+
return $values['from'] . '' . $values['to'] . $suffix;
4953
} else if ($values['from']) {
50-
return '>= ' . $values['from'];
54+
return '>= ' . $values['from'] . $suffix;
5155
} else if ($values['to']) {
52-
return '<= ' . $values['to'];
56+
return '<= ' . $values['to'] . $suffix;
5357
}
5458

5559
return '';
@@ -74,4 +78,12 @@ protected function parseFilterValue(string $value): array
7478
'to' => $to,
7579
];
7680
}
81+
82+
/**
83+
* @param array<string, mixed> $configuration
84+
*/
85+
protected function getSuffix(array $configuration): string
86+
{
87+
return '';
88+
}
7789
}

wcfsetup/install/files/lib/system/form/option/CurrencyFormOption.class.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use wcf\system\form\builder\field\CurrencyFormField;
1010
use wcf\system\form\option\formatter\CurrencyFormatter;
1111
use wcf\system\form\option\formatter\IFormOptionFormatter;
12+
use wcf\util\StringUtil;
1213

1314
/**
1415
* Implementation of a form field for currency values.
@@ -82,4 +83,14 @@ public function getDatabaseTableColumn(string $name): AbstractDatabaseTableColum
8283
{
8384
return IntDatabaseTableColumn::create($name);
8485
}
86+
87+
#[\Override]
88+
protected function getSuffix(array $configuration): string
89+
{
90+
if (!empty($configuration['currency'])) {
91+
return StringUtil::encodeHTML($configuration['currency']);
92+
}
93+
94+
return '';
95+
}
8596
}

wcfsetup/install/files/lib/system/form/option/FloatFormOption.class.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use wcf\system\form\builder\field\FloatFormField;
99
use wcf\system\form\option\formatter\FloatFormatter;
1010
use wcf\system\form\option\formatter\IFormOptionFormatter;
11+
use wcf\util\StringUtil;
1112

1213
/**
1314
* Implementation of a form field for float values.
@@ -42,7 +43,7 @@ public function getFormField(string $id, array $configuration = []): AbstractFor
4243
#[\Override]
4344
public function getConfigurationFormFields(): array
4445
{
45-
return ['minFloatValue', 'maxFloatValue', 'required'];
46+
return ['unit', 'minFloatValue', 'maxFloatValue', 'required'];
4647
}
4748

4849
#[\Override]
@@ -62,4 +63,14 @@ public function getDatabaseTableColumn(string $name): AbstractDatabaseTableColum
6263
{
6364
return FloatDatabaseTableColumn::create($name);
6465
}
66+
67+
#[\Override]
68+
protected function getSuffix(array $configuration): string
69+
{
70+
if (!empty($configuration['unit'])) {
71+
return StringUtil::encodeHTML($configuration['unit']);
72+
}
73+
74+
return '';
75+
}
6576
}

wcfsetup/install/files/lib/system/form/option/IntegerFormOption.class.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use wcf\system\form\builder\field\NumericRangeFormField;
1010
use wcf\system\form\option\formatter\IFormOptionFormatter;
1111
use wcf\system\form\option\formatter\IntegerFormatter;
12+
use wcf\util\StringUtil;
1213

1314
/**
1415
* Implementation of a form field for integer values.
@@ -51,7 +52,7 @@ public function getFilterFormField(string $id, array $configuration = []): Abstr
5152
#[\Override]
5253
public function getConfigurationFormFields(): array
5354
{
54-
return ['minIntegerValue', 'maxIntegerValue', 'required'];
55+
return ['unit', 'minIntegerValue', 'maxIntegerValue', 'required'];
5556
}
5657

5758
#[\Override]
@@ -71,4 +72,14 @@ public function getDatabaseTableColumn(string $name): AbstractDatabaseTableColum
7172
{
7273
return IntDatabaseTableColumn::create($name);
7374
}
75+
76+
#[\Override]
77+
protected function getSuffix(array $configuration): string
78+
{
79+
if (!empty($configuration['unit'])) {
80+
return StringUtil::encodeHTML($configuration['unit']);
81+
}
82+
83+
return '';
84+
}
7485
}

wcfsetup/install/files/lib/system/form/option/SharedConfigurationFormFields.class.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ private function getDefaultFormFields(): array
6161
'required' => BooleanFormField::create('required')
6262
->label('wcf.form.option.shared.required')
6363
->value(false),
64+
'unit' => TextFormField::create('unit')
65+
->label('wcf.form.option.shared.unit')
66+
->addFieldClass('short')
6467
];
6568
}
6669

wcfsetup/install/files/lib/system/form/option/formatter/FloatFormatter.class.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ final class FloatFormatter implements IFormOptionFormatter
1717
#[\Override]
1818
public function format(string $value, int $languageID, array $configuration): string
1919
{
20-
return StringUtil::formatNumeric(\floatval($value));
20+
$suffix = '';
21+
if (!empty($configuration['unit'])) {
22+
$suffix = ' ' . StringUtil::encodeHTML($configuration['unit']);
23+
}
24+
25+
return StringUtil::formatNumeric(\floatval($value)) . $suffix;
2126
}
2227
}

wcfsetup/install/files/lib/system/form/option/formatter/IntegerFormatter.class.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ final class IntegerFormatter implements IFormOptionFormatter
1717
#[\Override]
1818
public function format(string $value, int $languageID, array $configuration): string
1919
{
20-
return StringUtil::formatNumeric(\intval($value));
20+
$suffix = '';
21+
if (!empty($configuration['unit'])) {
22+
$suffix = ' ' . StringUtil::encodeHTML($configuration['unit']);
23+
}
24+
25+
return StringUtil::formatNumeric(\intval($value)) . $suffix;
2126
}
2227
}

wcfsetup/install/lang/de.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4176,6 +4176,7 @@ Dateianhänge:
41764176
<item name="wcf.form.option.shared.maxValue"><![CDATA[Maximum]]></item>
41774177
<item name="wcf.form.option.shared.selectOptions"><![CDATA[Auswahloptionen]]></item>
41784178
<item name="wcf.form.option.shared.required"><![CDATA[Das Feld muss zwingend ausgefüllt werden.]]></item>
4179+
<item name="wcf.form.option.shared.unit"><![CDATA[Einheit]]></item>
41794180
<item name="wcf.form.option.optionType"><![CDATA[Feldtyp]]></item>
41804181
</category>
41814182
<category name="wcf.image">

wcfsetup/install/lang/en.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4122,6 +4122,7 @@ Attachments:
41224122
<item name="wcf.form.option.shared.maxValue"><![CDATA[Maximum]]></item>
41234123
<item name="wcf.form.option.shared.selectOptions"><![CDATA[Options]]></item>
41244124
<item name="wcf.form.option.shared.required"><![CDATA[This is a required field]]></item>
4125+
<item name="wcf.form.option.shared.unit"><![CDATA[Unit]]></item>
41254126
<item name="wcf.form.option.optionType"><![CDATA[Option Type]]></item>
41264127
</category>
41274128
<category name="wcf.image">

0 commit comments

Comments
 (0)