You are here

private function wf_crm_webform_postprocess::processRelationship in Webform CiviCRM Integration 7.4

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

Add/update relationship for a pair of contacts

Parameters

$params: Params array for relationship api

$cid1: Contact id

$cid2: Contact id

1 call to wf_crm_webform_postprocess::processRelationship()
wf_crm_webform_postprocess::preSave in includes/wf_crm_webform_postprocess.inc
Process webform submission when it is about to be saved. Called by the following hook:

File

includes/wf_crm_webform_postprocess.inc, line 989

Class

wf_crm_webform_postprocess

Code

private function processRelationship($params, $cid1, $cid2) {
  if (!empty($params['relationship_type_id']) && $cid2 && $cid1 != $cid2) {
    list($type, $side) = explode('_', $params['relationship_type_id']);
    $existing = $this
      ->getRelationship(array(
      $params['relationship_type_id'],
    ), $cid1, $cid2);
    $perm = wf_crm_aval($params, 'relationship_permission');

    // Swap contacts if this is an inverse relationship
    if ($side == 'b' || $existing && $existing['contact_id_a'] != $cid1) {
      list($cid1, $cid2) = array(
        $cid2,
        $cid1,
      );
      if ($perm == 1 || $perm == 2) {
        $perm = $perm == 1 ? 2 : 1;
      }
    }

    //initialise start_date for create action.
    if (empty($existing) && !array_key_exists('start_date', $params)) {
      $params['start_date'] = 'now';
    }
    $params += $existing;
    $params['contact_id_a'] = $cid1;
    $params['contact_id_b'] = $cid2;
    $params['relationship_type_id'] = $type;
    if ($perm) {
      $params['is_permission_a_b'] = $params['is_permission_b_a'] = $perm == 3 ? 1 : 0;
      if ($perm == 1 || $perm == 2) {
        $params['is_permission_' . ($perm == 1 ? 'a_b' : 'b_a')] = 1;
      }
    }
    unset($params['relationship_permission']);
    wf_civicrm_api('relationship', 'create', $params);
  }
}