* ID of the case.
*
* @param int $contactID
+ * @param int $startArrayAt This is to support legacy calls to Case.Get API which may rely on the first array index being set to 1
*
* @return array
*/
- public static function retrieveContactIdsByCaseId($caseId, $contactID = NULL) {
+ public static function retrieveContactIdsByCaseId($caseId, $contactID = NULL, $startArrayAt = 0) {
$caseContact = new CRM_Case_DAO_CaseContact();
$caseContact->case_id = $caseId;
$caseContact->find();
$contactArray = array();
- // FIXME: Why does this return a 1-based array?
- $count = 1;
+ $count = $startArrayAt;
while ($caseContact->fetch()) {
if ($contactID != $caseContact->contact_id) {
$contactArray[$count] = $caseContact->contact_id;
* @param int $caseID
* Case id.
* @param int $relationshipID
+ * @param bool $activeOnly
*
* @return array
* case role / relationships
*
*/
- public static function getCaseRoles($contactID, $caseID, $relationshipID = NULL) {
+ public static function getCaseRoles($contactID, $caseID, $relationshipID = NULL, $activeOnly = TRUE) {
$query = '
SELECT rel.id as civicrm_relationship_id,
con.sort_name as sort_name,
LEFT JOIN civicrm_phone ON (civicrm_phone.contact_id = con.id AND civicrm_phone.is_primary = 1)
LEFT JOIN civicrm_email ON (civicrm_email.contact_id = con.id AND civicrm_email.is_primary = 1)
WHERE (rel.contact_id_a = %1 OR rel.contact_id_b = %1) AND rel.case_id = %2
- AND rel.is_active = 1 AND con.is_deleted = 0 AND (rel.end_date IS NULL OR rel.end_date > NOW())';
+ AND con.is_deleted = 0';
+
+ if ($activeOnly) {
+ $query .= ' AND rel.is_active = 1 AND (rel.end_date IS NULL OR rel.end_date > NOW())';
+ }
$params = array(
1 => array($contactID, 'Positive'),
);
if ($relationshipID) {
- $query .= ' AND civicrm_relationship.id = %3 ';
+ $query .= ' AND rel.id = %3 ';
$params[3] = array($relationshipID, 'Integer');
}
$dao = CRM_Core_DAO::executeQuery($query, $params);
$caseDeleted = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $caseID, 'is_deleted');
- // define statuses which are handled like Completed status (others are assumed to be handled like Scheduled status)
- $compStatusValues = array();
- $compStatusNames = array('Completed', 'Left Message', 'Cancelled', 'Unreachable', 'Not Required');
- foreach ($compStatusNames as $name) {
- $compStatusValues[] = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', $name);
- }
+ $compStatusValues = array_keys(
+ CRM_Activity_BAO_Activity::getStatusesByType(CRM_Activity_BAO_Activity::COMPLETED) +
+ 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();
- $clientIds = self::retrieveContactIdsByCaseId($caseID);
if (!$userID) {
$session = CRM_Core_Session::singleton();