}
+/**
+ * Specify Metadata for get.
+ *
+ * @param array $params
+ */
+function _civicrm_api3_activity_get_spec(&$params) {
+ $params['tag_id'] = array(
+ 'name' => 'tag_id',
+ 'title' => 'Tags',
+ 'description' => 'Find activities with specified tags.',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Core_DAO_Tag',
+ 'FKApiName' => 'Tag',
+ );
+ $params['case_id'] = array(
+ 'name' => 'case_id',
+ 'title' => 'Cases',
+ 'description' => 'Find activities within specified cases.',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Case_DAO_Case',
+ 'FKApiName' => 'Case',
+ );
+ $params['target_contact_id'] = array(
+ 'name' => 'target_contact_id',
+ 'title' => 'Target Contact ID',
+ 'description' => 'Find activities with specified target contact.',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Contact_DAO_Contact',
+ 'FKApiName' => 'Contact',
+ );
+ $params['source_contact_id'] = array(
+ 'name' => 'source_contact_id',
+ 'title' => 'Source Contact ID',
+ 'description' => 'Find activities with specified source contact.',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Contact_DAO_Contact',
+ 'FKApiName' => 'Contact',
+ );
+ $params['assignee_contact_id'] = array(
+ 'name' => 'assignee_contact_id',
+ 'title' => 'Assignee Contact ID',
+ 'description' => 'Find activities with specified assignee contact.',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Contact_DAO_Contact',
+ 'FKApiName' => 'Contact',
+ );
+}
+
/**
* Gets a CiviCRM activity according to parameters.
*
}
else {
$sql = CRM_Utils_SQL_Select::fragment();
+ // Support search by activity_contact
$options = civicrm_api3('ActivityContact', 'getoptions', array('field' => 'record_type_id'));
$options = $options['values'];
$activityContactOptions = array(
);
foreach ($activityContactOptions as $activityContactName => $activityContactValue) {
if (!empty($params[$activityContactName])) {
- // If the intent is to have multiple joins -- one for each relation -- then you would
- // need different table aliases. Consider replacing 'ac' and passing in a '!alias' param,
- // with a different value for each relation.
- $sql->join(
- 'activity_' . $activityContactName,
- 'LEFT JOIN civicrm_activity_contact ac ON a.id = ac.activity_id AND ac.record_type_id = #typeId',
- array('typeId' => $activityContactValue)
+ if (!is_array($params[$activityContactName])) {
+ $params[$activityContactName] = array('=' => $params[$activityContactName]);
+ }
+ $clause = \CRM_Core_DAO::createSQLFilter('contact_id', $params[$activityContactName]);
+ $sql->where('a.id IN (SELECT activity_id FROM civicrm_activity_contact WHERE record_type_id = #typeId AND !clause)',
+ array('#typeId' => $activityContactValue, '!clause' => $clause)
);
- $sql->where('ac.contact_id IN (#cid)', array(
- 'cid' => $params[$activityContactName],
- ));
+ }
+ }
+ if (!empty($params['tag_id'])) {
+ if (!is_array($params['tag_id'])) {
+ $params['tag_id'] = array('=' => $params['tag_id']);
+ }
+ $clause = \CRM_Core_DAO::createSQLFilter('tag_id', $params['tag_id']);
+ if ($clause) {
+ $sql->where('a.id IN (SELECT entity_id FROM civicrm_entity_tag WHERE entity_table = "civicrm_activity" AND !clause)', array('!clause' => $clause));
+ }
+ }
+ if (!empty($params['case_id'])) {
+ if (!is_array($params['case_id'])) {
+ $params['case_id'] = array('=' => $params['case_id']);
+ }
+ $clause = \CRM_Core_DAO::createSQLFilter('case_id', $params['case_id']);
+ if ($clause) {
+ $sql->where('a.id IN (SELECT activity_id FROM civicrm_case_activity WHERE !clause)', array('!clause' => $clause));
}
}
$activities = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, FALSE, 'Activity', $sql);
}
$returns['source_contact_id'] = 1;
+ if (!empty($returns['target_contact_name'])) {
+ $returns['target_contact_id'] = 1;
+ }
+ if (!empty($returns['assignee_contact_name'])) {
+ $returns['assignee_contact_id'] = 1;
+ }
+
foreach ($returns as $n => $v) {
switch ($n) {
case 'assignee_contact_id':
foreach ($activities as $key => $activityArray) {
- $activities[$key]['assignee_contact_id'] = CRM_Activity_BAO_ActivityAssignment::retrieveAssigneeIdsByActivityId($activityArray['id']);
+ $cids = $activities[$key]['assignee_contact_id'] = CRM_Activity_BAO_ActivityAssignment::retrieveAssigneeIdsByActivityId($activityArray['id']);
+ if ($cids && !empty($returns['assignee_contact_name'])) {
+ foreach ($cids as $cid) {
+ $activities[$key]['assignee_contact_name'][$cid] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $cid, 'display_name');
+ }
+ }
}
break;
case 'target_contact_id':
foreach ($activities as $key => $activityArray) {
- $activities[$key]['target_contact_id'] = CRM_Activity_BAO_ActivityTarget::retrieveTargetIdsByActivityId($activityArray['id']);
+ $cids = $activities[$key]['target_contact_id'] = CRM_Activity_BAO_ActivityTarget::retrieveTargetIdsByActivityId($activityArray['id']);
+ if ($cids && !empty($returns['target_contact_name'])) {
+ foreach ($cids as $cid) {
+ $activities[$key]['target_contact_name'][$cid] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $cid, 'display_name');
+ }
+ }
}
break;
case 'source_contact_id':
foreach ($activities as $key => $activityArray) {
- $activities[$key]['source_contact_id'] = CRM_Activity_BAO_Activity::getSourceContactID($activityArray['id']);
+ $cid = $activities[$key]['source_contact_id'] = CRM_Activity_BAO_Activity::getSourceContactID($activityArray['id']);
+ if ($cid && !empty($returns['source_contact_name'])) {
+ $activities[$key]['source_contact_name'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $cid, 'display_name');
+ }
}
break;