diff --git a/CRM/Contact/BAO/Relationship.php b/CRM/Contact/BAO/Relationship.php index d066665f07c3..64edc3a979f1 100644 --- a/CRM/Contact/BAO/Relationship.php +++ b/CRM/Contact/BAO/Relationship.php @@ -1233,6 +1233,8 @@ public static function makeURLClause($contactId, $status, $numRelationship, $cou * @param bool $permissionedContact * to return only permissioned Contact * @param array $params + * @param bool $includeTotalCount + * Should we return a count of total accessable relationships * * @return array|int * relationship records @@ -1243,7 +1245,7 @@ public static function getRelationship( $count = 0, $relationshipId = 0, $links = NULL, $permissionMask = NULL, $permissionedContact = FALSE, - $params = array() + $params = array(), $includeTotalCount = FALSE ) { $values = array(); if (!$contactId && !$relationshipId) { @@ -1277,7 +1279,8 @@ public static function getRelationship( } // building the query string - $queryString = $select1 . $from1 . $where1 . $select2 . $from2 . $where2 . $order . $limit; + CRM_Core_DAO::executeQuery("CREATE TEMPORARY TABLE civicrm_contact_relationships " . $select1 . $from1 . $where1 . $select2 . $from2 . $where2); + $queryString = "SELECT * FROM civicrm_contact_relationships " . $order . $limit; $relationship = new CRM_Contact_DAO_Relationship(); @@ -1288,10 +1291,15 @@ public static function getRelationship( while ($relationship->fetch()) { $relationshipCount += $relationship->cnt1 + $relationship->cnt2; } + CRM_Core_DAO::executeQuery("DROP TEMPORARY TABLE IF EXISTS civicrm_contact_relationships"); return $relationshipCount; } else { + if ($includeTotalCount) { + $values['total_relationships'] = CRM_Core_DAO::singleValueQuery("SELECT count(*) FROM civicrm_contact_relationships"); + } + $mask = NULL; if ($status != self::INACTIVE) { if ($links) { @@ -1437,6 +1445,7 @@ public static function getRelationship( } $relationship->free(); + CRM_Core_DAO::executeQuery("DROP TEMPORARY TABLE IF EXISTS civicrm_contact_relationships"); return $values; } } @@ -2067,20 +2076,13 @@ public static function getContactRelationshipSelector(&$params) { $params['rp'], 0, 0, $links, $mask, $permissionedContacts, - $params + $params, TRUE ); $contactRelationships = array(); - $params['total'] = 0; + $params['total'] = $relationships['total_relationships']; + unset($relationships['total_relationships']); if (!empty($relationships)) { - // FIXME: we cannot directly determine total permissioned relationship, hence re-fire query - $permissionedRelationships = CRM_Contact_BAO_Relationship::getRelationship($params['contact_id'], - $relationshipStatus, - 0, 0, 0, - NULL, NULL, - $permissionedContacts - ); - $params['total'] = count($permissionedRelationships); // format params foreach ($relationships as $relationshipId => $values) {