--HR-253 Activity.get API - Filter by target_contact_id
authorNileema <nileema@nileema.(none)>
Tue, 4 Feb 2014 13:30:05 +0000 (19:00 +0530)
committerNileema <nileema@nileema.(none)>
Tue, 4 Feb 2014 13:30:05 +0000 (19:00 +0530)
CRM/Activity/BAO/Activity.php
CRM/Activity/BAO/ActivityContact.php
CRM/Core/DAO.php
api/v3/utils.php
tests/phpunit/api/v3/ActivityTest.php

index c8f890f838b17dcd7a8c71a8c2149e0b95e1ba41..938c8d8eba02a0f41e6e02032d4f300df0c35503 100644 (file)
@@ -2589,5 +2589,18 @@ INNER JOIN  civicrm_option_group grp ON ( grp.id = val.option_group_id AND grp.n
     return self::getActivityContact($activityId, $sourceID);
   }
 
+  function setApiFilter(&$params) {
+    if (CRM_Utils_Array::value('target_contact_id', $params)) {
+      $this->selectAdd();
+      $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
+      $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+      $obj = new CRM_Activity_BAO_ActivityContact();
+      $params['return.target_contact_id'] = 1;
+      $this->joinAdd($obj, 'LEFT');
+      $this->selectAdd('civicrm_activity.*');
+      $this->whereAdd(" civicrm_activity_contact.contact_id = {$params['target_contact_id']} AND civicrm_activity_contact.record_type_id = {$targetID}");
+    }
+  }
+
 }
 
index fd575852525c9701e113233cace6424d27db2968..1d5aff983482463ca4345fc34c7a178a7166f430 100644 (file)
@@ -142,4 +142,8 @@ AND        civicrm_contact.is_deleted = 0
     return $activityContact;
   }
 
+  function links() {
+    $link = array('activity_id' => 'civicrm_activity:id');
+    return $link;
+  }
 }
index fbd2f6c468f7177e5b3ab8784833ffd0aad32d9a..ae59e51092f162d5f91a77d9c4bf0b7c0912239e 100644 (file)
@@ -1955,4 +1955,6 @@ EOS;
     return substr($string, 0, $length - 8) . "_{$md5string}";
   }
 
+  function setApiFilter(&$params) {}
+
 }
index d5b54dd75a10665207da6bc806117f4abc2c9752..ce2a2d8efb9764dc621144a349d68eaefaf8c37e 100644 (file)
@@ -559,6 +559,7 @@ function _civicrm_api3_dao_set_filter(&$dao, $params, $unique = TRUE, $entity) {
       $dao->selectAdd($allfields[$uniqueVal]);
     }
   }
+  $dao->setApiFilter($params);
 }
 
 /**
index b2840bb2a234bbc66bd58bad5b0cb63951f55e56..9603e819883af02bc859651e0998eef95fff1330 100644 (file)
@@ -547,6 +547,50 @@ class api_v3_ActivityTest extends CiviUnitTestCase {
     $this->assertEquals('Make-it-Happen Meeting', $result['values'][$result['id']]['subject']);
     $this->callAPISuccess('Activity', 'Delete', array('id' => $result['id']));
   }
+
+
+  /**
+   *  Test civicrm_activity_get() with filter target_contact_id
+   */
+  function testActivityGetTargetFilter() {
+    $params = $this->_params;
+    $contact1Params = array(
+      'first_name' => 'John',
+      'middle_name' => 'J.',
+      'last_name' => 'Anderson',
+      'prefix_id' => 3,
+      'suffix_id' => 3,
+      'email' => 'john_anderson@civicrm.org',
+      'contact_type' => 'Individual',
+    );
+
+    $contact1 = $this->individualCreate($contact1Params);
+    $contact2Params = array(
+      'first_name' => 'Michal',
+      'middle_name' => 'J.',
+      'last_name' => 'Anderson',
+      'prefix_id' => 3,
+      'suffix_id' => 3,
+      'email' => 'michal_anderson@civicrm.org',
+      'contact_type' => 'Individual',
+    );
+
+    $contact2 = $this->individualCreate($contact2Params);
+
+    $params['assignee_contact_id'] = array($contact1, $contact2);
+    $params['target_contact_id'] = array($contact2 => $contact2);
+    $activity = $this->callAPISuccess('Activity', 'Create', $params);
+
+    $activityget   = $this->callAPISuccess('Activity', 'get', array('id' => $activity['id'], 'target_contact_id' => $contact2,'return.target_contact_id' => 1));
+    $this->assertEquals($activity['id'], $activityget['id'], 'In line ' . __LINE__);
+    $this->assertEquals($contact2, $activityget['values'][$activityget['id']]['target_contact_id'][0], 'In line ' . __LINE__);
+
+    $activityget   = $this->callAPISuccess('activity', 'get', array('target_contact_id' => $this->_contactID,'return.target_contact_id' => 1,'id' => $activity['id']));
+    if ($activityget['count'] > 0) {
+      $this->assertNotEquals($contact2, $activityget['values'][$activityget['id']]['target_contact_id'][0], 'In line ' . __LINE__);
+    }
+  }
+
   /*
    * test that get functioning does filtering
    */