Skip to content

Commit 5aa8b34

Browse files
committed
Add IMigrateConditionType interface and implement migration methods in user group condition types
1 parent a83ee89 commit 5aa8b34

File tree

4 files changed

+97
-2
lines changed

4 files changed

+97
-2
lines changed

wcfsetup/install/files/lib/system/condition/provider/UserConditionProvider.class.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use wcf\data\user\UserList;
77
use wcf\event\condition\provider\UserConditionProviderCollecting;
88
use wcf\system\condition\type\IDatabaseObjectListConditionType;
9+
use wcf\system\condition\type\IMigrateConditionType;
910
use wcf\system\condition\type\IObjectConditionType;
1011
use wcf\system\condition\type\user\AbstractUserBooleanConditionType;
1112
use wcf\system\condition\type\user\AbstractUserIntegerConditionType;
@@ -62,4 +63,35 @@ public function __construct()
6263
new UserConditionProviderCollecting($this)
6364
);
6465
}
66+
67+
/**
68+
* @param array<string, mixed> $conditionData
69+
*
70+
* @return array{identifier: string, value: mixed}[]
71+
*/
72+
public function migrateConditionData(array $conditionData): array
73+
{
74+
if ($conditionData === []) {
75+
return [];
76+
}
77+
78+
$result = [];
79+
80+
foreach ($this->conditionTypes as $conditionType) {
81+
if (!($conditionType instanceof IMigrateConditionType)) {
82+
continue;
83+
}
84+
85+
\array_push(
86+
$result,
87+
...$conditionType->migrateConditionData($conditionData)
88+
);
89+
90+
if ($conditionData === []) {
91+
break;
92+
}
93+
}
94+
95+
return $result;
96+
}
6597
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace wcf\system\condition\type;
4+
5+
/**
6+
* @author Olaf Braun
7+
* @copyright 2001-2025 WoltLab GmbH
8+
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
9+
* @since 6.2
10+
*/
11+
interface IMigrateConditionType
12+
{
13+
/**
14+
* Converts the old condition structure to the new one. All migrated values must be removed from the `$conditionData` array.
15+
*
16+
* @param array<string, mixed> $conditionData
17+
*
18+
* @return array{identifier: string, value: mixed}[]
19+
*/
20+
public function migrateConditionData(array &$conditionData): array;
21+
}

wcfsetup/install/files/lib/system/condition/type/user/UserInGroupConditionType.class.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use wcf\data\user\UserList;
99
use wcf\system\condition\type\AbstractConditionType;
1010
use wcf\system\condition\type\IDatabaseObjectListConditionType;
11+
use wcf\system\condition\type\IMigrateConditionType;
1112
use wcf\system\condition\type\IObjectConditionType;
1213
use wcf\system\form\builder\field\SelectFormField;
1314

@@ -21,7 +22,7 @@
2122
* @implements IObjectConditionType<User, string>
2223
* @extends AbstractConditionType<string>
2324
*/
24-
final class UserInGroupConditionType extends AbstractConditionType implements IDatabaseObjectListConditionType, IObjectConditionType
25+
final class UserInGroupConditionType extends AbstractConditionType implements IDatabaseObjectListConditionType, IObjectConditionType, IMigrateConditionType
2526
{
2627
#[\Override]
2728
public function getFormField(string $id): SelectFormField
@@ -69,4 +70,24 @@ public function matches(object $object): bool
6970
{
7071
return \in_array((int)$this->filter, $object->getGroupIDs(), true);
7172
}
73+
74+
#[\Override]
75+
public function migrateConditionData(array &$conditionData): array
76+
{
77+
if (!isset($conditionData['groupIDs'])) {
78+
return [];
79+
}
80+
81+
$result = [];
82+
foreach ($conditionData['groupIDs'] as $groupID) {
83+
$result[] = [
84+
'identifier' => $this->getIdentifier(),
85+
'value' => $groupID,
86+
];
87+
}
88+
89+
unset($conditionData['groupIDs']);
90+
91+
return $result;
92+
}
7293
}

wcfsetup/install/files/lib/system/condition/type/user/UserNotInGroupConditionType.class.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use wcf\data\user\UserList;
99
use wcf\system\condition\type\AbstractConditionType;
1010
use wcf\system\condition\type\IDatabaseObjectListConditionType;
11+
use wcf\system\condition\type\IMigrateConditionType;
1112
use wcf\system\condition\type\IObjectConditionType;
1213
use wcf\system\form\builder\field\SelectFormField;
1314

@@ -21,7 +22,7 @@
2122
* @implements IObjectConditionType<User, string>
2223
* @extends AbstractConditionType<string>
2324
*/
24-
final class UserNotInGroupConditionType extends AbstractConditionType implements IDatabaseObjectListConditionType, IObjectConditionType
25+
final class UserNotInGroupConditionType extends AbstractConditionType implements IDatabaseObjectListConditionType, IObjectConditionType, IMigrateConditionType
2526
{
2627
#[\Override]
2728
public function getFormField(string $id): SelectFormField
@@ -69,4 +70,24 @@ public function matches(object $object): bool
6970
{
7071
return !\in_array((int)$this->filter, $object->getGroupIDs(), true);
7172
}
73+
74+
#[\Override]
75+
public function migrateConditionData(array &$conditionData): array
76+
{
77+
if (!isset($conditionData['notGroupIDs'])) {
78+
return [];
79+
}
80+
81+
$result = [];
82+
foreach ($conditionData['notGroupIDs'] as $groupID) {
83+
$result[] = [
84+
'identifier' => $this->getIdentifier(),
85+
'value' => $groupID,
86+
];
87+
}
88+
89+
unset($conditionData['notGroupIDs']);
90+
91+
return $result;
92+
}
7293
}

0 commit comments

Comments
 (0)