function &getActivity($clientID, $activityDAO, &$activityTypeInfo) { if (empty($this->_redactionStringRules)) { $this->_redactionStringRules = array(); } $activity = array(); $activity['fields'] = array(); if ($clientID) { $clientID = CRM_Utils_Type::escape($clientID, 'Integer'); if (!in_array($activityTypeInfo['name'], array('Email', 'Inbound Email'))) { $activity['editURL'] = CRM_Utils_System::url('civicrm/case/activity', "reset=1&cid={$clientID}&caseid={$activityDAO->caseID}&action=update&atype={$activityDAO->activity_type_id}&id={$activityDAO->id}"); } else { $activity['editURL'] = ''; } $client = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $clientID, 'display_name'); // add Client SortName as well as Display to the strings to be redacted across the case session // suffixed with a randomly generated 4-digit number if (!array_key_exists($client, $this->_redactionStringRules)) { $this->_redactionStringRules = CRM_Utils_Array::crmArrayMerge($this->_redactionStringRules, array($client => 'name_' . rand(10000, 100000))); $clientSortName = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $clientID, 'sort_name'); if (!array_key_exists($clientSortName, $this->_redactionStringRules)) { $this->_redactionStringRules[$clientSortName] = $this->_redactionStringRules[$client]; } } $activity['fields'][] = array('label' => 'Client', 'value' => $this->redact($client), 'type' => 'String'); } $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts); $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts); if (!empty($activityDAO->targetID)) { // Re-lookup the target ID since the DAO only has the first recipient if there are multiple. // Maybe not the best solution. $targetNames = CRM_Activity_BAO_ActivityContact::getNames($activityDAO->id, $targetID); $processTarget = FALSE; $label = ts('With Contact(s)'); if (in_array($activityTypeInfo['name'], array('Email', 'Inbound Email'))) { $processTarget = TRUE; $label = ts('Recipient'); } if (!$processTarget) { foreach ($targetNames as $targetID => $targetName) { if ($targetID != $clientID) { $processTarget = TRUE; break; } } } if ($processTarget) { $targetRedacted = array(); foreach ($targetNames as $targetID => $target) { // add Recipient SortName as well as Display to the strings to be redacted across the case session // suffixed with a randomly generated 4-digit number if (!array_key_exists($target, $this->_redactionStringRules)) { $this->_redactionStringRules = CRM_Utils_Array::crmArrayMerge($this->_redactionStringRules, array($target => 'name_' . rand(10000, 100000))); $targetSortName = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $targetID, 'sort_name'); if (!array_key_exists($targetSortName, $this->_redactionStringRules)) { $this->_redactionStringRules[$targetSortName] = $this->_redactionStringRules[$target]; } } $targetRedacted[] = $this->redact($target); } $activity['fields'][] = array('label' => $label, 'value' => implode('; ', $targetRedacted), 'type' => 'String'); } } // Activity Type info is a special field $activity['fields'][] = array('label' => ts('Activity Type'), 'value' => $activityTypeInfo['label'], 'type' => 'String'); $activity['fields'][] = array('label' => ts('Subject'), 'value' => htmlspecialchars($this->redact($activityDAO->subject)), 'type' => 'Memo'); $creator = $this->getCreatedBy($activityDAO->id); // add Creator to the strings to be redacted across the case session if (!array_key_exists($creator, $this->_redactionStringRules)) { $this->_redactionStringRules = CRM_Utils_Array::crmArrayMerge($this->_redactionStringRules, array($creator => 'name_' . rand(10000, 100000))); } $activity['fields'][] = array('label' => ts('Created By'), 'value' => $this->redact($creator), 'type' => 'String'); $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name'); $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts); $source_contact_id = CRM_Activity_BAO_Activity::getActivityContact($activityDAO->id, $sourceID); $reporter = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $source_contact_id, 'display_name'); // add Reporter SortName as well as Display to the strings to be redacted across the case session // suffixed with a randomly generated 4-digit number if (!array_key_exists($reporter, $this->_redactionStringRules)) { $this->_redactionStringRules = CRM_Utils_Array::crmArrayMerge($this->_redactionStringRules, array($reporter => 'name_' . rand(10000, 100000))); $reporterSortName = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $source_contact_id, 'sort_name'); if (!array_key_exists($reporterSortName, $this->_redactionStringRules)) { $this->_redactionStringRules[$reporterSortName] = $this->_redactionStringRules[$reporter]; } } $activity['fields'][] = array('label' => ts('Reported By'), 'value' => $this->redact($reporter), 'type' => 'String'); if (!empty($activityDAO->assigneeID)) { //allow multiple assignee contacts.CRM-4503. $assignee_contact_names = CRM_Activity_BAO_ActivityAssignment::getAssigneeNames(array($activityDAO->id), TRUE); foreach ($assignee_contact_names as &$assignee) { // add Assignee to the strings to be redacted across the case session $this->_redactionStringRules = CRM_Utils_Array::crmArrayMerge($this->_redactionStringRules, array($assignee => 'name_' . rand(10000, 100000))); $assignee = $this->redact($assignee); } $assigneeContacts = implode(', ', $assignee_contact_names); $activity['fields'][] = array('label' => ts('Assigned To'), 'value' => $assigneeContacts, 'type' => 'String'); } if ($activityDAO->medium_id) { $activity['fields'][] = array('label' => ts('Medium'), 'value' => CRM_Core_OptionGroup::getLabel('encounter_medium', $activityDAO->medium_id, FALSE), 'type' => 'String'); } $activity['fields'][] = array('label' => ts('Location'), 'value' => $activityDAO->location, 'type' => 'String'); $activity['fields'][] = array('label' => ts('Date and Time'), 'value' => $activityDAO->activity_date_time, 'type' => 'Date'); $activity['fields'][] = array('label' => ts('Details'), 'value' => $this->redact(CRM_Utils_String::stripAlternatives($activityDAO->details)), 'type' => 'Memo'); // Skip Duration field if empty (to avoid " minutes" output). Might want to do this for all fields at some point. dgg if ($activityDAO->duration) { $activity['fields'][] = array('label' => ts('Duration'), 'value' => $activityDAO->duration . ' ' . ts('minutes'), 'type' => 'Int'); } $activity['fields'][] = array('label' => ts('Status'), 'value' => CRM_Core_OptionGroup::getLabel('activity_status', $activityDAO->status_id), 'type' => 'String'); $activity['fields'][] = array('label' => ts('Priority'), 'value' => CRM_Core_OptionGroup::getLabel('priority', $activityDAO->priority_id), 'type' => 'String'); //for now empty custom groups $activity['customGroups'] = $this->getCustomData($clientID, $activityDAO, $activityTypeInfo); return $activity; }
/** * Given an ezComponents-parsed representation of * a text with alternatives return only the first one * * @param string $full * All alternatives as a long string (or some other text). * * @return string * only the first alternative found (or the text without alternatives) */ function smarty_modifier_crmStripAlternatives($full) { return CRM_Utils_String::stripAlternatives($full); }
/** * Given an ezComponents-parsed representation of * a text with alternatives return only the first one * * @param string $full all alternatives as a long string (or some other text) * * @return string only the first alternative found (or the text without alternatives) */ function smarty_modifier_crmStripAlternatives($full) { require_once 'CRM/Utils/String.php'; return CRM_Utils_String::stripAlternatives($full); }