Merge pull request #16001 from agileware/CIVICRM-1383
[civicrm-core.git] / CRM / Case / Form / AddToCaseAsRole.php
index af02512fdd4044ed2b0452db89dd42d69e25fa00..f2809047e3c97398e3caf18df8f555d3f7319307 100644 (file)
@@ -15,29 +15,29 @@ class CRM_Case_Form_AddToCaseAsRole extends CRM_Contact_Form_Task {
       'select',
       'role_type',
       ts('Relationship Type'),
-      array('' => ts('- select type -')) + $roleTypes,
+      ['' => ts('- select type -')] + $roleTypes,
       TRUE,
-      array('class' => 'crm-select2 twenty')
+      ['class' => 'crm-select2 twenty']
     );
 
     $this->addEntityRef(
       'assign_to',
       ts('Assign to'),
-      array('entity' => 'Case'),
+      ['entity' => 'Case'],
       TRUE
     );
 
-    $this->addButtons(array(
-      array(
+    $this->addButtons([
+      [
         'type' => 'submit',
         'name' => ts('Submit'),
         'isDefault' => TRUE,
-      ),
-      array(
+      ],
+      [
         'type' => 'cancel',
         'name' => ts('Cancel'),
-      ),
-    ));
+      ],
+    ]);
   }
 
   /**
@@ -48,7 +48,7 @@ class CRM_Case_Form_AddToCaseAsRole extends CRM_Contact_Form_Task {
    */
   private function getRoleTypes() {
     $relType = CRM_Contact_BAO_Relationship::getRelationType('Individual');
-    $roleTypes = array();
+    $roleTypes = [];
 
     foreach ($relType as $k => $v) {
       $roleTypes[substr($k, 0, strpos($k, '_'))] = $v;
@@ -68,24 +68,32 @@ class CRM_Case_Form_AddToCaseAsRole extends CRM_Contact_Form_Task {
     $contacts = $this->_contactIds;
 
     $clients = CRM_Case_BAO_Case::getCaseClients($caseId);
+    $caseRole = CRM_Case_BAO_Case::getCaseRoleDirection($caseId, $roleTypeId);
 
-    $params = array(
-      'contact_id_a' => $clients[0],
-      'contact_id_b' => $contacts,
+    $params = [
       'case_id' => $caseId,
       'relationship_type_id' => $roleTypeId,
-    );
+    ];
 
-    CRM_Contact_BAO_Relationship::createMultiple($params, 'a');
+    if ($caseRole[$roleTypeId]['direction'] == 'b_a') {
+      $params['contact_id_b'] = $clients[0];
+      $params['contact_id_a'] = $contacts;
+      CRM_Contact_BAO_Relationship::createMultiple($params, 'b');
+    }
+    elseif ($caseRole[$roleTypeId]['direction'] == 'a_b'  || $caseRole[$roleTypeId]['direction'] = 'bidirectional') {
+      $params['contact_id_a'] = $clients[0];
+      $params['contact_id_b'] = $contacts;
+      CRM_Contact_BAO_Relationship::createMultiple($params, 'a');
+    }
 
     $url = CRM_Utils_System::url(
       'civicrm/contact/view/case',
-      array(
+      [
         'cid' => $clients[0],
         'id' => $caseId,
         'reset' => 1,
         'action' => 'view',
-      )
+      ]
     );
     CRM_Utils_System::redirect($url);
   }