'source_contact_name',
'assignee_contact_id',
'target_contact_id',
- 'target_contact_name',
'assignee_contact_name',
'status_id',
'subject',
'subject' => 'subject',
'campaign_id' => 'campaign_id',
'assignee_contact_name' => 'assignee_contact_name',
- 'target_contact_name' => 'target_contact_name',
'source_contact_id' => 'source_contact_id',
'source_contact_name' => 'source_contact_name',
'case_id' => 'case_id',
$activities[$id] = array();
$isBulkActivity = (!$bulkActivityTypeID || ($bulkActivityTypeID === $activity['activity_type_id']));
-
+ $activities[$id]['target_contact_counter'] = count($activity['target_contact_id']);
+ if ($activities[$id]['target_contact_counter']) {
+ try {
+ $activities[$id]['target_contact_name'][$activity['target_contact_id'][0]] = civicrm_api3('Contact', 'getvalue', ['id' => $activity['target_contact_id'][0], 'return' => 'sort_name']);
+ }
+ catch (CiviCRM_API3_Exception $e) {
+ // Really they should have names but a fatal here feels wrong.
+ $activities[$id]['target_contact_name'] = '';
+ }
+ }
foreach ($mappingParams as $apiKey => $expectedName) {
if (in_array($apiKey, array('assignee_contact_name', 'target_contact_name'))) {
$activities[$id][$expectedName] = CRM_Utils_Array::value($apiKey, $activity, array());
- if ($apiKey == 'target_contact_name' && count($activity['target_contact_name'])) {
- $activities[$id]['target_contact_counter'] = count($activity['target_contact_name']);
- }
if ($isBulkActivity) {
$activities[$id]['recipients'] = ts('(%1 recipients)', array(1 => count($activity['target_contact_name'])));
return $values;
}
+ /**
+ * @inheritDoc
+ */
+ public function addSelectWhereClause() {
+ $clauses = parent::addSelectWhereClause();
+ if (!CRM_Core_Permission::check('view all activities')) {
+ $permittedActivityTypeIDs = self::getPermittedActivityTypes();
+ if (empty($permittedActivityTypeIDs)) {
+ // This just prevents a mysql fail if they have no access - should be extremely edge case.
+ $permittedActivityTypeIDs = [0];
+ }
+ $clauses['activity_type_id'] = ('IN (' . implode(', ', $permittedActivityTypeIDs) . ')');
+ }
+ return $clauses;
+ }
+
/**
* Get an array of components that are accessible by the currenct user.
*
$priorActivities[$index][$dao->activityID]['name'] = $dao->name;
$priorActivities[$index][$dao->activityID]['date'] = $dao->date;
}
- $dao->free();
}
}
return $priorActivities[$index];
$result = self::deleteActivity($activityParams);
}
- $activityContactOther->free();
}
- $activityContact->free();
$transaction->commit();
return $result;
}
if (!self::hasPermissionForActivityType($activity->activity_type_id)) {
+ // this check is redundant for api access / anything that calls the selectWhereClause
+ // to determine ACLs.
return FALSE;
}
// Return early when it is case activity.
*
* @return array
*/
- public static function getPermittedActivityTypes() {
+ protected static function getPermittedActivityTypes() {
$userID = (int) CRM_Core_Session::getLoggedInContactID();
if (!isset(Civi::$statics[__CLASS__]['permitted_activity_types'][$userID])) {
$permittedActivityTypes = [];
INNER JOIN civicrm_option_group grp ON (grp.id = option_group_id AND grp.name = 'activity_type')
WHERE component_id IS NULL $componentClause")->fetchAll();
foreach ($types as $type) {
- $permittedActivityTypes[$type['activity_type_id']] = $type['activity_type_id'];
+ $permittedActivityTypes[$type['activity_type_id']] = (int) $type['activity_type_id'];
}
Civi::$statics[__CLASS__]['permitted_activity_types'][$userID] = $permittedActivityTypes;
}
$fileValues = CRM_Core_BAO_File::path($value, $params['activityID']);
$customParams["custom_{$key}_-1"] = array(
'name' => $fileValues[0],
- 'path' => $fileValues[1],
+ 'type' => $fileValues[1],
);
}
else {
return FALSE;
}
+ /**
+ * @return array
+ */
+ public static function getEntityRefFilters() {
+ return [
+ ['key' => 'activity_type_id', 'value' => ts('Activity Type')],
+ ['key' => 'status_id', 'value' => ts('Activity Status')],
+ ];
+ }
+
}