Skip to content

Commit eaa228d

Browse files
committed
feat(ResolveConfig): for conditional logic with field on same level
1 parent 158b1eb commit eaa228d

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

lib/ACFComposer/ResolveConfig.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ protected static function forEntity($config, $requiredAttributes, $parentKeySuff
4040
: "{$parentKeySuffix}_{$output['name']}";
4141
$output['key'] = "field_{$keySuffix}";
4242

43+
$output = self::forConditionalLogic($output, $parentKeySuffix);
44+
4345
$output = apply_filters('ACFComposer/resolveEntity', $output);
4446
$output = apply_filters("ACFComposer/resolveEntity?name={$output['name']}", $output);
4547
$output = apply_filters("ACFComposer/resolveEntity?key={$output['key']}", $output);
@@ -76,4 +78,19 @@ protected static function validateConfig($config, $requiredAttributes = []) {
7678
protected static function mapLocation($locationArray) {
7779
return array_map('self::forLocation', $locationArray);
7880
}
81+
82+
protected static function forConditionalLogic($config, $keySuffix) {
83+
if (array_key_exists('conditional_logic', $config)) {
84+
$config['conditional_logic'] = array_map(function ($conditionGroup) use ($keySuffix) {
85+
return array_map(function ($condition) use ($keySuffix) {
86+
if (array_key_exists('fieldPath', $condition)) {
87+
$condition['field'] = "field_{$keySuffix}_{$condition['fieldPath']}";
88+
unset($condition['fieldPath']);
89+
}
90+
return $condition;
91+
}, $conditionGroup);
92+
}, $config['conditional_logic']);
93+
}
94+
return $config;
95+
}
7996
}

phpcs.ruleset.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,4 @@
4040
</properties>
4141
</rule>
4242

43-
4443
</ruleset>

tests/test-resolveConfigForField.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,48 @@ function testAppliesResolveFilterByKey() {
172172
$resolvedConfig['foo'] = 'bar';
173173
$this->assertEquals($resolvedConfig, $output);
174174
}
175+
176+
function testResolveConditionalLogicOnSameLevel() {
177+
$subFieldOne = [
178+
'name' => 'subField1',
179+
'label' => 'Sub Field 1',
180+
'type' => 'someType',
181+
];
182+
$subFieldWithConditional = [
183+
'name' => 'subField2',
184+
'label' => 'Sub Field 2',
185+
'type' => 'someType',
186+
'conditional_logic' => [
187+
[
188+
[
189+
'fieldPath' => 'subField1',
190+
'operator' => 'someOp',
191+
'value' => 'someValue'
192+
]
193+
]
194+
]
195+
];
196+
$config = [
197+
'name' => 'someField',
198+
'label' => 'Some Field',
199+
'type' => 'someType',
200+
'sub_fields' => [
201+
$subFieldOne,
202+
$subFieldWithConditional
203+
]
204+
];
205+
206+
$output = ResolveConfig::forField($config);
207+
208+
$config['key'] = 'field_someField';
209+
$subFieldOne['key'] = 'field_someField_subField1';
210+
$subFieldWithConditional['key'] = 'field_someField_subField2';
211+
$subFieldWithConditional['conditional_logic'][0][0]['field'] = 'field_someField_subField1';
212+
unset($subFieldWithConditional['conditional_logic'][0][0]['fieldPath']);
213+
$config['sub_fields'] = [
214+
$subFieldOne,
215+
$subFieldWithConditional
216+
];
217+
$this->assertEquals($config, $output);
218+
}
175219
}

0 commit comments

Comments
 (0)