*/
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',
+ 'supports_joins' => TRUE,
+ );
+ $params['file_id'] = array(
+ 'title' => 'Attached Files',
+ 'description' => 'Find activities with attached files.',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Core_DAO_File',
+ 'FKApiName' => 'File',
);
$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['contact_id'] = array(
+ 'title' => 'Activity Contact ID',
+ 'description' => 'Find activities involving this contact (as target, source, OR assignee).',
+ 'type' => 1,
+ 'FKClassName' => 'CRM_Contact_DAO_Contact',
+ 'FKApiName' => 'Contact',
+ );
$params['target_contact_id'] = array(
- 'name' => 'target_contact_id',
'title' => 'Target Contact ID',
'description' => 'Find activities with specified target contact.',
'type' => 1,
'FKApiName' => 'Contact',
);
$params['source_contact_id'] = array(
- 'name' => 'source_contact_id',
'title' => 'Source Contact ID',
'description' => 'Find activities with specified source contact.',
'type' => 1,
'FKApiName' => 'Contact',
);
$params['assignee_contact_id'] = array(
- 'name' => 'assignee_contact_id',
'title' => 'Assignee Contact ID',
'description' => 'Find activities with specified assignee contact.',
'type' => 1,
}
}
- if (!empty($params['contact_id'])) {
- $activities = CRM_Activity_BAO_Activity::getContactActivity($params['contact_id']);
- // BAO function doesn't actually return a contact ID - hack api for now & add to test so when api re-write
- // happens it won't get missed.
- foreach ($activities as $key => $activityArray) {
- $activities[$key]['id'] = $key;
+ $sql = CRM_Utils_SQL_Select::fragment();
+ $recordTypes = civicrm_api3('ActivityContact', 'getoptions', array('field' => 'record_type_id'));
+ $recordTypes = $recordTypes['values'];
+ $activityContactOptions = array(
+ 'contact_id' => NULL,
+ 'target_contact_id' => array_search('Activity Targets', $recordTypes),
+ 'source_contact_id' => array_search('Activity Source', $recordTypes),
+ 'assignee_contact_id' => array_search('Activity Assignees', $recordTypes),
+ );
+ foreach ($activityContactOptions as $activityContactName => $activityContactValue) {
+ if (!empty($params[$activityContactName])) {
+ if (!is_array($params[$activityContactName])) {
+ $params[$activityContactName] = array('=' => $params[$activityContactName]);
+ }
+ $clause = \CRM_Core_DAO::createSQLFilter('contact_id', $params[$activityContactName]);
+ $typeClause = $activityContactValue ? 'record_type_id = #typeId AND ' : '';
+ $sql->where("a.id IN (SELECT activity_id FROM civicrm_activity_contact WHERE $typeClause !clause)",
+ array('#typeId' => $activityContactValue, '!clause' => $clause)
+ );
}
}
- 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(
- 'target_contact_id' => array_search('Activity Targets', $options),
- 'source_contact_id' => array_search('Activity Source', $options),
- 'assignee_contact_id' => array_search('Activity Assignees', $options),
- );
- foreach ($activityContactOptions as $activityContactName => $activityContactValue) {
- if (!empty($params[$activityContactName])) {
- 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)
- );
- }
+ if (!empty($params['tag_id'])) {
+ if (!is_array($params['tag_id'])) {
+ $params['tag_id'] = array('=' => $params['tag_id']);
}
- 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));
- }
+ $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));
- }
+ }
+ if (!empty($params['file_id'])) {
+ if (!is_array($params['file_id'])) {
+ $params['file_id'] = array('=' => $params['file_id']);
+ }
+ $clause = \CRM_Core_DAO::createSQLFilter('file_id', $params['file_id']);
+ if ($clause) {
+ $sql->where('a.id IN (SELECT entity_id FROM civicrm_entity_file 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);
}
+ $activities = _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, FALSE, 'Activity', $sql);
$options = _civicrm_api3_get_options_from_params($params, FALSE, 'Activity', 'get');
if ($options['is_count']) {
return civicrm_api3_create_success($activities, $params, 'Activity', 'get');
}
- $activities = _civicrm_api3_activity_get_formatResult($params, $activities);
+ $activities = _civicrm_api3_activity_get_formatResult($params, $activities, $options);
//legacy custom data get - so previous formatted response is still returned too
return civicrm_api3_create_success($activities, $params, 'Activity', 'get');
}
* @return array
* new activities list
*/
-function _civicrm_api3_activity_get_formatResult($params, $activities) {
- $returns = CRM_Utils_Array::value('return', $params, array());
- if (!is_array($returns)) {
- $returns = str_replace(' ', '', $returns);
- $returns = explode(',', $returns);
+function _civicrm_api3_activity_get_formatResult($params, $activities, $options) {
+ if (!$activities) {
+ return $activities;
}
- $returns = array_fill_keys($returns, 1);
+ $returns = $options['return'];
foreach ($params as $n => $v) {
if (substr($n, 0, 7) == 'return.') {
$returnkey = substr($n, 7);
$returns['assignee_contact_id'] = 1;
}
+ $tagGet = array('tag_id', 'entity_id');
+ foreach (array_keys($returns) as $key) {
+ if (strpos($key, 'tag_id.') === 0) {
+ $tagGet[] = $key;
+ $returns['tag_id'] = 1;
+ }
+ }
+
foreach ($returns as $n => $v) {
switch ($n) {
case 'assignee_contact_id':
}
break;
+ case 'tag_id':
+ $tags = civicrm_api3('EntityTag', 'get', array(
+ 'entity_table' => 'civicrm_activity',
+ 'entity_id' => array('IN' => array_keys($activities)),
+ 'return' => $tagGet,
+ 'options' => array('limit' => 0),
+ ));
+ foreach ($tags['values'] as $tag) {
+ $key = (int) $tag['entity_id'];
+ unset($tag['entity_id'], $tag['id']);
+ $activities[$key]['tag_id'][$tag['tag_id']] = $tag;
+ }
+ break;
+
+ case 'file_id':
+ $dao = CRM_Core_DAO::executeQuery("SELECT entity_id, file_id FROM civicrm_entity_file WHERE entity_table = 'civicrm_activity' AND entity_id IN (%1)",
+ array(1 => array(implode(',', array_keys($activities)), 'String', CRM_Core_DAO::QUERY_FORMAT_NO_QUOTES)));
+ while ($dao->fetch()) {
+ $activities[$dao->entity_id]['file_id'][] = $dao->file_id;
+ }
+ break;
+
+ case 'case_id':
+ $dao = CRM_Core_DAO::executeQuery("SELECT activity_id, case_id FROM civicrm_case_activity WHERE activity_id IN (%1)",
+ array(1 => array(implode(',', array_keys($activities)), 'String', CRM_Core_DAO::QUERY_FORMAT_NO_QUOTES)));
+ while ($dao->fetch()) {
+ $activities[$dao->activity_id]['case_id'] = $dao->case_id;
+ }
+ break;
+
default:
if (substr($n, 0, 6) == 'custom') {
$returnProperties[$n] = $v;
}
}
}
- if (!empty($activities) && (!empty($returnProperties) || !empty($params['contact_id']))) {
+
+ // Legacy extras
+ if (!empty($params['contact_id'])) {
+ $statusOptions = CRM_Activity_BAO_Activity::buildOptions('status_id', 'get');
+ $typeOptions = CRM_Activity_BAO_Activity::buildOptions('activity_type_id', 'validate');
+ foreach ($activities as $key => &$activityArray) {
+ if (!empty($activityArray['status_id'])) {
+ $activityArray['status'] = $statusOptions[$activityArray['status_id']];
+ }
+ if (!empty($activityArray['activity_type_id'])) {
+ $activityArray['activity_name'] = $typeOptions[$activityArray['activity_type_id']];
+ }
+ }
+ }
+
+ if (!empty($returnProperties) || !empty($params['contact_id'])) {
foreach ($activities as $activityId => $values) {
//@todo - should possibly load activity type id if not loaded (update with id)
_civicrm_api3_custom_data_get($activities[$activityId], CRM_Utils_Array::value('check_permissions', $params), 'Activity', $activityId, NULL, CRM_Utils_Array::value('activity_type_id', $values));