$mask = CRM_Core_Action::mask($permissions);
$caseTypes = CRM_Case_PseudoConstant::caseType('name');
- foreach ($result->fetchAll() as $key => $case) {
+ foreach ($result->fetchAll() as $case) {
+ $key = $case['case_id'];
$casesList[$key] = array();
$casesList[$key]['DT_RowId'] = $case['case_id'];
$casesList[$key]['DT_RowAttr'] = array('data-entity' => 'case', 'data-id' => $case['case_id']);
$casesList[$key]['activity_list'] = sprintf('<a title="%s" class="crm-expand-row" href="%s"></a>',
ts('Activities'),
- CRM_Utils_System::url('civicrm/case/details', array('caseid' => $case['case_id'], 'cid' => $case['contact_id'], 'type' => $type))
+ CRM_Utils_System::url('civicrm/case/details', array('caseId' => $case['case_id'], 'cid' => $case['contact_id'], 'type' => $type))
);
$phone = empty($case['phone']) ? '' : '<br /><span class="description">' . $case['phone'] . '</span>';
}
if (self::checkPermission($actId, 'edit', $case['activity_type_id'], $userID)) {
$casesList[$key]['date'] .= sprintf('<a class="action-item crm-hover-button" href="%s" title="%s"><i class="crm-i fa-pencil"></i></a>',
- CRM_Utils_System::url('civicrm/case/activity', array('reset' => 1, 'cid' => $case['contact_id'], 'caseid' => $case['case_id'], 'action' => 'update')),
+ CRM_Utils_System::url('civicrm/case/activity', array('reset' => 1, 'cid' => $case['contact_id'], 'caseid' => $case['case_id'], 'action' => 'update', 'id' => $actId)),
ts('Edit activity')
);
}
*
* @param null $context
* @param int $userID
- * @param null $type
+ * @param null $type (deprecated)
*
* @return array
* Array of case activities
*
*/
public static function getCaseActivity($caseID, &$params, $contactID, $context = NULL, $userID = NULL, $type = NULL) {
- $values = array();
-
$activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
$assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
$sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
CRM_Activity_BAO_Activity::getStatusesByType(CRM_Activity_BAO_Activity::CANCELLED)
);
- $contactViewUrl = CRM_Utils_System::url("civicrm/contact/view", "reset=1&cid=", FALSE, NULL, FALSE);
- $hasViewContact = CRM_Core_Permission::giveMeAllACLs();
-
if (!$userID) {
$session = CRM_Core_Session::singleton();
$userID = $session->get('userID');
continue;
}
- $caseActivity['DT_RowId'] = $caseActivityId;
+ $caseActivities[$caseActivityId]['DT_RowId'] = $caseActivityId;
//Add classes to the row, via DataTables syntax
- $caseActivity['DT_RowClass'] = "crm-entity status-id-$dao->status";
+ $caseActivities[$caseActivityId]['DT_RowClass'] = "crm-entity status-id-$dao->status";
if (CRM_Utils_Array::crmInArray($dao->status, $compStatusValues)) {
- $caseActivity['DT_RowClass'] .= " status-completed";
+ $caseActivities[$caseActivityId]['DT_RowClass'] .= " status-completed";
}
else {
if (CRM_Utils_Date::overdue($dao->display_date)) {
- $caseActivity['DT_RowClass'] .= " status-overdue";
+ $caseActivities[$caseActivityId]['DT_RowClass'] .= " status-overdue";
}
else {
- $caseActivity['DT_RowClass'] .= " status-scheduled";
+ $caseActivities[$caseActivityId]['DT_RowClass'] .= " status-scheduled";
}
}
if (!empty($dao->priority)) {
if ($dao->priority == CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'priority_id', 'Urgent')) {
- $caseActivity['DT_RowClass'] .= " priority-urgent ";
+ $caseActivities[$caseActivityId]['DT_RowClass'] .= " priority-urgent ";
}
elseif ($dao->priority == CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'priority_id', 'Low')) {
- $caseActivity['DT_RowClass'] .= " priority-low ";
+ $caseActivities[$caseActivityId]['DT_RowClass'] .= " priority-low ";
}
}
//Add data to the row for inline editing, via DataTable syntax
- $caseActivity['DT_RowAttr'] = array();
- $caseActivity['DT_RowAttr']['data-entity'] = 'activity';
- $caseActivity['DT_RowAttr']['data-id'] = $caseActivityId;
+ $caseActivities[$caseActivityId]['DT_RowAttr'] = array();
+ $caseActivities[$caseActivityId]['DT_RowAttr']['data-entity'] = 'activity';
+ $caseActivities[$caseActivityId]['DT_RowAttr']['data-id'] = $caseActivityId;
//Activity Date and Time
- $caseActivity['activity_date_time'] = CRM_Utils_Date::customFormat($dao->display_date);
+ $caseActivities[$caseActivityId]['activity_date_time'] = CRM_Utils_Date::customFormat($dao->display_date);
//Activity Subject
- $caseActivity['subject'] = $dao->subject;
+ $caseActivities[$caseActivityId]['subject'] = $dao->subject;
//Activity Type
- $caseActivity['type'] = (!empty($activityTypes[$dao->type]['icon']) ? '<span class="crm-i ' . $activityTypes[$dao->type]['icon'] . '"></span> ' : '')
+ $caseActivities[$caseActivityId]['type'] = (!empty($activityTypes[$dao->type]['icon']) ? '<span class="crm-i ' . $activityTypes[$dao->type]['icon'] . '"></span> ' : '')
. $activityTypes[$dao->type]['label'];
- //Activity Target (With)
- $targetContact = '';
- if (isset($dao->target_contact_id)) {
- $targetContact = $dao->target_contact_name;
- if ($hasViewContact) {
- $targetContact = '<a href="' . $contactViewUrl . $dao->target_contact_id . '">' . $dao->target_contact_name . '</a>';
+ // Activity Target (With Contact) (There can be more than one)
+ $targetContact = self::formatContactLink($dao->target_contact_id, $dao->target_contact_name);
+ if (empty($caseActivities[$caseActivityId]['target_contact_name'])) {
+ $caseActivities[$caseActivityId]['target_contact_name'] = $targetContact;
+ }
+ else {
+ if (strpos($caseActivities[$caseActivityId]['target_contact_name'], $targetContact) === FALSE) {
+ $caseActivities[$caseActivityId]['target_contact_name'] .= '; ' . $targetContact;
}
}
- $caseActivity['target_contact_name'] = $targetContact;
- //Activity Source Contact (Reporter)
- $sourceContact = $dao->source_contact_name;
- if ($hasViewContact) {
- $sourceContact = '<a href="' . $contactViewUrl . $dao->source_contact_id . '">' . $dao->source_contact_name . '</a>';
- }
- $caseActivity['source_contact_name'] = $sourceContact;
+ // Activity Source Contact (Reporter) (There can only be one)
+ $sourceContact = self::formatContactLink($dao->source_contact_id, $dao->source_contact_name);
+ $caseActivities[$caseActivityId]['source_contact_name'] = $sourceContact;
- //Activity Assignee. CRM-4485.
- $assigneeContact = '';
- if (isset($dao->assignee_contact_id)) {
- $assigneeContact = $dao->assignee_contact_name;
- if ($hasViewContact) {
- $assigneeContact = '<a href="' . $contactViewUrl . $dao->assignee_contact_id . '">' . $dao->assignee_contact_name . '</a>';
+ // Activity Assignee (There can be more than one)
+ $assigneeContact = self::formatContactLink($dao->assignee_contact_id, $dao->assignee_contact_name);
+ if (empty($caseActivities[$caseActivityId]['assignee_contact_name'])) {
+ $caseActivities[$caseActivityId]['assignee_contact_name'] = $assigneeContact;
+ }
+ else {
+ if (strpos($caseActivities[$caseActivityId]['assignee_contact_name'], $assigneeContact) === FALSE) {
+ $caseActivities[$caseActivityId]['assignee_contact_name'] .= '; ' . $assigneeContact;
}
}
- $caseActivity['assignee_contact_name'] = $assigneeContact;
//Activity Status
- $caseActivity['status_id'] = $activityStatuses[$dao->status];
+ $caseActivities[$caseActivityId]['status_id'] = $activityStatuses[$dao->status];
// FIXME: Why are we not using CRM_Core_Action for these links? This is too much manual work and likely to get out-of-sync with core markup.
$url = "";
}
elseif (!$caseDeleted) {
$url = ' <a ' . $css . ' href="' . $restoreUrl . $additionalUrl . '">' . ts('Restore') . '</a>';
- $caseActivity['status_id'] = $caseActivity['status_id'] . '<br /> (deleted)';
+ $caseActivities[$caseActivityId]['status_id'] = $caseActivities[$caseActivityId]['status_id'] . '<br /> (deleted)';
}
//check for operations.
// if there are file attachments we will return how many and, if only one, add a link to it
if (!empty($dao->attachment_ids)) {
$attachmentIDs = array_unique(explode(',', $dao->attachment_ids));
- $caseActivity['no_attachments'] = count($attachmentIDs);
+ $caseActivities[$caseActivityId]['no_attachments'] = count($attachmentIDs);
$url .= implode(' ', CRM_Core_BAO_File::paperIconAttachment('civicrm_activity', $caseActivityId));
}
- $caseActivity['links'] = $url;
-
- array_push($caseActivities, $caseActivity);
+ $caseActivities[$caseActivityId]['links'] = $url;
}
$dao->free();
$caseActivitiesDT = array();
- $caseActivitiesDT['data'] = $caseActivities;
+ $caseActivitiesDT['data'] = array_values($caseActivities);
$caseActivitiesDT['recordsTotal'] = $caseCount;
$caseActivitiesDT['recordsFiltered'] = $caseCount;
return $caseActivitiesDT;
}
+ /**
+ * Helper function to generate a formatted contact link/name for display in the Case activities tab
+ *
+ * @param $contactId
+ * @param $contactName
+ *
+ * @return string
+ */
+ private static function formatContactLink($contactId, $contactName) {
+ if (empty($contactId)) {
+ return NULL;
+ }
+
+ $hasViewContact = CRM_Contact_BAO_Contact_Permission::allow($contactId);
+
+ if ($hasViewContact) {
+ $contactViewUrl = CRM_Utils_System::url("civicrm/contact/view", "reset=1&cid={$contactId}");
+ return "<a href=\"{$contactViewUrl}\">" . $contactName . "</a>";
+ }
+ else {
+ return $contactName;
+ }
+ }
+
/**
* Get Case Related Contacts.
*
AND civicrm_case.id IN( {$caseID})
AND civicrm_case.is_deleted = {$cases['case_deleted']}";
- $query = self::getCaseActivityQuery($type, $userID, $condition, $cases['case_deleted']);
+ $query = self::getCaseActivityQuery($type, $userID, $condition);
$res = CRM_Core_DAO::executeQuery($query);