Skip to content

Commit

Permalink
CRM-20097 - Break large function in half
Browse files Browse the repository at this point in the history
The smaller getRelatedCaseIds() is used by the civicase extension's getdetails api action.
  • Loading branch information
colemanw committed May 1, 2017
1 parent b37a202 commit 82f610f
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 18 deletions.
40 changes: 25 additions & 15 deletions CRM/Case/BAO/Case.php
Original file line number Diff line number Diff line change
Expand Up @@ -1904,38 +1904,33 @@ public static function caseCount($contactId = NULL, $excludeDeleted = TRUE) {
}

/**
* Retrieve related cases for give case.
* Retrieve related case ids for given case.
*
* @param int $mainCaseId
* Id of main case.
* @param int $contactId
* Id of contact.
* @param int $caseId
* @param bool $excludeDeleted
* Do not include deleted cases.
*
* @return array
*/
public static function getRelatedCases($mainCaseId, $contactId, $excludeDeleted = TRUE) {
public static function getRelatedCaseIds($caseId, $excludeDeleted = TRUE) {
//FIXME : do check for permissions.

$relatedCases = array();
if (!$mainCaseId || !$contactId) {
return $relatedCases;
if (!$caseId) {
return array();
}

$linkActType = array_search('Link Cases',
CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'name')
);
if (!$linkActType) {
return $relatedCases;
return array();
}

$whereClause = "mainCase.id = %2";
if ($excludeDeleted) {
$whereClause .= " AND ( relAct.is_deleted = 0 OR relAct.is_deleted IS NULL )";
}

//1. first fetch related case ids.
$query = "
SELECT relCaseAct.case_id
FROM civicrm_case mainCase
Expand All @@ -1947,17 +1942,32 @@ public static function getRelatedCases($mainCaseId, $contactId, $excludeDeleted

$dao = CRM_Core_DAO::executeQuery($query, array(
1 => array($linkActType, 'Integer'),
2 => array($mainCaseId, 'Integer'),
2 => array($caseId, 'Integer'),
));
$relatedCaseIds = array();
while ($dao->fetch()) {
$relatedCaseIds[$dao->case_id] = $dao->case_id;
}
$dao->free();

// there are no related cases.
if (empty($relatedCaseIds)) {
return $relatedCases;
return array_values($relatedCaseIds);
}

/**
* Retrieve related case details for given case.
*
* @param int $caseId
* @param bool $excludeDeleted
* Do not include deleted cases.
*
* @return array
*/
public static function getRelatedCases($caseId, $excludeDeleted = TRUE) {
$relatedCaseIds = self::getRelatedCaseIds($caseId, $excludeDeleted);
$relatedCases = array();

if (!$relatedCaseIds) {
return array();
}

$whereClause = 'relCase.id IN ( ' . implode(',', $relatedCaseIds) . ' )';
Expand Down
2 changes: 1 addition & 1 deletion CRM/Case/Form/Activity/LinkCases.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static function preProcess(&$form) {
// get the related cases for given case.
$relatedCases = $form->get('relatedCases');
if (!isset($relatedCases)) {
$relatedCases = CRM_Case_BAO_Case::getRelatedCases($caseId, $form->_currentlyViewedContactId);
$relatedCases = CRM_Case_BAO_Case::getRelatedCases($caseId);
$form->set('relatedCases', empty($relatedCases) ? FALSE : $relatedCases);
}
}
Expand Down
4 changes: 2 additions & 2 deletions CRM/Case/Form/CaseView.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public function preProcess() {
if (!isset($relatedCases)) {
$cId = CRM_Utils_Request::retrieve('cid', 'Integer');
$caseId = CRM_Utils_Request::retrieve('id', 'Integer');
$relatedCases = CRM_Case_BAO_Case::getRelatedCases($caseId, $cId);
$relatedCases = CRM_Case_BAO_Case::getRelatedCases($caseId);
}
$this->assign('relatedCases', $relatedCases);
$this->assign('showRelatedCases', TRUE);
Expand Down Expand Up @@ -141,7 +141,7 @@ public function preProcess() {
//get the related cases for given case.
$relatedCases = $this->get('relatedCases');
if (!isset($relatedCases)) {
$relatedCases = CRM_Case_BAO_Case::getRelatedCases($this->_caseID, $this->_contactID);
$relatedCases = CRM_Case_BAO_Case::getRelatedCases($this->_caseID);
$relatedCases = empty($relatedCases) ? FALSE : $relatedCases;
$this->set('relatedCases', $relatedCases);
}
Expand Down

0 comments on commit 82f610f

Please sign in to comment.