private function AdminForm::addConditionalRule in Webform CiviCRM Integration 8.5
Create a conditional rule if the source and target fields both exist. TODO: This is fairly minimal. It doesn't check if the rule already exists, and doesn't work if both fields haven't been created yet.
Parameters
array $field:
array $enabled:
1 call to AdminForm::addConditionalRule()
- AdminForm::postProcess in src/
AdminForm.php - Submission handler, saves CiviCRM options for a Webform node
File
- src/
AdminForm.php, line 2113 - Webform CiviCRM module's admin form.
Class
- AdminForm
- @file Webform CiviCRM module's admin form.
Namespace
Drupal\webform_civicrmCode
private function addConditionalRule($field, $enabled) {
$utils = \Drupal::service('webform_civicrm.utils');
list(, $c, $ent, $n, $table, $name) = explode('_', $field['form_key'], 6);
$rgid = $weight = -1;
foreach ($this->node->webform['conditionals'] as $rgid => $existing) {
$weight = $existing['weight'];
}
$rgid++;
$rule_group = $field['civicrm_condition'] + [
'nid' => $this->node->nid,
'rgid' => $rgid,
'weight' => $weight,
'actions' => [
[
'target' => $enabled[$field['form_key']],
'target_type' => 'component',
'action' => $field['civicrm_condition']['action'],
],
],
];
$rule_group['rules'] = [];
foreach ($field['civicrm_condition']['rules'] as $source => $condition) {
$source_key = "civicrm_{$c}_{$ent}_{$n}_{$source}";
$source_id = wf_crm_aval($enabled, $source_key);
if ($source_id) {
$options = $utils
->wf_crm_field_options([
'form_key' => $source_key,
], '', $this->settings['data']);
foreach ((array) $condition['values'] as $value) {
if (isset($options[$value])) {
$rule_group['rules'][] = [
'source_type' => 'component',
'source' => $source_id,
'operator' => wf_crm_aval($condition, 'operator', 'equal'),
'value' => $value,
];
}
}
}
}
if ($rule_group['rules']) {
$this->node->webform['conditionals'][] = $rule_group;
\Drupal::ModuleHandler()
->loadInclude('webform', 'inc', 'includes/webform.conditionals');
webform_conditional_insert($rule_group);
}
}