You are here

private function wf_crm_admin_form::addConditionalRule in Webform CiviCRM Integration 7.4

Same name and namespace in other branches
  1. 7.5 includes/wf_crm_admin_form.inc \wf_crm_admin_form::addConditionalRule()

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 wf_crm_admin_form::addConditionalRule()
wf_crm_admin_form::postProcess in includes/wf_crm_admin_form.inc
Submission handler, saves CiviCRM options for a Webform node

File

includes/wf_crm_admin_form.inc, line 1756
Webform CiviCRM module's admin form.

Class

wf_crm_admin_form
@file Webform CiviCRM module's admin form.

Code

private function addConditionalRule($field, $enabled) {
  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'] + array(
    'nid' => $this->node->nid,
    'rgid' => $rgid,
    'weight' => $weight,
    'actions' => array(
      array(
        'target' => $enabled[$field['form_key']],
        'target_type' => 'component',
        'action' => $field['civicrm_condition']['action'],
      ),
    ),
  );
  $rule_group['rules'] = array();
  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 = wf_crm_field_options(array(
        'form_key' => $source_key,
      ), '', $this->settings['data']);
      foreach ((array) $condition['values'] as $value) {
        if (isset($options[$value])) {
          $rule_group['rules'][] = array(
            '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;
    module_load_include('inc', 'webform', 'includes/webform.conditionals');
    webform_conditional_insert($rule_group);
  }
}