Merge pull request #2966 from eileenmcnaughton/patch-2
[civicrm-core.git] / api / v3 / Relationship.php
index 1b6c3cb94ac132d61212e93eb5aef06ab6894a6e..7ed5b63db2210a5892051905c299420ea443f84b 100644 (file)
@@ -1,9 +1,8 @@
 <?php
-// $Id$
 
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -56,31 +55,30 @@ function civicrm_api3_relationship_create($params) {
   $values = array();
   _civicrm_api3_relationship_format_params($params, $values);
   $ids = array();
-  $action = CRM_Core_Action::ADD;
 
   if (CRM_Utils_Array::value('id', $params)) {
-    $ids['relationship'] = $params['id'];
     $ids['contactTarget'] = $values['contact_id_b'];
-    $action = CRM_Core_Action::UPDATE;
   }
 
   $values['relationship_type_id'] = $values['relationship_type_id'] . '_a_b';
-  $values['contact_check'] = array($params['contact_id_b'] => $params['contact_id_b']);
-  $ids['contact'] = $values['contact_id_a'];
+  if(!empty($params['contact_id_b'])){
+    $values['contact_check'] = array($params['contact_id_b'] => $params['contact_id_b']);
+  }
+  if(!empty($values['contact_id_a'])){
+    $ids['contact'] = $values['contact_id_a'];
+  }
   $relationshipBAO = CRM_Contact_BAO_Relationship::create($values, $ids);
 
   if ($relationshipBAO[1]) {
-    return civicrm_api3_create_error('Relationship is not valid');
+    throw new API_Exception('Relationship is not valid');
   }
   elseif ($relationshipBAO[2]) {
-    return civicrm_api3_create_error('Relationship already exists');
+    throw new API_Exception('Relationship already exists');
   }
-  CRM_Contact_BAO_Relationship::relatedMemberships($params['contact_id_a'], $values, $ids, $action);
-  $relationID = $relationshipBAO[4][0];
-  return civicrm_api3_create_success(array(
-    $relationID => array('id' => $relationID,
-        'moreIDs' => implode(',', $relationshipBAO[4]),
-      )));
+  $id = $relationshipBAO[4][0];
+  $values = array();
+  _civicrm_api3_object_to_array($relationshipBAO[5][$id], $values[$id]);
+  return civicrm_api3_create_success($values, $params, 'relationship', 'create');
 }
 
 /**
@@ -109,7 +107,6 @@ function _civicrm_api3_relationship_create_spec(&$params) {
  */
 function civicrm_api3_relationship_delete($params) {
 
-  require_once 'CRM/Utils/Rule.php';
   if (!CRM_Utils_Rule::integer($params['id'])) {
     return civicrm_api3_create_error('Invalid value for relationship ID');
   }
@@ -139,8 +136,12 @@ function civicrm_api3_relationship_delete($params) {
  * @access  public
  */
 function civicrm_api3_relationship_get($params) {
+  $options = _civicrm_api3_get_options_from_params($params);
 
   if (!CRM_Utils_Array::value('contact_id', $params)) {
+    if(!empty($params['membership_type_id']) && empty($params['relationship_type_id'])) {
+      CRM_Contact_BAO_Relationship::membershipTypeToRelationshipTypes($params);
+    }
     $relationships = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, FALSE);
   }
   else {
@@ -148,15 +149,21 @@ function civicrm_api3_relationship_get($params) {
     $relationships = CRM_Contact_BAO_Relationship::getRelationship($params['contact_id'],
       CRM_Utils_Array::value('status_id', $params),
       0,
-      0,
-      CRM_Utils_Array::value('id', $params), NULL
+      CRM_Utils_Array::value('is_count', $options),
+      CRM_Utils_Array::value('id', $params),
+      NULL,
+      NULL,
+      FALSE,
+      $params
     );
   }
+  //perhaps we should add a 'getcount' but at this stage lets just handle getcount output
+  if($options['is_count']) {
+    return array('count' => $relationships);
+  }
   foreach ($relationships as $relationshipId => $values) {
     _civicrm_api3_custom_data_get($relationships[$relationshipId], 'Relationship', $relationshipId, NULL, CRM_Utils_Array::value('relationship_type_id',$values));
   }
-
-
   return civicrm_api3_create_success($relationships, $params);
 }
 
@@ -208,7 +215,6 @@ function _civicrm_api3_relationship_format_params($params, &$values) {
 
   foreach ($params as $key => $value) {
     // ignore empty values or empty arrays etc
-    require_once 'CRM/Utils/System.php';
     if (CRM_Utils_System::isNull($value)) {
       continue;
     }
@@ -216,7 +222,6 @@ function _civicrm_api3_relationship_format_params($params, &$values) {
     switch ($key) {
       case 'contact_id_a':
       case 'contact_id_b':
-        require_once 'CRM/Utils/Rule.php';
         if (!CRM_Utils_Rule::integer($value)) {
           throw new Exception("contact_id not valid: $value");
         }