Skip to content

Commit

Permalink
CRM-21829: Code Improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
vinuvarshith committed Apr 19, 2018
1 parent e209b54 commit b08c612
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 71 deletions.
7 changes: 5 additions & 2 deletions CRM/Civicase/Page/ContactCaseTab.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ public function run() {
$cid = CRM_Utils_Request::retrieve('cid', 'Positive', CRM_Core_DAO::$_nullObject, TRUE);
$this->assign('cid', $cid);
// For Related cases tab (optional)
$related_cids = CRM_Utils_Request::retrieve('related_cids', 'String');
if($related_cids)
$relatedCases = CRM_Utils_Request::retrieve('relatedCases', 'Boolean');
if($relatedCases) {
$rcases = new CRM_Civicase_RelatedCases();
$related_cids = implode(',', $rcases->getOrganizationRelatedCaseContactIds($cid));
$this->assign('related_cids', $related_cids);
}
parent::run();
}

Expand Down
70 changes: 70 additions & 0 deletions CRM/Civicase/RelatedCases.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?php

class CRM_Civicase_RelatedCases {

/**
* Retrieve contact ids of all contacts(with cases) related to given Organization contact.
*
* @param int $organizationId
*
* @return array
*/
public function getOrganizationRelatedCaseContactIds($organizationId, $countOnly=FALSE) {
if(!$organizationId) {
return array();
}
$sql = 'SELECT';
if($countOnly) {
$sql .= ' COUNT(cc.case_id) ';
}
else {
$sql .= ' rel.contact_id_a as id ';
}
$sql .= "FROM civicrm_case_contact AS cc
INNER JOIN civicrm_relationship AS rel ON rel.contact_id_a = cc.contact_id
INNER JOIN civicrm_relationship_type AS rtype ON rel.relationship_type_id = rtype.id
WHERE 'Organization' IN (rtype.contact_type_a, rtype.contact_type_b)
AND %1 = CASE
WHEN (rtype.contact_type_a = 'Organization') THEN rel.contact_id_a
ELSE rel.contact_id_b
END";
$all = CRM_Core_DAO::executeQuery($sql, array(
1 => array($organizationId, 'Integer'),
));
if($countOnly) {
return $all->fetchValue();
}
$all = $all->fetchAll();
$ids = array();
foreach($all as $each) {
if(!in_array($each['id'], $ids))
$ids[] = $each['id'];
}
return $ids;
}

/**
* Retrieve count of all cases of all contacts that are related to given Organization contact.
*
* @param int $organizationId
* @return int
*/
public function getOrganizationRelatedCasesCount($organizationId) {
return $this->getOrganizationRelatedCaseContactIds($organizationId, TRUE);
}

/**
* Retrieve contact type for given contact id
*
* @param int $contact_id
* @return string
*/
public function getContactType($contact_id) {
$sql = "SELECT contact_type FROM civicrm_contact
WHERE id = %1";
return CRM_Core_DAO::executeQuery($sql, array(
1 => array($contact_id, 'Integer'),
))->fetchValue();
}
}

72 changes: 4 additions & 68 deletions civicase.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,20 @@ function civicase_civicrm_tabset($tabsetName, &$tabs, $context) {
);
}

$rcases = new CRM_Civicase_RelatedCases();
if(CRM_Core_Permission::check('basic case information') &&
getContactType($context['contact_id']) == 'Organization' &&
$rcases->getContactType($context['contact_id']) == 'Organization' &&
Civi::settings()->get('civicaseRelatedCasesTab', 0)) {
$caseTabKey = array_search('case', array_column($tabs, 'id'));
$tabs[] = array(
'id' => 'related_case',
'url' => CRM_Utils_System::url('civicrm/case/contact-case-tab', array(
'cid' => $context['contact_id'],
'related_cids' => implode(',', getOrganizationRelatedCaseContactIds($context['contact_id'])),
'relatedCases' => TRUE,
)),
'title' => ts('Related Cases'),
'weight' => $tabs[$caseTabKey]['weight']+1,
'count' => getOrganizationRelatedCasesCount($context['contact_id']),
'count' => $rcases->getOrganizationRelatedCasesCount($context['contact_id']),
'class' => 'livePage',
);
}
Expand Down Expand Up @@ -584,68 +585,3 @@ function civicase_civicrm_selectWhereClause($entity, &$clauses) {
unset($clauses['id']);
}
}

/**
* Retrieve contact ids of all contacts(with cases) related to given Organization contact.
*
* @param int $organizationId
*
* @return array
*/
function getOrganizationRelatedCaseContactIds($organizationId, $countOnly=FALSE) {
if(!$organizationId) {
return array();
}
$sql = 'SELECT';
if($countOnly) {
$sql .= ' COUNT(cc.case_id) ';
}
else {
$sql .= ' rel.contact_id_a as id ';
}
$sql .= "FROM civicrm_case_contact AS cc
INNER JOIN civicrm_relationship AS rel ON rel.contact_id_a = cc.contact_id
INNER JOIN civicrm_relationship_type AS rtype ON rel.relationship_type_id = rtype.id
WHERE 'Organization' IN (rtype.contact_type_a, rtype.contact_type_b)
AND %1 = CASE
WHEN (rtype.contact_type_a = 'Organization') THEN rel.contact_id_a
ELSE rel.contact_id_b
END";
$all = CRM_Core_DAO::executeQuery($sql, array(
1 => array($organizationId, 'Integer'),
));
if($countOnly) {
return $all->fetchValue();
}
$all = $all->fetchAll();
$ids = array();
foreach($all as $each) {
if(!in_array($each['id'], $ids))
$ids[] = $each['id'];
}
return $ids;
}

/**
* Retrieve count of all cases of all contacts that are related to given Organization contact.
*
* @param int $organizationId
* @return int
*/
function getOrganizationRelatedCasesCount($organizationId) {
return getOrganizationRelatedCaseContactIds($organizationId, TRUE);
}

/**
* Retrieve contact type for given contact id
*
* @param int $contact_id
* @return string
*/
function getContactType($contact_id) {
$sql = "SELECT contact_type FROM civicrm_contact
WHERE id = %1";
return CRM_Core_DAO::executeQuery($sql, array(
1 => array($contact_id, 'Integer'),
))->fetchValue();
}
3 changes: 2 additions & 1 deletion templates/RelatedCasesField.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
</table>
<script type="text/javascript">
cj('form.CRM_Admin_Form_Setting_Case table.form-layout tbody').append(cj('#civicaseRelatedCasesTab'));
</script>
</script>

0 comments on commit b08c612

Please sign in to comment.