From b63505e7d35fdd6e3867c51727576b437769d95f Mon Sep 17 00:00:00 2001 From: colemanw Date: Sun, 17 Sep 2023 14:56:17 -0400 Subject: [PATCH] Activity - More accurate calculation of permittedActivityTypes The strict array key comparison seemed wrong, array_diff_key works better. I was hoping this would be more efficient by skipping the where clause for privledge users, but it doesn't. Oh well at least this is more correct. --- CRM/Activity/BAO/Activity.php | 6 +++--- tests/phpunit/CRM/Contact/SelectorTest.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 37ece7b6fd..4aaa2e596d 100644 --- a/CRM/Activity/BAO/Activity.php +++ b/CRM/Activity/BAO/Activity.php @@ -806,13 +806,13 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { public function addSelectWhereClause() { $clauses = []; $permittedActivityTypeIDs = self::getPermittedActivityTypes(); - $allActivityTypes = self::buildOptions('activity_type_id'); + $allActivityTypes = self::buildOptions('activity_type_id', 'validate'); if (empty($permittedActivityTypeIDs)) { // This just prevents a mysql fail if they have no access - should be extremely edge case. $permittedActivityTypeIDs = [0]; } - if (array_keys($allActivityTypes) !== array_keys($permittedActivityTypeIDs)) { - $clauses['activity_type_id'] = ('IN (' . implode(', ', $permittedActivityTypeIDs) . ')'); + if (array_diff_key($allActivityTypes, $permittedActivityTypeIDs)) { + $clauses['activity_type_id'] = ['IN (' . implode(', ', $permittedActivityTypeIDs) . ')']; } $contactClause = CRM_Utils_SQL::mergeSubquery('Contact'); diff --git a/tests/phpunit/CRM/Contact/SelectorTest.php b/tests/phpunit/CRM/Contact/SelectorTest.php index 7d4c33846a..e08455d31f 100644 --- a/tests/phpunit/CRM/Contact/SelectorTest.php +++ b/tests/phpunit/CRM/Contact/SelectorTest.php @@ -455,8 +455,8 @@ class CRM_Contact_SelectorTest extends CiviUnitTestCase { 'searchDescendentGroups' => FALSE, 'expected_query' => [ 0 => 'SELECT contact_a.id as contact_id, source_contact.id as source_contact_id', - 2 => 'WHERE ( source_contact.id IS NOT NULL ) AND ( 1 ) AND (contact_a.is_deleted = 0)', ], + 'where_contains' => 'WHERE ( source_contact.id IS NOT NULL ) AND ( 1 ) AND (contact_a.is_deleted = 0)', ], ], 'Test display relationships' => [ -- 2.25.1