X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2FActivity.php;h=784095e0e444c35fa2108d5b4457b440c8a48de6;hb=d9103d1b67e4eae62e5d913c3bd0926688b31ff1;hp=5fa7492538e79da7d6b05bf5552df35b71da1f7e;hpb=82c14a6fa6199088a757cd3d47f2b9d02c3a2692;p=civicrm-core.git diff --git a/api/v3/Activity.php b/api/v3/Activity.php index 5fa7492538..784095e0e4 100644 --- a/api/v3/Activity.php +++ b/api/v3/Activity.php @@ -31,7 +31,6 @@ * @package CiviCRM_APIv3 */ - /** * Creates or updates an Activity. * @@ -291,7 +290,7 @@ function _civicrm_api3_activity_get_spec(&$params) { * @param array $params * Array per getfields documentation. * - * @return array API result array + * @return array * API result array * * @throws \API_Exception @@ -301,6 +300,7 @@ function _civicrm_api3_activity_get_spec(&$params) { function civicrm_api3_activity_get($params) { $options = _civicrm_api3_get_options_from_params($params, FALSE, 'Activity', 'get'); $sql = CRM_Utils_SQL_Select::fragment(); + _civicrm_activity_get_handleSourceContactNameOrderBy($params, $options, $sql); _civicrm_api3_activity_get_extraFilters($params, $sql); @@ -337,6 +337,42 @@ function civicrm_api3_activity_get($params) { return civicrm_api3_create_success($activities, $params, 'Activity', 'get'); } +/** + * Handle source_contact_name as a sort parameter. + * + * This is passed from the activity selector - e.g search results or contact tab. + * + * It's a non-standard handling but this api already handles variations on handling source_contact + * as a filter & as a field so it's in keeping with that. Source contact has a one-one relationship + * with activity table. + * + * Test coverage in CRM_Activity_BAO_ActivtiyTest::testGetActivitiesforContactSummaryWithSortOptions + * + * @param array $params + * @param array $options + * @param CRM_Utils_SQL_Select $sql + */ +function _civicrm_activity_get_handleSourceContactNameOrderBy(&$params, &$options, $sql) { + $sourceContactID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_ActivityContact', 'record_type_id', 'Activity Source'); + if (!empty($options['sort']) + && in_array($options['sort'], [ + 'source_contact_name', + 'source_contact_name desc', + 'source_contact_name asc', + ])) { + $order = substr($options['sort'], -4) === 'desc' ? 'desc' : 'asc'; + $sql->join( + 'source_contact', + "LEFT JOIN + civicrm_activity_contact ac ON (ac.activity_id = a.id AND record_type_id = #sourceContactID) + LEFT JOIN civicrm_contact c ON c.id = ac.contact_id", + ['sourceContactID' => $sourceContactID] + ); + $sql->orderBy("c.display_name $order"); + unset($options['sort'], $params['options']['sort']); + } +} + /** * Support filters beyond what basic_get can do. * @@ -592,7 +628,7 @@ function _civicrm_api3_activity_fill_activity_contact_names(&$activities, $param $typeMap = [ $assigneeType => 'assignee', $sourceType => 'source', - $targetType => 'target' + $targetType => 'target', ]; $activityContactTypes = [$sourceType]; @@ -609,8 +645,10 @@ function _civicrm_api3_activity_fill_activity_contact_names(&$activities, $param 'activity_id', 'record_type_id', 'contact_id.display_name', - 'contact_id' + 'contact_id.sort_name', + 'contact_id', ], + 'options' => ['limit' => 0], 'check_permissions' => !empty($params['check_permissions']), ]; if (count($activityContactTypes) < 3) { @@ -623,15 +661,16 @@ function _civicrm_api3_activity_fill_activity_contact_names(&$activities, $param if (in_array($recordType, ['target', 'assignee'])) { $activities[$activityContact['activity_id']][$recordType . '_contact_id'][] = $contactID; $activities[$activityContact['activity_id']][$recordType . '_contact_name'][$contactID] = isset($activityContact['contact_id.display_name']) ? $activityContact['contact_id.display_name'] : ''; + $activities[$activityContact['activity_id']][$recordType . '_contact_sort_name'][$contactID] = isset($activityContact['contact_id.sort_name']) ? $activityContact['contact_id.sort_name'] : ''; } else { $activities[$activityContact['activity_id']]['source_contact_id'] = $contactID; $activities[$activityContact['activity_id']]['source_contact_name'] = isset($activityContact['contact_id.display_name']) ? $activityContact['contact_id.display_name'] : ''; + $activities[$activityContact['activity_id']]['source_contact_sort_name'] = isset($activityContact['contact_id.sort_name']) ? $activityContact['contact_id.sort_name'] : ''; } } } - /** * Delete a specified Activity. * @@ -767,7 +806,7 @@ function _civicrm_api3_activity_getlist_output($result, $request) { 'id' => $row[$request['id_field']], 'label' => $row[$request['label_field']] ? $row[$request['label_field']] : ts('(no subject)'), 'description' => [ - CRM_Core_Pseudoconstant::getLabel('CRM_Activity_BAO_Activity', 'activity_type_id', $row['activity_type_id']), + CRM_Core_PseudoConstant::getLabel('CRM_Activity_BAO_Activity', 'activity_type_id', $row['activity_type_id']), ], ]; if (!empty($row['activity_date_time'])) {