From d83ee56580142edd73da3ff6fcd44b432a08651e Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" Date: Sat, 29 Dec 2018 12:15:17 +0000 Subject: [PATCH] Cache case count when getting list of cases so query is executed once instead of three times --- CRM/Case/BAO/Case.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CRM/Case/BAO/Case.php b/CRM/Case/BAO/Case.php index 7e1b83667a84..38cf7c48af8d 100644 --- a/CRM/Case/BAO/Case.php +++ b/CRM/Case/BAO/Case.php @@ -588,11 +588,16 @@ public static function getCases($allCases = TRUE, $params = array(), $context = $condition = NULL; $casesList = array(); - //validate access for own cases. + // validate access for own cases. if (!self::accessCiviCase()) { return $getCount ? 0 : $casesList; } + // Return cached value instead of re-running query + if (isset(Civi::$statics[__CLASS__]['totalCount']) && $getCount) { + return Civi::$statics[__CLASS__]['totalCount']; + } + $type = CRM_Utils_Array::value('type', $params, 'upcoming'); $userID = CRM_Core_Session::singleton()->get('userID'); @@ -610,7 +615,7 @@ public static function getCases($allCases = TRUE, $params = array(), $context = $caseActivityIDColumn = 'case_recent_activity_id'; } - //validate access for all cases. + // validate access for all cases. if ($allCases && !CRM_Core_Permission::check('access all cases and activities')) { $allCases = FALSE; } @@ -631,7 +636,7 @@ public static function getCases($allCases = TRUE, $params = array(), $context = } $condition = implode(' AND ', $whereClauses); - $totalCount = CRM_Core_DAO::singleValueQuery(self::getCaseActivityCountQuery($type, $userID, $condition)); + Civi::$statics[__CLASS__]['totalCount'] = $totalCount = CRM_Core_DAO::singleValueQuery(self::getCaseActivityCountQuery($type, $userID, $condition)); if ($getCount) { return $totalCount; }